发新话题
打印

[转载]API实现了regedt32修改注册表权限

[转载]API实现了regedt32修改注册表权限

信息来源:zhouzhen
文章作者:zzzevazzz

#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;
}
益友网吧联盟  http://www.96-7.com

TOP

帮你编辑了一下 不会有“来源不明”的文章的 从哪转来的 来源就是哪 如果原文著明了来源 那就更好了
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

COM 是一种允许(用任何语言编写的)可重用代码使用标准常规调用,同时将执行细节隐藏在 API 之后的技术,例如组件存储在某台机器上,同时可对机器执行内务处理。它可以被认为是一种带基础根对象的超级远程呼叫调用(Remote Procedure Call,RPC)机制。它将执行从接口中分离出来。

COM 促使执行从接口中分离,同时隐藏了执行细节,例如执行的位置和编写代码使用的语言。

需求
COM 函数仅可用于 PHP 的 Windows 版本。
风停了 又吹 我忽然想起谁 天亮了 又黑 我过了好几岁 心暖了 又灰 世界有时候孤单的很需要另一个同类

TOP

应该是zzzevazzz写的 当时我问他相关的问题他写的例子 幻影重开的时候 可以找到原文
我没头像了。。。

TOP

发新话题