首页 电脑 电脑学堂 查看内容

API实现了regedt32修改注册表权限

2005-2-21 06:57 566 0

摘要: 来源:http://zhouzhen.blogchina.com/ #include <Windows.h> #include <Aclapi.h> #pragma comm...
关键词: nbsp dwRet NULL ERROR FreeAndExit pNewDacl pOldDacl SAM DACL printf

来源:http://zhouzhen.blogchina.com/ #include <Windows.h> #include <Aclapi.h> #pragma comment (lib,"Advapi32.lib") void main() {     DWORD dwRet;     LPSTR SamName = "MACHINE\\SAM\\SAM";     PSECURITY_DESCRIPTOR pSD = NULL;     PACL pOldDacl = NULL;     PACL pNewDacl = NULL;     EXPLICIT_ACCESS ea;     HKEY hKey = NULL;     // 获取SAM主键的DACL     dwRet = GetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,                 NULL, NULL, &pOldDacl, NULL, &pSD);     if (dwRet != ERROR_SUCCESS)     {         printf("GetNamedSecurityInfo Error: %d\n", dwRet);         goto FreeAndExit;     }     // 创建一个ACE,允许Everyone完全控制对象,并允许子对象继承此权限     ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));     BuildExplicitAccessWithName(&ea, "Everyone", KEY_ALL_ACCESS, SET_ACCESS,         SUB_CONTAINERS_AND_OBJECTS_INHERIT);     // 将新的ACE加入DACL     dwRet = SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl);     if (dwRet != ERROR_SUCCESS)     {         printf("SetEntriesInAcl Error: %d\n", dwRet);         goto FreeAndExit;     }     // 更新SAM主键的DACL     dwRet = SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,                 NULL, NULL, pNewDacl, NULL);     if (dwRet != ERROR_SUCCESS)     {         printf("SetNamedSecurityInfo Error: %d\n", dwRet);         goto FreeAndExit;     }     // 打开SAM的子键     dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SAM\\SAM\\Domains\\Account\\Users\\000001F4",                 0, KEY_ALL_ACCESS, &hKey);     if (dwRet != ERROR_SUCCESS)     {         printf("RegOpenKeyEx Error: %d\n", dwRet);         goto FreeAndExit;     }     printf("Open SAM Subkey Successfully.\n"); FreeAndExit:     if (hKey) RegCloseKey(hKey);     if (pNewDacl) LocalFree(pNewDacl);     // 还原SAM主键的DACL     if (pOldDacl) SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,                         NULL, NULL, pOldDacl, NULL);     if (pSD) LocalFree(pSD);     return; }
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部