mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-12 03:18:26 -06:00
Windows: first implementation of dynamic mode
This commit is contained in:
@@ -224,7 +224,7 @@ static NTSTATUS MountDrive (DriveFilterExtension *Extension, Password *password,
|
||||
NTSTATUS status;
|
||||
LARGE_INTEGER offset;
|
||||
char *header;
|
||||
int pkcs5_prf = 0;
|
||||
int pkcs5_prf = 0, pin = 0;
|
||||
byte *mappedCryptoInfo = NULL;
|
||||
|
||||
Dump ("MountDrive pdo=%p\n", Extension->Pdo);
|
||||
@@ -295,7 +295,9 @@ static NTSTATUS MountDrive (DriveFilterExtension *Extension, Password *password,
|
||||
}
|
||||
}
|
||||
|
||||
if (ReadVolumeHeader (!hiddenVolume, header, password, pkcs5_prf, FALSE, &Extension->Queue.CryptoInfo, Extension->HeaderCryptoInfo) == 0)
|
||||
pin = (int) (BootArgs.Flags >> 16);
|
||||
|
||||
if (ReadVolumeHeader (!hiddenVolume, header, password, pkcs5_prf, pin, FALSE, &Extension->Queue.CryptoInfo, Extension->HeaderCryptoInfo) == 0)
|
||||
{
|
||||
// Header decrypted
|
||||
status = STATUS_SUCCESS;
|
||||
@@ -775,6 +777,8 @@ void ReopenBootVolumeHeader (PIRP irp, PIO_STACK_LOCATION irpSp)
|
||||
|| request->VolumePassword.Length > MAX_PASSWORD
|
||||
|| request->pkcs5_prf < 0
|
||||
|| request->pkcs5_prf > LAST_PRF_ID
|
||||
|| request->pin < 0
|
||||
|| request->pin > 65535
|
||||
)
|
||||
{
|
||||
irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
|
||||
@@ -800,7 +804,7 @@ void ReopenBootVolumeHeader (PIRP irp, PIO_STACK_LOCATION irpSp)
|
||||
goto ret;
|
||||
}
|
||||
|
||||
if (ReadVolumeHeader (!BootDriveFilterExtension->HiddenSystem, header, &request->VolumePassword, request->pkcs5_prf, FALSE, NULL, BootDriveFilterExtension->HeaderCryptoInfo) == 0)
|
||||
if (ReadVolumeHeader (!BootDriveFilterExtension->HiddenSystem, header, &request->VolumePassword, request->pkcs5_prf, request->pin, FALSE, NULL, BootDriveFilterExtension->HeaderCryptoInfo) == 0)
|
||||
{
|
||||
Dump ("Header reopened\n");
|
||||
|
||||
|
||||
@@ -1403,6 +1403,7 @@ NTSTATUS ProcessMainDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION Ex
|
||||
|
||||
if (mount->VolumePassword.Length > MAX_PASSWORD || mount->ProtectedHidVolPassword.Length > MAX_PASSWORD
|
||||
|| mount->pkcs5_prf < 0 || mount->pkcs5_prf > LAST_PRF_ID
|
||||
|| mount->VolumePin < 0 || mount->VolumePin == INT_MAX
|
||||
|| mount->ProtectedHidVolPkcs5Prf < 0 || mount->ProtectedHidVolPkcs5Prf > LAST_PRF_ID
|
||||
|| (mount->bTrueCryptMode != FALSE && mount->bTrueCryptMode != TRUE)
|
||||
)
|
||||
@@ -1420,6 +1421,7 @@ NTSTATUS ProcessMainDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION Ex
|
||||
burn (&mount->VolumePassword, sizeof (mount->VolumePassword));
|
||||
burn (&mount->ProtectedHidVolPassword, sizeof (mount->ProtectedHidVolPassword));
|
||||
burn (&mount->pkcs5_prf, sizeof (mount->pkcs5_prf));
|
||||
burn (&mount->VolumePin, sizeof (mount->VolumePin));
|
||||
burn (&mount->bTrueCryptMode, sizeof (mount->bTrueCryptMode));
|
||||
burn (&mount->ProtectedHidVolPkcs5Prf, sizeof (mount->ProtectedHidVolPkcs5Prf));
|
||||
}
|
||||
|
||||
@@ -467,6 +467,7 @@ NTSTATUS TCOpenVolume (PDEVICE_OBJECT DeviceObject,
|
||||
readBuffer,
|
||||
&mount->ProtectedHidVolPassword,
|
||||
mount->ProtectedHidVolPkcs5Prf,
|
||||
mount->ProtectedHidVolPin,
|
||||
mount->bTrueCryptMode,
|
||||
&tmpCryptoInfo);
|
||||
}
|
||||
@@ -478,6 +479,7 @@ NTSTATUS TCOpenVolume (PDEVICE_OBJECT DeviceObject,
|
||||
readBuffer,
|
||||
&mount->VolumePassword,
|
||||
mount->pkcs5_prf,
|
||||
mount->VolumePin,
|
||||
mount->bTrueCryptMode,
|
||||
&Extension->cryptoInfo);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user