确定用户是否属于本地管理员组

2024-03-22

我的问题

我正在使用 PInvoked Windows API 函数来验证用户是否属于本地管理员组。我正在利用GetCurrentProcess, OpenProcessToken, GetTokenInformationand LookupAccountSid验证用户是否是本地管理员。

GetTokenInformation返回一个TOKEN_GROUPS具有数组的结构体SID_AND_ATTRIBUTES结构。我迭代该集合并比较返回的用户名LookupAccountSid.

我的问题是,在本地(或更普遍地在我们的内部域上),这按预期工作。 builtin\Administrators 位于当前进程令牌的组成员身份内,我的方法返回 true。在另一个开发人员的另一个域上,该函数返回 false。

The LookupAccountSid前 2 次迭代功能正常TOKEN_GROUPSstruct,返回 None 和Everyone,然后抱怨“参数不正确”。

什么会导致只有两个组正常工作?

The TOKEN_GROUPSstruct表示有14组。我假设 SID 无效。

我 PInvoke 上的所有内容均取自 PInvoke 上的示例website http://www.pinvoke.net/。唯一的区别是,与LookupAccountSid我已经改变了Sid参数来自abyte[] to a IntPtr因为SID_AND_ATTRIBUTES也定义为IntPtr。这样可以吗?LookupAccountSid是用 PSID 定义的吗?

