检查令牌是否属于Admin组的成员

时间:2016-04-22 09:28:54

标签: .net winapi

我有一个代码,应该能够判断应用程序是否在管理员用户下运行。

现在,我可以获取进程的令牌并提取进程所有者的SID。效果很好。所以我有这个“SecurityIdentifier”对象,但我不知道如何检查它是否确实是管理组的成员。

因此,如果有人知道某种方式,那就太棒了。

但是,现在,我找到了一种从我从进程中检索到的令牌创建WindowsIdentity对象的方法,它似乎正在进行模拟。但是,在调用WindowsPrincipal.IsInRole方法之后,我从Win32获得了一个很大的“拒绝访问”错误。所以我真的遇到了另一个死胡同。

有什么想法吗?

如果答案依赖于WinAPI或.NetFramework,那就不重要了。

由于

1 个答案:

答案 0 :(得分:1)

好了,在检查了employee.deliveriescurl_setopt($ch, CURLOPT_POSTFIELDS, '{"folderId":"1","parameters":{"amount":3,"ascending":false,"offset":0,"sort":"date"}}'); 类的源代码之后,我发现获取“拒绝访问”的原因是我检索令牌的方式第一名。 让我们从头开始:

$Parameters = array( 'MerchantCode' => $MerchantCode, 'PriceValue' => $amount, 'ReturnUrl' => $callback, 'InvoiceNumber' => $resnum, ); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($Parameters)); 是表示进程/线程令牌的类。因此,初始化一个方法是提供令牌。在我的例子中,我使用WindowsIdentity函数从另一个进程中检索了令牌。

这非常适合查询令牌数据和检索信息。就像我的情况一样。但是当在WindowsPrincipal课程旁边使用时,这还不够。

WindowsIdentity使用OpenProcessToken查看令牌是否属于用户组。但是为了能够使用WindowsPrincipal函数,您需要模拟进程/线程令牌。 WindowsPrincipal.IsInRole完全了解这一点,并且如果提供的CheckTokenMembershipEx具有模拟级别CheckTokenMembershipEx,则会使用WindowsPrincipal.IsInRole创建模仿令牌。

不幸的是,我犯了一个错误。在打开获取令牌的过程时,我没想到会出现这种情况。事实上,我甚至不知道DuplicateTokenEx使用了WindowsIdentity功能。所以我在打开进程令牌时没有要求None访问权限。这导致WindowsPrincipal.IsInRole失败并显示“拒绝访问”消息。添加权利,解决了一切。

以下是感兴趣的人的代码:

CheckTokenMembershipEx