`
gui1401
  • 浏览: 50121 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

程序修改注册表权限

阅读更多

#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;
}

分享到:
评论

相关推荐

    注册表权限修改源代码

    在编程中,有时需要通过修改注册表权限来实现特定功能,例如编写驱动程序时的Enum键操作。本文将详细介绍如何通过源代码实现注册表权限修改,并探讨相关知识点。 首先,我们需要了解注册表的基本结构,它主要由HKEY...

    Delphi修改操作注册表权限例子(附带jcl控件源码)

    标题"Delphi修改操作注册表权限例子"表明这是一个实际的应用程序或代码片段,展示了如何在Delphi中更改注册表访问权限。这通常涉及到使用API函数,因为Delphi的标准库并不直接提供这些功能。Windows API提供了诸如...

    一个注册表权限设置程序例子

    本程序“RegSafe”就是针对注册表权限设置的一个实例,旨在帮助用户安全地管理注册表的访问权限。 首先,我们来理解注册表权限的基本概念。在Windows中,权限分为不同的级别,如读取、写入、修改、完全控制等。每个...

    注册表权限添加任何人权限

    总的来说,理解和掌握如何在 Delphi 中修改注册表权限是开发 Windows 应用程序时的重要技能。这涉及到对 Windows API 的深入理解,特别是与安全性相关的部分。通过适当的权限设置,开发者可以创建更加灵活和自定义的...

    BAT批处理脚本-注册表权限设置.zip

    根据压缩包子文件的文件名称“注册表权限设置.bat”,我们可以推测这个脚本的目的是设置或修改注册表的权限。具体来说,它可能包括以下步骤: 1. 使用`reg.exe`命令来操作注册表。`reg.exe`是Windows命令行下的工具...

    通过修改注册表修改exe等默认打开方式

    本文件用于修改注册表来修改默认的打开方式,在reglist.txt文件中输入你想修改的默认打开方式后缀,运行程序后,reglist.txt中的后缀的默认打开方式将会被更改为记事本。然后程序会生成一个outreglist.reg的文件,...

    注册表批量修改权限命令

    为了确保创建安全的环境,Windows 管理员通常需要了解特定用户或用户组对文件、目录、注册表项和 Windows 服务等资源具有哪种访问权限。AccessChk 能够通过直观的界面和输出快速回答这些问题。 AccessEnum 这一简单...

    subinacl修复注册表权限

    - 修改注册表权限需谨慎操作,错误的操作可能导致系统不稳定或功能缺失。在进行任何修改前,建议备份重要的注册表键或整个注册表。 - 如果不清楚具体是哪个注册表键导致的问题,可以尝试对整个HKEY_LOCAL_MACHINE...

    win7注册表 权限修改方法(有图)

    然而,由于注册表的敏感性,其默认情况下只允许拥有管理员权限的用户进行访问和修改。对于非管理员用户,如果需要修改特定的注册表项权限,可以按照以下步骤进行操作,以确保系统的安全性和稳定性。 1. **开启...

    强制修改注册表项

    当遇到“强制修改注册表项”的问题,即使用常规方法如Regedit.exe无法成功更改注册表项时,可能有以下几个原因: 1. **权限问题**:默认情况下,某些注册表项具有严格的访问权限,尤其是涉及到系统核心设置的部分。...

    操作系统安全:注册表权限设置.pptx

    正确配置注册表权限对于保护系统安全至关重要,防止未经授权的访问和恶意修改。以下是关于“注册表权限设置”的详细解释: 1. **注册表编辑器的访问**: 使用`Win`+`R`快捷键打开运行对话框,输入`Regedit`可启动...

    批量修改注册表——regtkt

    在IT领域,注册表是操作系统的核心组成部分,存储着系统及应用程序的各种设置信息。Windows系统,如XP和Win7,依赖注册表来管理配置数据。批量修改注册表是一项高级任务,通常需要谨慎处理,因为错误的操作可能导致...

    C# 注册表实例 修改注册表

    这篇教程或资源显然旨在帮助初学者理解如何通过C#代码来修改注册表,从而实现例如更改IE浏览器首页这样的功能。 首先,我们要了解在C#中操作注册表的基本步骤。这通常涉及以下关键点: 1. 引用命名空间:为了访问...

    c#做的小小的修改注册表的应用程序

    在实际开发中,应确保只有具有管理员权限的用户才能执行修改注册表的操作,并且需要有适当的错误处理机制来防止程序因注册表访问失败而崩溃。 至于压缩包中的“smily3”,这可能是程序的源代码文件名或者编译后的可...

    C# 修改注册表值

    - **权限管理**:确保应用程序具有足够的权限来进行注册表操作。 - **错误处理**:合理地处理可能发生的异常情况,如权限不足、路径不存在等。 - **最小化更改**:只更改必要的注册表项,避免不必要的更改。 #### 3...

    注册表监控程序_注册表监控_behaviorkk9_Vc_

    注册表监控程序是一种用于跟踪和记录系统注册表更改的实用工具。在Windows操作系统中,注册表是存储系统和应用程序设置的关键数据库。它包含了系统配置、软件安装信息、用户设置等重要数据。`SkMonitor`是这样一款...

    写注册表程序安装程序

    确保只有有权限的程序才能修改关键的注册表位置。 - 提供卸载功能,以便用户能轻松移除开机启动项。 - 遵循软件工程的最佳实践,如添加错误处理代码,记录日志,以及提供适当的用户提示。 6. **压缩包内容**: ...

    c++ 修改注册表设置环境变量

    这段代码首先打开了环境变量所在的注册表键,然后修改了名为“PATH”的环境变量,接着使用`SendMessageTimeoutA`广播WM_SETTINGCHANGE消息,通知系统环境变量已更改,以使新设置立即生效。请注意,实际操作时需要...

    VC 开机延时启程序(注册表操作)

    这需要考虑到权限问题,确保只有拥有足够权限的用户或程序才能修改这些键值。 4. **延时启动**:使用`SetTimer`函数设置定时器,当达到预设的时间间隔后,通过`KillTimer`和`PostMessage`等函数来触发程序的启动。 ...

Global site tag (gtag.js) - Google Analytics