LookupAccountSid PInvoke

    [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern bool LookupAccountSid(
        string lpSystemName,
        IntPtr Sid,
        StringBuilder lpName,
        ref uint cchName,
        StringBuilder ReferencedDomainName,
        ref uint cchReferencedDomainName,
        out SID_NAME_USE peUse);

代码失败的地方

                for (int i = 0; i < usize; i++)
                {
                    accountCount = 0;
                    domainCount = 0;
                    //Get Sizes
                    LookupAccountSid(null, tokenGroups.Groups[i].SID, null, ref accountCount, null,
                                     ref domainCount, out snu);

                    accountName2.EnsureCapacity((int) accountCount);
                    domainName.EnsureCapacity((int) domainCount);

                    if (!LookupAccountSid(null, tokenGroups.Groups[i].SID, accountName2, ref accountCount, domainName,
                                     ref domainCount, out snu))
                    {
                        //Finds its way here after 2 iterations
                        //But only in a different developers domain
                        var error = Marshal.GetLastWin32Error();

                        _log.InfoFormat("Failed to look up SID's account name. {0}", new Win32Exception(error).Message);
                        continue;
                    }

如果需要更多代码,请告诉我。任何帮助将不胜感激。


听起来您正在尝试复制的功能NetUserGetLocalGroups http://msdn.microsoft.com/en-us/library/aa370655%28VS.85%29.aspx。您还可以使用NetUserGetInfo http://msdn.microsoft.com/en-us/library/aa370654%28VS.85%29.aspx信息级别为1,检查值usri1_priv in the USER_INFO_1 http://msdn.microsoft.com/en-us/library/aa371109%28v=VS.85%29.aspx for USER_PRIV_ADMIN.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定用户是否属于本地管理员组 的相关文章

  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 尝试使用 VS 2012 打开我的 asp.net 4.5 MVC Web 应用程序时出错。Asp.net 尚未在服务器上注册

    我有一个Windows Server 2012 R2 Visual Studio 专业版 2012 现在我用来开发 ASP NET 4 5 MVC 4 Web 应用程序 没有任何问题 但现在当我尝试打开该项目时 我会收到此错误 如果我单击
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 当 Bash 脚本编写和捕获输出时,在后台使用与号 (&) 分叉命令

    我希望在后台分叉一个进程 同时捕获 bash 脚本中的输出 我可以运行以下脚本来 ping IP 列表 它将每个调用移至后台并且运行速度非常快 但它不会捕获执行命令的输出以供进一步处理 for i in cat list txt do pi
  • 如何在 Visual C++ 2008 中创建 UTF-8 字符串文字

    在 VC 2003 中 我可以将源文件保存为 UTF 8 并按原样使用所有字符串 换句话说 以下代码将按原样将字符串打印到控制台 如果源文件保存为 UTF 8 则输出将为 UTF 8 printf Chinese Traditional p
  • Intel Fortran 错误 #6633:实际参数的类型与虚拟参数的类型不同

    对于可能在这里提出这样一个基本问题 我深表歉意 我是使用英特尔 Fortran 编程的新手 所以我认为在这种情况下 我不知道有一些东西丢失或组织错误 如果有人能在这方面帮助我 我将不胜感激 问题是我在编译代码时看到以下错误 而我相信我已经声
  • 如何在 Android 上创建渐进式 JPEG 图像

    我需要通过very来自 Android 手机的低带宽连接 低至 10kByte s 并希望以渐进 隔行 模式发送它们 以便另一端的用户在漫长的传输过程中开始看到图像 现在 我正在使用常规照片应用程序创建图像 Intent takePictu
  • 突变观察者 - DOM 通过回调函数改变

    有没有办法 如何强制突变观察者忽略回调函数引起的 DOM 变化 现在我有 var config attributes true childList true characterData true var target document bo
  • 如何在 Visual Studio 中获得 .feature 文件的 Gherkin 语法突出显示?

    默认情况下 Feature Scenario Given When Then 等关键字不会突出显示 是否有现成的模板可以实现此目的 最新版本SpecFlow http www specflow orgVS2010有一个内置的语法高亮
  • 通过绘图下拉菜单切换显示的迹线

    我正在使用 R 编程语言 我试图在这里复制本教程以获取我自己的数据 https plotly com r dropdowns https plotly com r dropdowns 我创建了一些假数据并绘制了 4 个图 load libr
  • Rails.env 与 RAILS_ENV

    在检查运行环境时 我在示例中看到了这两种情况 首选什么 就所有意图和目的而言 它们是否平等 根据文档 http api rubyonrails org classes Rails html method c env Rails env wr
  • 如何修复 BBcode 正则表达式

    我有一个获取 BBcode 标签的正则表达式 除了一个小故障之外 它工作得很好 这是当前的表达式 x22 x22 1 以下是它成功匹配的一些文本及其构建的组 url http www google com 去 http www google
  • 将可选属性表示为 C++ 类成员

    我正在根据模式生成 C 代码 存在实体 每个实体包含属性 每个属性具有相应的数据类型 现在的问题是其中一些属性是 可选的 这意味着它们不必是类声明的一部分 然而 在C 中 某些东西要么是类的成员 要么不是类的成员 没有诸如 可选数据成员 之
  • Android 子模块中的数据绑定

    我有一个应用程序模块 让我们说 测试 测试 模块依赖于子模块 B 两者都启用数据绑定 在库模块 B 中 我使用数据绑定创建一个简单的活动 其目的是为了可重用性 例如 我可以创建一个基本登录屏幕并稍后在许多应用程序中使用它 下面是B包中的示例
  • Microsoft Visual Studio 和 C#:如何以可视方式向控件添加事件?

    如何使用 C 将事件处理程序添加到 Microsoft Visual Studio 2008 窗体中的控件 我可以手动执行此操作 但打开表单的 Designer cs 文件 但我找不到通过界面执行此操作的方法 在 MSVC 6 中 使用 C
  • 如何使用 Mysql Joins 而不是嵌套子查询来获得相同的结果?

    我有一些嵌套子查询 结果非常慢 我正在努力用 Mysql Joins 重写相同的代码 我希望有人可以帮助我 我想从数据库中除播放列表中的歌曲之外的所有歌曲中获取数据 之后我只想要播放列表中的歌曲 在这里你可以看到我的查询 提前致谢 Quer
  • 记录内存访问足迹

    I found mtrace https github com aclements mtrace克莱门茨博士 虽然很有用 但是在我需要的情况下却不能正常工作 我打算使用该记录来了解不同场景下的内存访问模式 有人可以分享相关经验吗 任何建议将
  • 在哪里可以找到“mysqldump”退出代码列表?

    我知道exit code 0 means No error I got exit code 2 这是什么意思 我在哪里可以看到完整的列表mysqldump退出代码 取自 MySQL 5 1 59 中的 client mysqldump c
  • Nagios(返回码 255 超出范围)

    我收到错误 返回代码 255 超出范围 http localhost nagios http localhost nagios 但是当我从 shell 运行命令时 它运行良好 如果您使用 NRPE 并收到 NRPE 无法读取输出 错误是因为
  • 为什么 CFileDialog::DoModal() 挂起?

    我在Win XP平台上用VS 6 0开发了一个相当大的C 程序 现在已经迁移到运行Win 7的新机器 仍然运行VS 6 0 该代码包含一个函数 用于实例化并运行 CFileDialog 对象 以从特定的初始目录查找并打开具有特定扩展名的 A
  • Linux:如何杀死睡眠

    更多的是一个概念性问题 如果我写一个 bash 脚本来做类似的事情 control c echo goodbye exit trap control c SIGINT while true do sleep 10 user wants to
  • AnimatedVectorDrawable 作为窗口背景。是否可以?

    我正在尝试使用AnimatedVectorDrawable作为放置在窗口背景中的启动动画 我使用官方给出的例子https developer android com reference android graphics drawable A
  • 确定用户是否属于本地管理员组

    我的问题 我正在使用 PInvoked Windows API 函数来验证用户是否属于本地管理员组 我正在利用GetCurrentProcess OpenProcessToken GetTokenInformationand LookupA