首页
社区
课程
招聘
[求助]这个问题想到的!..高手看看呢?
发表于: 2009-8-10 10:36 4494

[求助]这个问题想到的!..高手看看呢?

2009-8-10 10:36
4494
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 替换了 此处是否可以替换?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
又是buffer问题~ 拜托能不能学点基础再来搞SSDT HOOK?我都懒得回答了,查查老帖子吧
2009-8-10 11:37
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是溢出问题:
我的意思是 Length 在外面已经固定!..在hook函数里面怎么进行更改呢!... 试了一下!只要变了length,程序就死!
2009-8-10 12:16
0
雪    币: 146
活跃值: (33)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
你增加了length,buffer长度却没变,肯定挂啊
2009-8-10 14:06
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼上说的buffer 是指那个buffer?
在还没有返回到真是函数之前,buffer 分配也不在我这边分配的啊!
2009-8-10 14:24
0
雪    币: 146
活跃值: (33)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
buffer是由调用者提供吧,既然你增加了length就要想办法增加buffer,再说了用户调用这个服务时本来是提供的length长度,却得到了length+N的数据,这样也有点。。。
2009-8-10 14:28
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我的意思有什么办法增加buffer? 重新分配?...
2009-8-10 14:42
0
游客
登录 | 注册 方可回帖
返回
//