到目前为止,我正在使用过滤器驱动程序,它具有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;
extracted_key必须传递到RtlCompareUnicodeString
和FsRtlIsNameInExpression
,但是一段时间后,它会导致BSOD,仅在Windows 7上。有人可以帮助我吗?