阅读:1721回复:6
郁闷啊!怎么调用NtCreateKey老是失败(普通Win32应用)。
功能:打开HKLM\\Software,然后在下面建立子键11111222。
第二步操作失败:提示“内存分配访问无效”。 把代码看了又看,还是看不出什么问题。:( HINSTANCE hInst; hInst = GetModuleHandle(\"NtDll.Dll\"); NtCreateKey = (NTCREATEKEY)GetProcAddress(hInst, \"NtCreateKey\"); NtDeleteKey = (NTDELETEKEY)GetProcAddress(hInst,\"NtDeleteKey\"); /////// DWORD dwRet; HANDLE hSysKey; UNICODE_STRING SysKeyName; OBJECT_ATTRIBUTES KeyObj; ULONG Disposition; UNICODE_STRING SubKeyName; HANDLE hSubKey; OBJECT_ATTRIBUTES SubKeyObj; // RtlInitUnicodeString(&SysKeyName,L\"\\\\Registry\\\\Machine\\\\Software\"); InitializeObjectAttributes(&KeyObj,&SysKeyName,OBJ_CASE_INSENSITIVE,NULL,NULL); dwRet = NtCreateKey(&hSysKey,KEY_ALL_ACCESS,&KeyObj,0,NULL,REG_OPTION_NON_VOLATILE,&Disposition); if(dwRet != 0) { MessageBox(NULL,AnsiString(\"Err1 = \" + NtErrorMessage(dwRet)).c_str(),NULL,MB_OK | MB_APPLMODAL | MB_ICONWARNING); return; } RtlInitUnicodeString(&SubKeyName,L\"111122222\"); InitializeObjectAttributes(&SubKeyObj,&SubKeyName,OBJ_CASE_INSENSITIVE,hSysKey,NULL); //操作失败:提示“内存分配访问无效”。 dwRet = NtCreateKey(&hSubKey,KEY_ALL_ACCESS,&SubKeyObj,0,NULL,REG_OPTION_NON_VOLATILE,&Disposition); if(dwRet != 0) { MessageBox(NULL,AnsiString(\"Err2 = \" + NtErrorMessage(dwRet)).c_str(),NULL,MB_OK | MB_APPLMODAL | MB_ICONWARNING); return; } |
|
沙发#
发布于:2002-11-24 17:29
这是普通win32的代码?
|
|
板凳#
发布于:2002-11-25 10:16
用ZwCreateKey试试
|
|
|
地板#
发布于:2002-11-25 10:34
用ZwCreateKey试试
================= 一样的结果!:( 顺便说一下,我是根据www.sysinternals.com上面的一个例子写的,那个例子没有问题(我是说那个Exe程序),但是把里边的代码拷贝到我的程序中就有问题!不可思议! ================================================== 这是普通win32的代码? =========== 我是在Win32中编写这段代码的,难道不是Win32应用? |
|
地下室#
发布于:2002-11-25 10:50
请问是哪个例子,我也去看看。
|
|
|
5楼#
发布于:2002-11-25 11:00
http://www.sysinternals.com/ntw2k/info/tips.shtml
“Hidden Registry Keys?”,这个就是。 |
|
6楼#
发布于:2002-11-25 18:36
这是普通win32的代码? 不太普通的。 :D |
|