我有一个代码,应该能够判断应用程序是否在管理员用户下运行。
现在,我可以获取进程的令牌并提取进程所有者的SID。效果很好。所以我有这个“SecurityIdentifier”对象,但我不知道如何检查它是否确实是管理组的成员。
因此,如果有人知道某种方式,那就太棒了。
但是,现在,我找到了一种从我从进程中检索到的令牌创建WindowsIdentity对象的方法,它似乎正在进行模拟。但是,在调用WindowsPrincipal.IsInRole方法之后,我从Win32获得了一个很大的“拒绝访问”错误。所以我真的遇到了另一个死胡同。
有什么想法吗?
如果答案依赖于WinAPI或.NetFramework,那就不重要了。
由于
答案 0 :(得分:1)
好了,在检查了employee.deliveries
和curl_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