VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 644|回复: 4

[交流] 关于管理员SID与管理员权限,有个疑惑,麻烦请知道的解答一下,谢谢

[复制链接]
66_avatar_middle
在线会员 发表于 2016-10-28 21:36:53 | 显示全部楼层 |阅读模式
最近在看windows核心编程,关于创建私有命名空间,有点没有看懂!
运行下面代码,首先windows登陆的是管理员账户。
如果右键用管理员权限运行,那么就会创建成功。打印 : "创建私有命名空间成功"
如果直接双击运行,那么就会创建失败。打印 :"创建私有命名空间 失败 You must be running as Administrator"

但是我的边界描述符绑定的是管理员的SID啊,即使不用管理员权限运行,只要我使用管理员账户登陆的,那么我的SID都是一样的,应该与管理员权限没有关系把,都是同一个SID,管理员权限应该是与访问令牌有关啊,SID不就是表示一个用户吗?

难道绑定了管理员SID,不仅要用管理员账户,还要用管理员权限吗?

另外,如果我再起一个进程来打开刚才进程创建的私有空间,无论我用不用管理员权限都可以打开成功。难道创建的时候需要管理员权限,打开访问的时候就不需要了吗?

谢谢!!

  1. #include <iostream>
  2. #include <tchar.h>
  3. #include <windows.h>
  4. #include <shlobj.h>
  5. using namespace  std;
  6. PCTSTR   g_szBoundary = TEXT("Boundary");
  7. PCTSTR   g_szNamespace = TEXT("Namespace");
  8. HANDLE   g_hBoundary = NULL;
  9. HANDLE   g_hNamespace = NULL;
  10. void CreateNamespace() {
  11.     // Create the boundary descriptor
  12.     g_hBoundary = CreateBoundaryDescriptor(g_szBoundary, 0);

  13.     // Create a SID corresponding to the Local Administrator group
  14.     BYTE localAdminSID[SECURITY_MAX_SID_SIZE];
  15.     PSID pLocalAdminSID = &localAdminSID;
  16.     DWORD cbSID = sizeof(localAdminSID);
  17.     if (!CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, pLocalAdminSID, &cbSID))
  18.     {
  19.         wcout << TEXT("AddSIDToBoundaryDescriptor failed") << endl;
  20.         return;
  21.     }
  22.     // Associate the Local Admin SID to the boundary descriptor
  23.     // --> only applications running under an administrator user
  24.     //       will be able to acce
  25.     //     ss the kernel objects in the same namespace
  26.     if (!AddSIDToBoundaryDescriptor(&g_hBoundary, pLocalAdminSID)) {
  27.         wcout << TEXT("AddSIDToBoundaryDescriptor failed") << endl;
  28.         return;
  29.     }
  30.     g_hNamespace = CreatePrivateNamespace(NULL, g_hBoundary, g_szNamespace);

  31.     DWORD dwLastError = GetLastError();
  32.     // Nothing to do if access is denied
  33.     // --> this code must run under a Local Administrator account
  34.     if (dwLastError == ERROR_ACCESS_DENIED) {
  35.         wcout << TEXT("创建私有命名空间 失败 You must be running as Administrator") << endl;
  36.         return;
  37.     }
  38.     if(g_hNamespace)
  39.     {
  40.         wcout << TEXT("创建私有命名空间成功") << endl;
  41.     }
  42. }
复制代码




上一篇:golang channel 的 c++ 實現
下一篇:招聘windows驱动开发工程师
66_avatar_middle
ico_lz  楼主| 发表于 2016-10-28 22:51:00 | 显示全部楼层
关于管理员SID与管理员权限,有个疑惑,麻烦请知道的解答一下,谢谢
66_avatar_middle
ico_lz  楼主| 发表于 2016-10-29 09:24:45 | 显示全部楼层
关于管理员SID与管理员权限,有个疑惑,麻烦请知道的解答一下,谢谢
66_avatar_middle
ico_lz  楼主| 发表于 2016-10-29 09:35:02 | 显示全部楼层
都没有人呢。。。
51_avatar_middle
online_admins 发表于 2016-10-31 11:03:54 | 显示全部楼层
在你的工程属性中按照如下图所示的方式改下试试:
关于管理员SID与管理员权限,有个疑惑,麻烦请知道的解答一下,谢谢
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

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

GMT+8, 2019-7-18 09:34

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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