VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 414|回复: 2

VC++高级班之注册表篇-[5]提权打开SAM子键

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-3-23 00:46:21 | 显示全部楼层 |阅读模式
①、普通方式打开 SAM 子键:
  1. HKEY hKey = NULL;
  2. TCHAR *lpszSubKey = _T("SAM\\SAM\\Domains");
  3. LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  4. if (lRet == ERROR_SUCCESS) {
  5.         MessageBox(_T("打开成功!"));
  6.         RegCloseKey(hKey);
  7. }
复制代码

===================================================
②、提升权限:
  1. #include <Aclapi.h>
  2. BOOL EnableRegSAMPriv()
  3. {
  4.         BOOL bRet = TRUE;
  5.         DWORD dRet = 0;
  6.         PACL pOldDacl = NULL, pNewDacl = NULL;
  7.         EXPLICIT_ACCESS eia = {0};
  8.         PSECURITY_DESCRIPTOR pSID = NULL;
  9.         LPTSTR samName = _T("MACHINE\\SAM\\SAM"); //要修改的SAM项路径

  10.         dRet = GetNamedSecurityInfo(samName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, &pSID); //获取SAM主键的DACL
  11.         if(dRet != ERROR_SUCCESS) {
  12.                 bRet = FALSE;
  13.                 goto __Error_End;
  14.         }

  15.         //创建一个ACE,允许Administrators组成员完全控制对象,并允许子对象继承此权限
  16.         BuildExplicitAccessWithName(&eia, _T("Administrators"), KEY_ALL_ACCESS, SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);

  17.         // 将新的ACE加入DACL
  18.         dRet = SetEntriesInAcl(1, &eia, pOldDacl, &pNewDacl);
  19.         if(dRet != ERROR_SUCCESS) {
  20.                 bRet = FALSE;
  21.                 goto __Error_End;
  22.         }

  23.         // 更新SAM主键的DACL
  24.         dRet = SetNamedSecurityInfo(samName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL);
  25.         if(dRet != ERROR_SUCCESS) {
  26.                 bRet = FALSE;
  27.                 goto __Error_End;
  28.         }

  29. __Error_End:
  30.         //释放DACL和SID
  31.         if(pNewDacl) LocalFree(pNewDacl);
  32.         if(pSID) LocalFree(pSID);

  33.         return bRet;
  34. }
复制代码

===================================================
③、读取数据:
  1. EnableRegSAMPriv();

  2. HKEY hKey = NULL;
  3. TCHAR *lpszSubKey = _T("SAM\\SAM\\Domains\\Account\\Users\\000001F4");
  4. LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  5. if (lRet == ERROR_SUCCESS) {
  6.         DWORD dwType = 0, dwDataLen = 0;
  7.         BYTE *lpData = NULL;
  8.         lRet = RegQueryValueEx(hKey, _T("V"), NULL, &dwType, NULL, &dwDataLen);
  9.         lpData = new BYTE[dwDataLen+1];
  10.         ZeroMemory(lpData, dwDataLen+1);
  11.         lRet = RegQueryValueEx(hKey, _T("V"), NULL, &dwType, lpData, &dwDataLen);
  12.         delete [] lpData;
  13.         RegCloseKey(hKey);
  14. }
复制代码

===================================================
④、修改注册表实现文件类型关联:C:\WINDOWS\notepad.exe %1
  1. HKEY hKey = NULL;
  2. TCHAR *lpszSubKey = _T("txtfile\\shell\\open\\command");
  3. LONG lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  4. if (lRet == ERROR_SUCCESS) {
  5.         TCHAR szPath[MAX_PATH] = {0};
  6.         GetModuleFileName(NULL, szPath, MAX_PATH);
  7.         CString strFile = szPath;
  8.         strFile += _T(" %1");
  9.         RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)strFile.GetBuffer(), strFile.GetLength()*sizeof(TCHAR));
  10.         RegCloseKey(hKey);
  11. }
复制代码

===================================================
※※※ 小作业:
1、修改注册表实现文件关联后,不仅能打开本程序,还要打开默认关联的程序!
参考帖子:http://www.cctry.com/thread-4026-1-1.html
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
教程介绍及详情请见:http://www.cctry.com/static/vip/index.html
VC驿站Vip会员详情请见:http://www.cctry.com/static/vip/index.html




上一篇:VC++高级班之注册表篇-[4]其他类型键值的设置
下一篇:VC++高级班之多线程篇-[1]认识与创建线程

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
ico_lz  楼主| Syc 发表于 2018-3-26 18:19:00 | 显示全部楼层

灌水?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

82_avatar_middle
在线会员 love_cctry 发表于 2018-3-30 14:13:33 | 显示全部楼层
支持哦支持哦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-9-26 21:30

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表