怎么设定访问注册表的权限
如何设定访问注册表的权限?
我查找了MSDN,其中有一个示例代码,但是,无法达到我要的效果,不知原因何在?
我想达到的目的:设定某个注册表键及其子键的everyone或者system用户访问权限,使其拥有完全控制的权限或者只有读取的权限,应该如何实现呢?MSDN中的示例代码我看得也不是很懂,不知哪位能详细解释一下,以及如何利用示例代码传递变量?示例代码我贴在下面:
------解决方案--------------------
帮你顶~我不会
你把分给多点就有人答拉~
我查找了MSDN,其中有一个示例代码,但是,无法达到我要的效果,不知原因何在?
我想达到的目的:设定某个注册表键及其子键的everyone或者system用户访问权限,使其拥有完全控制的权限或者只有读取的权限,应该如何实现呢?MSDN中的示例代码我看得也不是很懂,不知哪位能详细解释一下,以及如何利用示例代码传递变量?示例代码我贴在下面:
- C/C++ code
//*************************************************************
// 设定某个对象的访问权限
//*************************************************************
DWORD CUSBCleanerApp::AddAceToObjectsSecurityDescriptor (
LPTSTR pszObjName, // 对象名 // hkey
SE_OBJECT_TYPE ObjectType, // 对象类型 // SE_REGISTRY_KEY,若用预定义键必须用如下"CLASSES_ROOT", "CURRENT_USER", "MACHINE", and "USERS".
LPTSTR pszTrustee, // trustee for new ACE // TRUSTEE_IS_NAME or TRUSTEE_IS_SID
TRUSTEE_FORM TrusteeForm, // format of trustee structure // TRUSTEE_IS_SID or TRUSTEE_IS_NAME
DWORD dwAccessRights, // access mask for new ACE // GENERIC_ALL,访问的权限设置
ACCESS_MODE AccessMode, // type of ACE // SET_ACCESS
DWORD dwInheritance // inheritance flags for new ACE // CONTAINER_INHERIT_ACE
)
{
DWORD dwRes = 0;
PACL pOldDACL = NULL, pNewDACL = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;
EXPLICIT_ACCESS ea;
if (NULL == pszObjName)
return ERROR_INVALID_PARAMETER;
// Get a pointer to the existing DACL.
// 获取已存在的DACL
dwRes = GetNamedSecurityInfo(pszObjName, ObjectType,
DACL_SECURITY_INFORMATION,
NULL, NULL, &pOldDACL, NULL, &pSD);
if (ERROR_SUCCESS != dwRes) {
printf( "GetNamedSecurityInfo Error %u\n", dwRes );
goto Cleanup;
}
// Initialize an EXPLICIT_ACCESS structure for the new ACE.
ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
ea.grfAccessPermissions = dwAccessRights;
ea.grfAccessMode = AccessMode;
ea.grfInheritance= dwInheritance;
ea.Trustee.TrusteeForm = TrusteeForm;
ea.Trustee.ptstrName = pszTrustee;
// Create a new ACL that merges the new ACE
// into the existing DACL.
dwRes = SetEntriesInAcl(1, &ea, pOldDACL, &pNewDACL);
if (ERROR_SUCCESS != dwRes) {
printf( "SetEntriesInAcl Error %u\n", dwRes );
goto Cleanup;
}
// Attach the new ACL as the object's DACL.
dwRes = SetNamedSecurityInfo(pszObjName, ObjectType,
DACL_SECURITY_INFORMATION,
NULL, NULL, pNewDACL, NULL);
if (ERROR_SUCCESS != dwRes) {
printf( "SetNamedSecurityInfo Error %u\n", dwRes );
goto Cleanup;
}
Cleanup:
if(pSD != NULL)
LocalFree((HLOCAL) pSD);
if(pNewDACL != NULL)
LocalFree((HLOCAL) pNewDACL);
return dwRes;
}
------解决方案--------------------
帮你顶~我不会
你把分给多点就有人答拉~