您的位置:首页 > 其它

Win7普通用户下提升注册表权限

2013-09-13 11:34 951 查看
同样的问题,在普通用户下访问注册表会出现无权限问题。此时的想法是在自己的软件注册键提升其权限,以方便用户修改,包括密码等一些信息。

代码如下:(PS:按照预计的想法是提升其权限后,软件运行结束后主恢复用户本身权限,但结果只提升了,没能恢复到原来的权限。知道的牛牛请多指点下,WIN7权限问题感觉好深奥)。

BOOL SetRegPrivilege(HKEY hKey, LPSTR SamName)
{
DWORD dwRet;
PACL pNewDacl = NULL, pOldDacl = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;
EXPLICIT_ACCESS ea;
// 获取SAM主键的DACL
dwRet = GetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
NULL, NULL, &pOldDacl, NULL, &pSD);
if (dwRet != ERROR_SUCCESS)
{
return FALSE;
}
// 创建一个ACE,允许Everyone完全控制对象,并允许子对象继承此权限
ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(&ea, "Administrators", KEY_ALL_ACCESS, SET_ACCESS,
SUB_CONTAINERS_AND_OBJECTS_INHERIT);

// 将新的ACE加入DACL
dwRet = SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl);
if (dwRet != ERROR_SUCCESS)
{
return FALSE;
}
// 更新SAM主键的DACL
dwRet = SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
NULL, NULL, pNewDacl, NULL);
if (dwRet != ERROR_SUCCESS)
{
return FALSE;
}
//释放资源
if (pNewDacl)
LocalFree(pNewDacl);
// 还原SAM主键的DACL
// 	if (pOldDacl)
// 		SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
// 		NULL, NULL, pOldDacl, NULL);
if (pOldDacl)
LocalFree(pOldDacl);
if (pSD)
LocalFree(pSD);
return TRUE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: