На данный момент я работаю над драйвером фильтра, и он имеет UNICODE_STRING, выделенный как:
const SIZE_T buffSize = sizeof(UNICODE_STRING) + NTSTRSAFE_UNICODE_STRING_MAX_CCH * sizeof(wchar_t);
PUNICODE_STRING extracted_key = (PUNICODE_STRING)MmAllocateNonCachedMemory(buffSize);
extracted_key->Length = 0;
extracted_key->MaximumLength = NTSTRSAFE_UNICODE_STRING_MAX_CCH * sizeof(wchar_t);
extracted_key->Buffer = (PWCH)((PCCH)extracted_key + sizeof(UNICODE_STRING));
Имеет значение ключа реестра, используемого программой, например,
\REGISTRY\A\{0585F053-FB9C-4EAE-BF42-F1FFB9A13ACE}\ActivatableClassId\CortanaUI.AppX4bsqm82t4x1h6fxzn912f92v3hcmq9bb.mca
Я хотел удалить префикс ключа, равный \REGISTRY\A\
, вычисление его длины было сделано, и я удалил его, используя
extracted_key->Length -= (USHORT)length * sizeof(WCHAR);
extracted_key->MaximumLength -= (USHORT)length * sizeof(WCHAR);
extracted_key->Buffer += length;
Извлеченный ключ должен быть передан RtlCompareUnicodeString
и FsRtlIsNameInExpression
, но через некоторое время он приводит к BSOD , только в Windows 7. Может кто-нибудь помочь мне с этим?