阅读:1480回复:6
请教一个问题,关于读注册表的问题, 谢谢
我想读HKEY_CURRENT_USER\Software\EDSetting下面所有Item的name 和value,该用哪个函数??
RtlQueryRegistryValues 还是 ZwQueryKey? 哪位有例子代码可以看看吗?我用ZwQueryKey读,没成功。 |
|
|
沙发#
发布于:2007-05-21 15:40
关注中!!!
|
|
板凳#
发布于:2007-05-22 08:12
ZwEnumerateValueKey
|
|
|
地板#
发布于:2007-05-22 09:39
请问devia 版主,ZwEnumerateValueKey能读HKEY_CURRENT_USER下的值吗?我在osr上好像看到在驱动中不能读HKEY_CURRENT_USER下的值???
|
|
|
地下室#
发布于:2007-05-22 09:45
要模拟当前用户环境
|
|
|
5楼#
发布于:2007-05-22 10:27
HKCU于下面路径等价:
REGISTRY\MACHINE\USER\USER'S SID 所以你只要获取“USER'S SID”,然后在驱动直接打开即可。 |
|
|
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); |
|
|