修改注册表权限。。
2012-07-16 14:41
369 查看
void WINAPI SetRegPermission(wchar_t *KeyStr) { // TODO: Add your control notification handler code here HKEY hKey = 0; SID_IDENTIFIER_AUTHORITY sia = SECURITY_NT_AUTHORITY; PSID pInteractiveSid = NULL; PSID pAdministratorsSid = NULL; SECURITY_DESCRIPTOR sd; PACL pDacl = NULL; DWORD dwAclSize; LONG lRetCode; BOOL bRet; //char KeyStr[200]; //strcpy(KeyStr,"SOFTWARE\\LEGEND\\test"); lRetCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, KeyStr, 0, WRITE_DAC, &hKey); //open key /*lRetCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\LEGEND\\test"), 0, WRITE_DAC, &hKey);*/ // // prepare a Sid representing any Interactively logged-on user // bRet = AllocateAndInitializeSid( &sia, 1, SECURITY_INTERACTIVE_RID, 0, 0, 0, 0, 0, 0, 0, &pInteractiveSid ); // // preprate a Sid representing the well-known admin group // bRet = AllocateAndInitializeSid( &sia, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdministratorsSid ); // // compute size of new acl // dwAclSize = sizeof(ACL) + 2 * ( sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) ) + GetLengthSid(pInteractiveSid) + GetLengthSid(pAdministratorsSid) ; // // allocate storage for Acl // pDacl = (PACL)HeapAlloc(GetProcessHeap(), 0, dwAclSize); bRet = InitializeAcl(pDacl, dwAclSize, ACL_REVISION); // // grant the Interactive Sid KEY_READ access to the perf key // bRet = AddAccessAllowedAce( pDacl, ACL_REVISION, KEY_READ/*KEY_ALL_ACCESS*/, pInteractiveSid ); /*bRet = AddAccessAllowedAce( pDacl, ACL_REVISION, samDesired, pInteractiveSid );*/ // // grant the Administrators Sid KEY_ALL_ACCESS access to the perf key // bRet = AddAccessAllowedAce( pDacl, ACL_REVISION, KEY_READ/*KEY_ALL_ACCESS*/, pAdministratorsSid ); bRet = InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION); bRet = SetSecurityDescriptorDacl(&sd, TRUE, pDacl, FALSE); // // apply the security descriptor to the registry key // lRetCode = RegSetKeySecurity( hKey, (SECURITY_INFORMATION)DACL_SECURITY_INFORMATION, &sd ); //clean up RegCloseKey(hKey); RegCloseKey(HKEY_LOCAL_MACHINE); // // free allocated resources // if(pDacl != NULL) HeapFree(GetProcessHeap(), 0, pDacl); if(pInteractiveSid != NULL) FreeSid(pInteractiveSid); if(pAdministratorsSid != NULL) FreeSid(pAdministratorsSid); }
相关文章推荐
- 好用 转:删除,修改注册表中需要设置权限的项
- win7下c#程序修改注册表的权限问题
- 不能安装软件的痛苦,没有修改注册表的权限
- 获得WIN7管理员权限(可通过修改注册表,或者组策略改变)
- 修改注册表权限Regini
- API实现regedt32修改注册表权限
- Windows删除/修改注册表权限不足的解决方法
- 有管理员权限无法修改注册表解决办法
- 修改注册表权限
- 编程设置修改文件和注册表权限最新完整例子
- C#设置注册表权限失败,修改应用程序以管理员身份执行
- 雨林木风Win10注册表如何修改?Win10注册表权限怎么修改
- win7下c#程序修改注册表的权限问题
- 软件卸载不彻底 注册表清理 修改权限
- API实现了regedt32修改注册表权限(幻影 zzzevazzz)
- win7下c#程序修改注册表的权限问题
- Windows7 中注册表无法修改权限
- win7系统注册表的权限修改
- 修改win2000注册表项目的权限
- 使用regini.exe修改注册表及注册表权限