My_ZwQueryValueKey函数是我hook以后的函数,Old_ZwQueryValueKey是系统的函数。我的目的很简单,就是当系统查询aaa的值的时候,我让系统查询Myaaa的值,然后返回。
但是status = Old_ZwQueryValueKey(KeyHandle, &TempUnicodeString, KeyValueInformationClass, KeyValueInformation, Length, ResultLength);
这个status 的值老是返回c0000005,STATUS_ACCESS_VIOLATION。不知道什么原因,以下是我的代码,大侠能帮我看看么?谢谢了!!!
NTSTATUS My_ZwQueryValueKey(IN HANDLE KeyHandle,
IN PUNICODE_STRING ValueName,
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
OUT PVOID KeyValueInformation,
IN ULONG Length,
OUT PULONG ResultLength)
{
WCHAR TempValue[16];
UNICODE_STRING TempUnicodeString = UNICODE_STRING_CONST(L"Myaaa");
MY_REG_VALUE MyValue;
NTSTATUS status;
if(ValueName->Length != 6)
{
status = Old_ZwQueryValueKey(KeyHandle, ValueName, KeyValueInformationClass, KeyValueInformation, Length, ResultLength);
return status;
}
RtlZeroMemory((void*)TempValue, sizeof(TempValue));
RtlCopyMemory((void*)TempValue, ValueName->Buffer, ValueName->Length);
if(_wcsnicmp((const wchar_t*)TempValue, L"aaa", 3) != 0)
{
status = Old_ZwQueryValueKey(KeyHandle, ValueName, KeyValueInformationClass, KeyValueInformation, Length, ResultLength);
return status;
}
else
{
status = Old_ZwQueryValueKey(KeyHandle, &TempUnicodeString, KeyValueInformationClass, KeyValueInformation, Length, ResultLength);
return status;
}
}
此贴是本论坛上面前面解决过的!从上面看,应该是在相同主键值下新建了一个值上面的才可以正确读取,
如果读取后的值 超出了 length 和 resultlength的长度的话 ,怎么处理好呢?
甚至将新打开一个键值 ,将 KeyHandle 替换了 此处是否可以替换?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!