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

急修改注册表权限有关问题

2013-08-11 
急求助!!修改注册表权限问题本帖最后由 wasedasai 于 2011-08-19 08:37:23 编辑OS:Windows7编程环境:MFC要

急求助!!修改注册表权限问题
本帖最后由 wasedasai 于 2011-08-19 08:37:23 编辑 OS:Windows7
编程环境:MFC

要修改注册表权限,以便删除注册表。
1.用了下面的代码,但是在SetNamedSecurityInfo处没有成功,弹出对话框"3".
但是用CString er;
 er.Format("%d",ERROR_SUCCESS);
 AfxMessageBox(er);
获取的值是0,用%s的话是null。
目标:也就是说,现在,只有Everyone下的读取选框是被选中的,怎样才能让full control选框也被选中啊。这样才能更改注册表是吧?
2.都需要什么头文件之类的东东?
3.注册表的打开和删除放在下面的位置度不对?
求各位技术大牛,多多指教。


SubKey = "SYSTEM\\ControlSet001\\Enum\\FTDIBUS";      
LPSTR SamName = "MACHINE\\SYSTEM\\ControlSet001\\Enum\\FTDIBUS"; //要修改的SAM项路径
PACL pOldDacl=NULL;
PACL pNewDacl=NULL;
DWORD dRet;
EXPLICIT_ACCESS eia;
PSECURITY_DESCRIPTOR pSID=NULL;
dRet = GetNamedSecurityInfo(SamName,SE_REGISTRY_KEY,DACL_SECURITY_INFORMATION,NULL,NULL,&pOldDacl,NULL,&pSID);// 获取SAM主键的DACL  
if(dRet!=ERROR_SUCCESS)
{AfxMessageBox("1");return 0;}
//创建一个ACE,允许Everyone组成员完全控制对象,并允许子对象继承此权限
ZeroMemory(&eia,sizeof(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(&eia,"Everyone",KEY_ALL_ACCESS,SET_ACCESS,SUB_CONTAINERS_AND_OBJECTS_INHERIT);
// 将新的ACE加入DACL  
dRet = SetEntriesInAcl(1,&eia,pOldDacl,&pNewDacl);
if(dRet!=ERROR_SUCCESS)
{AfxMessageBox("2");return 0;}
// 更新SAM主键的DACL  
dRet = SetNamedSecurityInfo(SamName,SE_REGISTRY_KEY,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDacl,NULL);
if(dRet!=ERROR_SUCCESS)
{AfxMessageBox("3");return 0;}

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKey,0,KEY_WRITE,&rKey)==ERROR_SUCCESS)//打开和删除放在这个地方对不对?
{
if( RegDeleteTree( HKEY_LOCAL_MACHINE, SubKey )==ERROR_SUCCESS)                 {
AfxMessageBox("删除成功");
RegCloseKey(rKey);
}
}
else
{
AfxMessageBox("不能打开文件");
}

//释放DACL和SID
if(pNewDacl)LocalFree(pNewDacl);
if(pSID)LocalFree(pSID);
{AfxMessageBox("4");return 0;}
/
[解决办法]

GetLastError()
看错误代码是多少
------解决方案--------------------


WIN7很麻烦的,要在管理员下运行才可以!!

[解决办法]
http://topic.csdn.net/u/20100112/14/3b470d4c-0889-44ec-80f5-bc8d45cdd5c7.html
[解决办法]
win7 中有些注册表是需要权限的,权限不够是不能修改的。win7 有注册表映射机制

热点排行