linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
阅读:1480回复:6

请教一个问题,关于读注册表的问题, 谢谢

楼主#
更多 发布于:2007-05-21 15:23
我想读HKEY_CURRENT_USER\Software\EDSetting下面所有Item的name 和value,该用哪个函数??
RtlQueryRegistryValues 还是 ZwQueryKey?

哪位有例子代码可以看看吗?我用ZwQueryKey读,没成功。
在孤独和无助中缓慢前行...
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-21 15:40
关注中!!!
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
板凳#
发布于:2007-05-22 08:12
ZwEnumerateValueKey
人总在矛盾中徘徊。。。
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-05-22 09:39
请问devia 版主,ZwEnumerateValueKey能读HKEY_CURRENT_USER下的值吗?我在osr上好像看到在驱动中不能读HKEY_CURRENT_USER下的值???
在孤独和无助中缓慢前行...
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
地下室#
发布于:2007-05-22 09:45
要模拟当前用户环境
人总在矛盾中徘徊。。。
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
5楼#
发布于:2007-05-22 10:27
HKCU于下面路径等价:

REGISTRY\MACHINE\USER\USER'S SID

所以你只要获取“USER'S SID”,然后在驱动直接打开即可。
人总在矛盾中徘徊。。。
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
6楼#
发布于:2007-05-22 10:57
RING3层获取SID的方法如下:
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, 3072);
    if(!hProcess)
    {
        return 0;
    }
    
    HANDLE hToken;
    if( !OpenProcessToken(hProcess, TOKEN_QUERY, &hToken) ||
        !hToken )
    {
        CloseHandle(hProcess);
        return 0;
    }

    DWORD dwTemp = 0;
    char tagTokenInfoBuf[256] = {0};
    PTOKEN_USER tagTokenInfo = (PTOKEN_USER)tagTokenInfoBuf;
    if( !GetTokenInformation( hToken, TokenUser, tagTokenInfoBuf, sizeof(tagTokenInfoBuf), &dwTemp ) )
    {
        CloseHandle(hToken);
        CloseHandle(hProcess);
        return 0;
    }

    typedef BOOL (WINAPI* PtrConvertSidToStringSid)(
        PSID Sid,
        LPTSTR* StringSid
        );
    
    
    PtrConvertSidToStringSid dwPtr = (PtrConvertSidToStringSid)GetProcAddress(
        LoadLibrary("Advapi32.dll"), "ConvertSidToStringSidA" );

    LPTSTR MySid = NULL;
    dwPtr(
        tagTokenInfo->User.Sid, (LPTSTR*)&MySid
        );

    printf("%s\n", MySid);
    LocalFree( (HLOCAL)MySid );

    CloseHandle(hToken);
    CloseHandle(hProcess);
人总在矛盾中徘徊。。。
游客

返回顶部