diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2024-11-17 21:37:16 +0100 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2024-11-17 21:37:16 +0100 |
commit | 93868acfdd9ca721ddf32a92d8dec8d0fff1d7d8 (patch) | |
tree | f36c426867bf1c29f25a472522d72bec0f2103ba | |
parent | 42fdbcf3ce37c33f777773a49d02dac6258c8dac (diff) | |
download | VeraCrypt-93868acfdd9ca721ddf32a92d8dec8d0fff1d7d8.tar.gz VeraCrypt-93868acfdd9ca721ddf32a92d8dec8d0fff1d7d8.zip |
Windows Driver: Use system functions directly instead of dynamic loading since we are targeting Windows 10
-rw-r--r-- | src/Common/Pkcs5.c | 24 | ||||
-rw-r--r-- | src/Common/Tcdefs.h | 47 | ||||
-rw-r--r-- | src/Crypto/Camellia.c | 8 | ||||
-rw-r--r-- | src/Driver/DriveFilter.c | 5 | ||||
-rw-r--r-- | src/Driver/Ntdriver.c | 190 | ||||
-rw-r--r-- | src/Driver/Ntvol.c | 2 |
6 files changed, 53 insertions, 223 deletions
diff --git a/src/Common/Pkcs5.c b/src/Common/Pkcs5.c index 6cffddf2..6d8ce08a 100644 --- a/src/Common/Pkcs5.c +++ b/src/Common/Pkcs5.c @@ -90,9 +90,9 @@ void hmac_sha256 #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; XSTATE_SAVE SaveState; if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState); + saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); #endif /* If the key is longer than the hash algorithm block size, let key = sha256(key), as per HMAC specifications. */ if (lk > SHA256_BLOCKSIZE) @@ -135,9 +135,9 @@ void hmac_sha256 hmac_sha256_internal(d, ld, &hmac); #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) if (NT_SUCCESS (saveStatus)) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); #endif /* Prevent leaks */ burn(&hmac, sizeof(hmac)); @@ -207,9 +207,9 @@ void derive_key_sha256 (const unsigned char *pwd, int pwd_len, const unsigned ch #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; XSTATE_SAVE SaveState; if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState); + saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); #endif /* If the password is longer than the hash algorithm block size, let pwd = sha256(pwd), as per HMAC specifications. */ if (pwd_len > SHA256_BLOCKSIZE) @@ -274,9 +274,9 @@ void derive_key_sha256 (const unsigned char *pwd, int pwd_len, const unsigned ch memcpy (dk, hmac.u, r); #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) if (NT_SUCCESS (saveStatus)) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); #endif /* Prevent possible leaks. */ burn (&hmac, sizeof(hmac)); @@ -340,9 +340,9 @@ void hmac_sha512 #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; XSTATE_SAVE SaveState; if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState); + saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); #endif /* If the key is longer than the hash algorithm block size, let key = sha512(key), as per HMAC specifications. */ @@ -386,9 +386,9 @@ void hmac_sha512 hmac_sha512_internal (d, ld, &hmac); #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) if (NT_SUCCESS (saveStatus)) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); #endif /* Prevent leaks */ burn (&hmac, sizeof(hmac)); @@ -432,9 +432,9 @@ void derive_key_sha512 (const unsigned char *pwd, int pwd_len, const unsigned ch #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; XSTATE_SAVE SaveState; if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState); + saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); #endif /* If the password is longer than the hash algorithm block size, let pwd = sha512(pwd), as per HMAC specifications. */ @@ -499,9 +499,9 @@ void derive_key_sha512 (const unsigned char *pwd, int pwd_len, const unsigned ch memcpy (dk, hmac.u, r); #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) if (NT_SUCCESS (saveStatus)) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); #endif /* Prevent possible leaks. */ burn (&hmac, sizeof(hmac)); @@ -564,9 +564,9 @@ void hmac_blake2s #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; XSTATE_SAVE SaveState; if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState); + saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); #endif /* If the key is longer than the hash algorithm block size, let key = blake2s(key), as per HMAC specifications. */ if (lk > BLAKE2S_BLOCKSIZE) @@ -609,9 +609,9 @@ void hmac_blake2s hmac_blake2s_internal(d, ld, &hmac); #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) if (NT_SUCCESS (saveStatus)) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); #endif /* Prevent leaks */ burn(&hmac, sizeof(hmac)); @@ -681,9 +681,9 @@ void derive_key_blake2s (const unsigned char *pwd, int pwd_len, const unsigned c #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; XSTATE_SAVE SaveState; if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState); + saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); #endif /* If the password is longer than the hash algorithm block size, let pwd = blake2s(pwd), as per HMAC specifications. */ if (pwd_len > BLAKE2S_BLOCKSIZE) @@ -748,9 +748,9 @@ void derive_key_blake2s (const unsigned char *pwd, int pwd_len, const unsigned c memcpy (dk, hmac.u, r); #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) if (NT_SUCCESS (saveStatus)) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); #endif /* Prevent possible leaks. */ burn (&hmac, sizeof(hmac)); diff --git a/src/Common/Tcdefs.h b/src/Common/Tcdefs.h index e7eee177..0dd7fe40 100644 --- a/src/Common/Tcdefs.h +++ b/src/Common/Tcdefs.h @@ -285,55 +285,8 @@ typedef unsigned char BOOLEAN; #ifndef FALSE #define FALSE !TRUE #endif -typedef NTSTATUS (NTAPI *KeSaveExtendedProcessorStateFn) ( - __in ULONG64 Mask, - PXSTATE_SAVE XStateSave - ); - - -typedef VOID (NTAPI *KeRestoreExtendedProcessorStateFn) ( - PXSTATE_SAVE XStateSave - ); - -typedef NTSTATUS (NTAPI *ExGetFirmwareEnvironmentVariableFn) ( - PUNICODE_STRING VariableName, - LPGUID VendorGuid, - PVOID Value, - PULONG ValueLength, - PULONG Attributes -); - -typedef ULONG64 (NTAPI *KeQueryInterruptTimePreciseFn)( - PULONG64 QpcTimeStamp -); - -typedef BOOLEAN (NTAPI *KeAreAllApcsDisabledFn) (); - -typedef void (NTAPI *KeSetSystemGroupAffinityThreadFn)( - PGROUP_AFFINITY Affinity, - PGROUP_AFFINITY PreviousAffinity -); - -typedef USHORT (NTAPI *KeQueryActiveGroupCountFn)(); - -typedef ULONG (NTAPI *KeQueryActiveProcessorCountExFn)( - USHORT GroupNumber -); - -extern NTSTATUS NTAPI KeSaveExtendedProcessorStateVC ( - __in ULONG64 Mask, - PXSTATE_SAVE XStateSave - ); - - -extern VOID NTAPI KeRestoreExtendedProcessorStateVC ( - PXSTATE_SAVE XStateSave - ); - -extern BOOLEAN VC_KeAreAllApcsDisabled (VOID); - #else /* !TC_WINDOWS_DRIVER */ #if !defined(_UEFI) #define TCalloc malloc diff --git a/src/Crypto/Camellia.c b/src/Crypto/Camellia.c index 675fc0bd..3fd49023 100644 --- a/src/Crypto/Camellia.c +++ b/src/Crypto/Camellia.c @@ -1099,9 +1099,9 @@ void camellia_encrypt_blocks(unsigned __int8 *instance, const uint8* in_blk, uin if ((blockCount >= 16) && IsCpuIntel() && IsAesHwCpuSupported () && HasSAVX()) /* on AMD cpu, AVX is too slow */ { #if defined (TC_WINDOWS_DRIVER) XSTATE_SAVE SaveState; - if (NT_SUCCESS (KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState))) + if (NT_SUCCESS (KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState))) { #endif while (blockCount >= 16) { @@ -1110,9 +1110,9 @@ void camellia_encrypt_blocks(unsigned __int8 *instance, const uint8* in_blk, uin in_blk += 16 * 16; blockCount -= 16; } #if defined (TC_WINDOWS_DRIVER) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); } #endif } #endif @@ -1135,9 +1135,9 @@ void camellia_decrypt_blocks(unsigned __int8 *instance, const uint8* in_blk, uin if ((blockCount >= 16) && IsCpuIntel() && IsAesHwCpuSupported () && HasSAVX()) /* on AMD cpu, AVX is too slow */ { #if defined (TC_WINDOWS_DRIVER) XSTATE_SAVE SaveState; - if (NT_SUCCESS (KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState))) + if (NT_SUCCESS (KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState))) { #endif while (blockCount >= 16) { @@ -1146,9 +1146,9 @@ void camellia_decrypt_blocks(unsigned __int8 *instance, const uint8* in_blk, uin in_blk += 16 * 16; blockCount -= 16; } #if defined (TC_WINDOWS_DRIVER) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); } #endif } #endif diff --git a/src/Driver/DriveFilter.c b/src/Driver/DriveFilter.c index 7503a8ee..a280d20e 100644 --- a/src/Driver/DriveFilter.c +++ b/src/Driver/DriveFilter.c @@ -362,9 +362,9 @@ static void ComputeBootLoaderFingerprint(PDEVICE_OBJECT LowerDeviceObject, uint8 #ifndef _M_ARM64 NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; XSTATE_SAVE SaveState; if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorStateVC(XSTATE_MASK_GSSE, &SaveState); + saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); #endif WHIRLPOOL_add (ioBuffer, TC_BOOT_SECTOR_PIM_VALUE_OFFSET, &whirlpool); WHIRLPOOL_add (ioBuffer + TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH, (TC_BOOT_SECTOR_USER_CONFIG_OFFSET - (TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH)), &whirlpool); @@ -400,9 +400,9 @@ static void ComputeBootLoaderFingerprint(PDEVICE_OBJECT LowerDeviceObject, uint8 } #ifndef _M_ARM64 if (NT_SUCCESS(saveStatus)) - KeRestoreExtendedProcessorStateVC(&SaveState); + KeRestoreExtendedProcessorState(&SaveState); #endif } else { @@ -977,9 +977,8 @@ static NTSTATUS DispatchPower (PDEVICE_OBJECT DeviceObject, PIRP Irp, DriveFilte // Dismount the system drive on shutdown on Windows 7 and later if (DriverShuttingDown && EraseKeysOnShutdown - && IsOSAtLeast (WIN_7) && Extension->BootDrive && Extension->DriveMounted && irpSp->MinorFunction == IRP_MN_SET_POWER && irpSp->Parameters.Power.Type == DevicePowerState) diff --git a/src/Driver/Ntdriver.c b/src/Driver/Ntdriver.c index e6b7af1f..ac2fb00a 100644 --- a/src/Driver/Ntdriver.c +++ b/src/Driver/Ntdriver.c @@ -141,16 +141,8 @@ static BOOL SystemFavoriteVolumeDirty = FALSE; static BOOL PagingFileCreationPrevented = FALSE; static BOOL EnableExtendedIoctlSupport = FALSE; static BOOL AllowTrimCommand = FALSE; static BOOL RamEncryptionActivated = FALSE; -static KeSaveExtendedProcessorStateFn KeSaveExtendedProcessorStatePtr = NULL; -static KeRestoreExtendedProcessorStateFn KeRestoreExtendedProcessorStatePtr = NULL; -static ExGetFirmwareEnvironmentVariableFn ExGetFirmwareEnvironmentVariablePtr = NULL; -static KeQueryInterruptTimePreciseFn KeQueryInterruptTimePrecisePtr = NULL; -static KeAreAllApcsDisabledFn KeAreAllApcsDisabledPtr = NULL; -static KeSetSystemGroupAffinityThreadFn KeSetSystemGroupAffinityThreadPtr = NULL; -static KeQueryActiveGroupCountFn KeQueryActiveGroupCountPtr = NULL; -static KeQueryActiveProcessorCountExFn KeQueryActiveProcessorCountExPtr = NULL; int EncryptionIoRequestCount = 0; int EncryptionItemCount = 0; int EncryptionFragmentSize = 0; @@ -186,24 +178,17 @@ BOOL IsUefiBoot () Dump ("IsUefiBoot BEGIN\n"); ASSERT (KeGetCurrentIrql() == PASSIVE_LEVEL); - if (ExGetFirmwareEnvironmentVariablePtr) - { - ULONG valueLengh = 0; - UNICODE_STRING emptyName; - GUID guid; - RtlInitUnicodeString(&emptyName, L""); - memset (&guid, 0, sizeof(guid)); - Dump ("IsUefiBoot calling ExGetFirmwareEnvironmentVariable\n"); - ntStatus = ExGetFirmwareEnvironmentVariablePtr (&emptyName, &guid, NULL, &valueLengh, NULL); - Dump ("IsUefiBoot ExGetFirmwareEnvironmentVariable returned 0x%08x\n", ntStatus); - } - else - { - Dump ("IsUefiBoot ExGetFirmwareEnvironmentVariable not found on the system\n"); - } - + ULONG valueLengh = 0; + UNICODE_STRING emptyName; + GUID guid; + RtlInitUnicodeString(&emptyName, L""); + memset (&guid, 0, sizeof(guid)); + Dump ("IsUefiBoot calling ExGetFirmwareEnvironmentVariable\n"); + ntStatus = ExGetFirmwareEnvironmentVariable (&emptyName, &guid, NULL, &valueLengh, NULL); + Dump ("IsUefiBoot ExGetFirmwareEnvironmentVariable returned 0x%08x\n", ntStatus); + if (STATUS_NOT_IMPLEMENTED != ntStatus) bStatus = TRUE; Dump ("IsUefiBoot bStatus = %s END\n", bStatus? "TRUE" : "FALSE"); @@ -228,19 +213,12 @@ void GetDriverRandomSeed (unsigned char* pbRandSeed, size_t cbRandSeed) WHIRLPOOL_add ((unsigned char *) &(iSeed.QuadPart), sizeof(iSeed.QuadPart), &tctx); iSeed = KeQueryPerformanceCounter (&iSeed2); WHIRLPOOL_add ((unsigned char *) &(iSeed.QuadPart), sizeof(iSeed.QuadPart), &tctx); WHIRLPOOL_add ((unsigned char *) &(iSeed2.QuadPart), sizeof(iSeed2.QuadPart), &tctx); - if (KeQueryInterruptTimePrecisePtr) - { - iSeed.QuadPart = KeQueryInterruptTimePrecisePtr ((PULONG64) & iSeed2.QuadPart); - WHIRLPOOL_add ((unsigned char *) &(iSeed.QuadPart), sizeof(iSeed.QuadPart), &tctx); - WHIRLPOOL_add ((unsigned char *) &(iSeed2.QuadPart), sizeof(iSeed2.QuadPart), &tctx); - } - else - { - iSeed.QuadPart = KeQueryInterruptTime (); - WHIRLPOOL_add ((unsigned char *) &(iSeed.QuadPart), sizeof(iSeed.QuadPart), &tctx); - } + + iSeed.QuadPart = KeQueryInterruptTimePrecise ((PULONG64) & iSeed2.QuadPart); + WHIRLPOOL_add ((unsigned char *) &(iSeed.QuadPart), sizeof(iSeed.QuadPart), &tctx); + WHIRLPOOL_add ((unsigned char *) &(iSeed2.QuadPart), sizeof(iSeed2.QuadPart), &tctx); /* use JitterEntropy library to get good quality random bytes based on CPU timing jitter */ if (0 == jent_entropy_init ()) { @@ -292,50 +270,8 @@ NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) PsGetVersion(&OsMajorVersion, &OsMinorVersion, NULL, NULL); Dump("OsMajorVersion=%d OsMinorVersion=%d\n", OsMajorVersion, OsMinorVersion); - // KeAreAllApcsDisabled is available starting from Windows Server 2003 - if ((OsMajorVersion > 5) || (OsMajorVersion == 5 && OsMinorVersion >= 2)) - { - UNICODE_STRING KeAreAllApcsDisabledFuncName; - RtlInitUnicodeString(&KeAreAllApcsDisabledFuncName, L"KeAreAllApcsDisabled"); - - KeAreAllApcsDisabledPtr = (KeAreAllApcsDisabledFn)MmGetSystemRoutineAddress(&KeAreAllApcsDisabledFuncName); - } - - // KeSaveExtendedProcessorState/KeRestoreExtendedProcessorState are available starting from Windows 7 - // KeQueryActiveGroupCount/KeQueryActiveProcessorCountEx/KeSetSystemGroupAffinityThread are available starting from Windows 7 - if ((OsMajorVersion > 6) || (OsMajorVersion == 6 && OsMinorVersion >= 1)) - { - UNICODE_STRING saveFuncName, restoreFuncName, groupCountFuncName, procCountFuncName, setAffinityFuncName; - RtlInitUnicodeString(&saveFuncName, L"KeSaveExtendedProcessorState"); - RtlInitUnicodeString(&restoreFuncName, L"KeRestoreExtendedProcessorState"); - RtlInitUnicodeString(&groupCountFuncName, L"KeQueryActiveGroupCount"); - RtlInitUnicodeString(&procCountFuncName, L"KeQueryActiveProcessorCountEx"); - RtlInitUnicodeString(&setAffinityFuncName, L"KeSetSystemGroupAffinityThread"); - KeSaveExtendedProcessorStatePtr = (KeSaveExtendedProcessorStateFn)MmGetSystemRoutineAddress(&saveFuncName); - KeRestoreExtendedProcessorStatePtr = (KeRestoreExtendedProcessorStateFn)MmGetSystemRoutineAddress(&restoreFuncName); - KeSetSystemGroupAffinityThreadPtr = (KeSetSystemGroupAffinityThreadFn)MmGetSystemRoutineAddress(&setAffinityFuncName); - KeQueryActiveGroupCountPtr = (KeQueryActiveGroupCountFn)MmGetSystemRoutineAddress(&groupCountFuncName); - KeQueryActiveProcessorCountExPtr = (KeQueryActiveProcessorCountExFn)MmGetSystemRoutineAddress(&procCountFuncName); - } - - // ExGetFirmwareEnvironmentVariable is available starting from Windows 8 - if ((OsMajorVersion > 6) || (OsMajorVersion == 6 && OsMinorVersion >= 2)) - { - UNICODE_STRING funcName; - RtlInitUnicodeString(&funcName, L"ExGetFirmwareEnvironmentVariable"); - ExGetFirmwareEnvironmentVariablePtr = (ExGetFirmwareEnvironmentVariableFn)MmGetSystemRoutineAddress(&funcName); - } - - // KeQueryInterruptTimePrecise is available starting from Windows 8.1 - if ((OsMajorVersion > 6) || (OsMajorVersion == 6 && OsMinorVersion >= 3)) - { - UNICODE_STRING funcName; - RtlInitUnicodeString(&funcName, L"KeQueryInterruptTimePrecise"); - KeQueryInterruptTimePrecisePtr = (KeQueryInterruptTimePreciseFn)MmGetSystemRoutineAddress(&funcName); - } - // Load dump filter if the main driver is already loaded if (NT_SUCCESS(TCDeviceIoControl(NT_ROOT_PREFIX, TC_IOCTL_GET_DRIVER_VERSION, NULL, 0, &version, sizeof(version)))) return DumpFilterEntry((PFILTER_EXTENSION)DriverObject, (PFILTER_INITIALIZATION_DATA)RegistryPath); @@ -993,9 +929,9 @@ NTSTATUS ProcessVolumeDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION case IOCTL_DISK_GET_DRIVE_GEOMETRY_EX: Dump ("ProcessVolumeDeviceControlIrp (IOCTL_DISK_GET_DRIVE_GEOMETRY_EX)\n"); { - ULONG minOutputSize = IsOSAtLeast (WIN_SERVER_2003)? sizeof (DISK_GEOMETRY_EX) : sizeof (DISK_GEOMETRY) + sizeof (LARGE_INTEGER); + ULONG minOutputSize = sizeof (DISK_GEOMETRY_EX); ULONG fullOutputSize = sizeof (DISK_GEOMETRY) + sizeof (LARGE_INTEGER) + sizeof (DISK_PARTITION_INFO) + sizeof (DISK_DETECTION_INFO); if (ValidateIOBufferSize (Irp, minOutputSize, ValidateOutput)) { @@ -3462,9 +3398,9 @@ NTSTATUS TCDeviceIoControl (PWSTR deviceName, ULONG IoControlCode, void *InputBu PDEVICE_OBJECT deviceObject; KEVENT event; UNICODE_STRING name; - if ((KeGetCurrentIrql() >= APC_LEVEL) || VC_KeAreAllApcsDisabled()) + if ((KeGetCurrentIrql() >= APC_LEVEL) || KeAreAllApcsDisabled()) { TCDeviceIoControlWorkItemArgs args; PIO_WORKITEM workItem = IoAllocateWorkItem (RootDeviceObject); @@ -3547,9 +3483,9 @@ NTSTATUS SendDeviceIoControlRequest (PDEVICE_OBJECT deviceObject, ULONG ioContro NTSTATUS status; PIRP irp; KEVENT event; - if ((KeGetCurrentIrql() >= APC_LEVEL) || VC_KeAreAllApcsDisabled()) + if ((KeGetCurrentIrql() >= APC_LEVEL) || KeAreAllApcsDisabled()) { SendDeviceIoControlRequestWorkItemArgs args; PIO_WORKITEM workItem = IoAllocateWorkItem (RootDeviceObject); @@ -3892,9 +3828,9 @@ static NTSTATUS UpdateFsVolumeInformation (MOUNT_STRUCT* mount, PEXTENSION NewEx ULONG labelLen = (ULONG) wcslen (mount->wszLabel); BOOL bIsNTFS = FALSE; ULONG labelMaxLen, labelEffectiveLen; - if ((KeGetCurrentIrql() >= APC_LEVEL) || VC_KeAreAllApcsDisabled()) + if ((KeGetCurrentIrql() >= APC_LEVEL) || KeAreAllApcsDisabled()) { UpdateFsVolumeInformationWorkItemArgs args; PIO_WORKITEM workItem = IoAllocateWorkItem (RootDeviceObject); @@ -4159,9 +4095,9 @@ NTSTATUS UnmountDevice (UNMOUNT_STRUCT *unmountRequest, PDEVICE_OBJECT deviceObj NTSTATUS ntStatus; HANDLE volumeHandle; PFILE_OBJECT volumeFileObject; - if ((KeGetCurrentIrql() >= APC_LEVEL) || VC_KeAreAllApcsDisabled()) + if ((KeGetCurrentIrql() >= APC_LEVEL) || KeAreAllApcsDisabled()) { UnmountDeviceWorkItemArgs args; PIO_WORKITEM workItem = IoAllocateWorkItem (RootDeviceObject); @@ -4189,9 +4125,9 @@ NTSTATUS UnmountDevice (UNMOUNT_STRUCT *unmountRequest, PDEVICE_OBJECT deviceObj { int dismountRetry; // Dismounting a writable NTFS filesystem prevents the driver from being unloaded on Windows 7 - if (IsOSAtLeast (WIN_7) && !extension->bReadOnly) + if (!extension->bReadOnly) { NTFS_VOLUME_DATA_BUFFER ntfsData; if (NT_SUCCESS (TCFsctlCall (volumeFileObject, FSCTL_GET_NTFS_VOLUME_DATA, NULL, 0, &ntfsData, sizeof (ntfsData)))) @@ -4453,35 +4389,16 @@ NTSTATUS TCCompleteDiskIrp (PIRP irp, NTSTATUS status, ULONG_PTR information) size_t GetCpuCount (WORD* pGroupCount) { size_t cpuCount = 0; - if (KeQueryActiveGroupCountPtr && KeQueryActiveProcessorCountExPtr) + USHORT i, groupCount = KeQueryActiveGroupCount (); + for (i = 0; i < groupCount; i++) { - USHORT i, groupCount = KeQueryActiveGroupCountPtr (); - for (i = 0; i < groupCount; i++) - { - cpuCount += (size_t) KeQueryActiveProcessorCountExPtr (i); - } - - if (pGroupCount) - *pGroupCount = groupCount; + cpuCount += (size_t) KeQueryActiveProcessorCountEx (i); } - else - { - KAFFINITY activeCpuMap = KeQueryActiveProcessors(); - size_t mapSize = sizeof (activeCpuMap) * 8; - - while (mapSize--) - { - if (activeCpuMap & 1) - ++cpuCount; - activeCpuMap >>= 1; - } - - if (pGroupCount) - *pGroupCount = 1; - } + if (pGroupCount) + *pGroupCount = groupCount; if (cpuCount == 0) return 1; @@ -4489,34 +4406,28 @@ size_t GetCpuCount (WORD* pGroupCount) } USHORT GetCpuGroup (size_t index) { - if (KeQueryActiveGroupCountPtr && KeQueryActiveProcessorCountExPtr) + USHORT i, groupCount = KeQueryActiveGroupCount (); + size_t cpuCount = 0; + for (i = 0; i < groupCount; i++) { - USHORT i, groupCount = KeQueryActiveGroupCountPtr (); - size_t cpuCount = 0; - for (i = 0; i < groupCount; i++) + cpuCount += (size_t) KeQueryActiveProcessorCountEx (i); + if (cpuCount >= index) { - cpuCount += (size_t) KeQueryActiveProcessorCountExPtr (i); - if (cpuCount >= index) - { - return i; - } + return i; } } return 0; } void SetThreadCpuGroupAffinity (USHORT index) { - if (KeSetSystemGroupAffinityThreadPtr) - { - GROUP_AFFINITY groupAffinity = {0}; - groupAffinity.Mask = ~0ULL; - groupAffinity.Group = index; - KeSetSystemGroupAffinityThreadPtr (&groupAffinity, NULL); - } + GROUP_AFFINITY groupAffinity = {0}; + groupAffinity.Mask = ~0ULL; + groupAffinity.Group = index; + KeSetSystemGroupAffinityThread (&groupAffinity, NULL); } void EnsureNullTerminatedString (wchar_t *str, size_t maxSizeInBytes) { @@ -4957,37 +4868,4 @@ BOOL IsOSAtLeast (OSVersionEnum reqMinOS) return ((OsMajorVersion << 16 | OsMinorVersion << 8) >= (major << 16 | minor << 8)); } - -NTSTATUS NTAPI KeSaveExtendedProcessorStateVC ( - __in ULONG64 Mask, - PXSTATE_SAVE XStateSave - ) -{ - if (KeSaveExtendedProcessorStatePtr) - { - return (KeSaveExtendedProcessorStatePtr) (Mask, XStateSave); - } - else - { - return STATUS_SUCCESS; - } -} - -VOID NTAPI KeRestoreExtendedProcessorStateVC ( - PXSTATE_SAVE XStateSave - ) -{ - if (KeRestoreExtendedProcessorStatePtr) - { - (KeRestoreExtendedProcessorStatePtr) (XStateSave); - } -} - -BOOLEAN VC_KeAreAllApcsDisabled (VOID) -{ - if (KeAreAllApcsDisabledPtr) - return (KeAreAllApcsDisabledPtr) (); - else - return FALSE; -} diff --git a/src/Driver/Ntvol.c b/src/Driver/Ntvol.c index 7bd59831..0376033f 100644 --- a/src/Driver/Ntvol.c +++ b/src/Driver/Ntvol.c @@ -946,9 +946,9 @@ NTSTATUS TCSendHostDeviceIoControlRequestEx (PDEVICE_OBJECT DeviceObject, PIRP Irp; UNREFERENCED_PARAMETER(DeviceObject); /* Remove compiler warning */ - if ((KeGetCurrentIrql() >= APC_LEVEL) || VC_KeAreAllApcsDisabled()) + if ((KeGetCurrentIrql() >= APC_LEVEL) || KeAreAllApcsDisabled()) { TCSendHostDeviceIoControlRequestExWorkItemArgs args; PIO_WORKITEM workItem = IoAllocateWorkItem (RootDeviceObject); |