win7上RegOpenKeyEx返回ERROR_ACCESS_DENIED异常,XP上很正常,何解
win7下RegOpenKeyEx返回ERROR_ACCESS_DENIED错误,XP下很正常,何解?
在XP下打开了键然后就可以直接修改了,毫无问题,而WIN7下仅仅打开都打开不了,这是为什么?一样的代码,一字不改。
莫非是要权限?WIN7下就是用管理员运行都一样的结果,我也有在程序下加了下面的代码(因为我看见有一哥说他就是提权然后就可以了):
用来提权,似乎一样的结果,什么用都没有,到底是怎么回事的?
------解决方案--------------------
你告诉我你要打开的键是什么,windows7下有的键安全限制更高。
SE_DEBUG_NAME是用于绕过dacl打开进程的。
如果要绕过dacl打开键,启用SE_BACKUP_NAME和SE_RESTORE_NAME特权
然后使用RegCreateKeyEx打开键,dwOptions=REG_OPTION_BACKUP_RESTORE
------解决方案--------------------
是要替换系统服务吧?找个存在键值但实际并未安装的服务试试?
在XP下打开了键然后就可以直接修改了,毫无问题,而WIN7下仅仅打开都打开不了,这是为什么?一样的代码,一字不改。
莫非是要权限?WIN7下就是用管理员运行都一样的结果,我也有在程序下加了下面的代码(因为我看见有一哥说他就是提权然后就可以了):
- C/C++ code
BOOL raisePrivileges(HANDLE hProcess) { HANDLE hToken; TOKEN_PRIVILEGES tkp; tkp.PrivilegeCount=1; tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; if(OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken)) { if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid)) { AdjustTokenPrivileges(hToken,FALSE,&tkp,NULL,(PTOKEN_PRIVILEGES)NULL,0); } else return FALSE; } else return FALSE; return TRUE; }
用来提权,似乎一样的结果,什么用都没有,到底是怎么回事的?
------解决方案--------------------
你告诉我你要打开的键是什么,windows7下有的键安全限制更高。
SE_DEBUG_NAME是用于绕过dacl打开进程的。
如果要绕过dacl打开键,启用SE_BACKUP_NAME和SE_RESTORE_NAME特权
然后使用RegCreateKeyEx打开键,dwOptions=REG_OPTION_BACKUP_RESTORE
------解决方案--------------------
是要替换系统服务吧?找个存在键值但实际并未安装的服务试试?