API实现regedt32修改注册表权限
2006-10-02 16:07
435 查看
#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;
}
#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;
}
相关文章推荐
- API实现了regedt32修改注册表权限(幻影 zzzevazzz)
- API修改访问注册表的权限
- c#实现开机自动启动,以及解决修改注册表权限不足
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
- C#设置自定义文件图标实现双击启动(修改注册表)
- 通过修改注册表实现Windows 隐藏账户
- Regini修改注册表权限命令
- 用VBScript实现对Windows注册表的修改
- 修改注册表实现禁止和允许活动脚本。
- 用API修改注册表的完整模块
- 认证鉴权与API权限控制在微服务架构中的设计与实现(一)
- Win7,Vista UAC下应用程序标注为“需要管理员权限”的四种方法(可以修改注册表)
- 高德地图的Js API 简单Demo,可以快速实现路点描线(摘自官方接口及自行修改测试)
- 通过修改注册表实现IE8固定显示微软雅黑字体
- 《逆向工程核心原理》<04-30> 通过Debug修改代码实现API钩取的技术
- c#调用API更改桌面壁纸,同时修改注册表以避免电脑重启后壁纸还原
- 【转】【WPF】 WPF 调用API修改窗体风格实现真正的无边框窗体
- 用Cacls修改文件访问控制权限 VB实现
- 求教:请问Android中,权限的实现与相应API的调用是如何实现的
- 认证鉴权与API权限控制在微服务架构中的设计与实现(二)