首页 > 解决方案 > UNICODE_STRING 蓝屏死机 WDK

问题描述

到目前为止,我正在开发一个过滤器驱动程序,它有一个 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;

提取的密钥必须传递给RtlCompareUnicodeStringFsRtlIsNameInExpression但一段时间后,它会导致BSOD,仅在 Windows 7 上。有人可以帮我吗?

标签: c++wdk

解决方案


推荐阅读