VC修改注册表SAM项权限

#include <windows.h>

#include <stdio.h>

#include  <Aclapi.h>

#pragma comment(lib,"Advapi32")

int main()

{

LPSTR SamName = "MACHINE\\SAM\\SAM"; //要修改的SAM项路径

PACL pOldDacl=NULL;

PACL pNewDacl=NULL;

DWORD dRet;

EXPLICIT_ACCESS eia;

PSECURITY_DESCRIPTOR pSID=NULL;

dRet = GetNamedSecurityInfo(SamName,SE_REGISTRY_KEY,DACL_SECURITY_INFORMATION,NULL,NULL,&pOldDacl,NULL,&pSID);// 获取SAM主键的DACL 

if(dRet=ERROR_SUCCESS)

return 0;

//创建一个ACE,允许Administrators组成员完全控制对象,并允许子对象继承此权限

ZeroMemory(&eia,sizeof(EXPLICIT_ACCESS));

BuildExplicitAccessWithName(&eia,"Administrators",KEY_ALL_ACCESS,SET_ACCESS,SUB_CONTAINERS_AND_OBJECTS_INHERIT);

// 将新的ACE加入DACL 

dRet = SetEntriesInAcl(1,&eia,pOldDacl,&pNewDacl);

if(dRet=ERROR_SUCCESS)

return 0;

// 更新SAM主键的DACL 

dRet = SetNamedSecurityInfo(SamName,SE_REGISTRY_KEY,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDacl,NULL);

if(dRet=ERROR_SUCCESS)

return 0;

//释放DACL和SID

if(pNewDacl)LocalFree(pNewDacl);

if(pSID)LocalFree(pSID);

return 0;

}

DWORD WINAPI GetNamedSecurityInfo(

LPTSTR pObjectName,                        // object name

SE_OBJECT_TYPE ObjectType,                 // object type

SECURITY_INFORMATION SecurityInfo,        // 消息类型

PSID *ppsidOwner,                          // 所有者的SID

PSID *ppsidGroup,                          // 以前的组 SID

PACL *ppDacl,                              // DACL

PACL *ppSacl,                              // SACL

PSECURITY_DESCRIPTOR *ppSecurityDescriptor // SD

);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,061评论 0 2
  • 昨天,又一次喝酒喝醉了。直到今天写这篇文字的时候,身上似乎还散发着阵阵酒气,脑袋也有些昏昏沉沉,好像感冒了一样,并...
    跌跌撞撞的蜗牛阅读 361评论 0 0
  • 今天来学习excel的数字格式自定义,特别是条件的自定义,一般来说,未进行自定义条件以前,excel一直保持着自己...
    竹桃听花期阅读 225评论 0 0
  • 你以为 誓言的花今夜会盛开 当午夜钟声敲响 却听到 谁的心房碎了 湘鱼.20170915
    走玩户外_鱼吧唧_湘鱼阅读 178评论 0 0
  • 亲爱的儿子,再过几天就是你的生日了,13周岁的生日。日子总是这么快,眨眼间你已长成一个小伙子了。但在妈妈的脑...
    花生小厨阅读 347评论 0 0