首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

win7上RegOpenKeyEx返回ERROR_ACCESS_DENIED异常,XP上很正常,何解

2012-09-12 
win7下RegOpenKeyEx返回ERROR_ACCESS_DENIED错误,XP下很正常,何解?在XP下打开了键然后就可以直接修改了,毫

win7下RegOpenKeyEx返回ERROR_ACCESS_DENIED错误,XP下很正常,何解?
在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
[解决办法]
是要替换系统服务吧?找个存在键值但实际并未安装的服务试试?

热点排行