gpt4 book ai didi

c# - 提升进程时,如何获取非提升 session 的 Windows 身份验证 ID

转载 作者:可可西里 更新时间:2023-11-01 11:36:36 25 4
gpt4 key购买 nike

我需要获取由 GetTokenInformation 返回的 AuthenticationID 和 TokenStatistics 类,用于登录该站的用户,无论我是否被提升。

让我给你一些更多的信息。假设我这样做:

var Result = GetTokenInformation(WindowsIdentity.GetCurrent().Token, TOKEN_INFORMATION_CLASS.TokenStatistics, TokenInformation, TokenInfLength, out TokenInfLength);

这将使我能够毫无问题地从 TokenInformation 结构中获取 AuthenticationID。假设生成的 authenticationID 是“00000000-00001234”

现在,如果我右键单击 Visual Studio 并单击“以管理员身份运行”,再次启动我的代码,结果将是其他内容,例如“00000000-00001289”。但我需要“00000000-00001234”

如何获取“00000000-00001234”来判断当前进程是否提升?

我想这只是找到合适的 Token 给 GetTokenInformation 的问题,但我在这里兜圈子......

注意:我的代码基于 How to get the logon SID in C#实现 GetTokenInformation,然后对其进行调整以获取 TokenStatistics。

最佳答案

好的,我终于让它工作了。这些是步骤(没有发布完整的代码,它很长):

  1. 递归地在 win32_process 类 + 托管 Process 类上使用 WMI (ManagementObject) 来创建当前进程的祖先
  2. 在我的特殊情况下,当我找到“explorer”进程或遇到异常时,我会停止算法,因为 explorer 很可能没有提升。
  3. P/从第 2 步返回的 ProcessId 上调用 advapi32.dll 中的 OpenProcessToken 函数。这将为您提供一个 userToken,可用于构建可在第 4 步中使用的新 WindowsIdentity
  4. 然后您可以将该 WindowsIdentity Token 属性提供给 GetTokenInformation 以取回您的 AuthenticationID。

这已经过测试并且可以正常工作。

引用:

如果您发现此过程有任何问题,请不要犹豫发表评论或发布您自己的答案!


注意:如果其中一个父进程已被终止,则会出现问题:WMI 将为您提供一个不再存在的进程的 ID。我正在使用的产品的性质让我不时重新启动资源管理器(仅在开发期间),这就是我看到问题的方式。这对我来说不是真正的问题,但很高兴知道。

谢谢

关于c# - 提升进程时,如何获取非提升 session 的 Windows 身份验证 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com