当一个进程被提升的时候,我怎么能得到非提升会话的windows身份validationID

我需要获取由GetTokenInformation返回的AuthenticationID和TokenStatistics类的login在站上的用户是否boost。

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

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

这将允许我从TokenInformation结构中获得AuthenticationID而没有问题。 假设生成的authenticationID是“00000000-00001234”

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

如何获得“00000000-00001234”当前进程是否boost?

我想这只是find正确的令牌给GetTokenInformation的问题,但我正在这里运行…

注:我基于我的代码如何获得loginSID在C#中实现GetTokenInformation,然后调整它能够得到TokenStatistics。

Solutions Collecting From Web of "当一个进程被提升的时候,我怎么能得到非提升会话的windows身份validationID"

好的,我终于搞定了。 这些是步骤(不发布完整的代码,这是相当长的):

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

这是测试和工作。

参考:

  • GetTokenInformation: 如何在C#中获取登录SID (更改调用TokenStatistics的函数)
  • 获取进程的父级: http : //bytes.com/topic/c-sharp/answers/255642-enumerataing-processes-c
  • 获取进程的WindowsIdentity: http : //dotbay.blogspot.fr/2009/06/finding-owner-of-process-in-c.html

如果你看到这个程序的任何问题,请不要犹豫,发表评论或张贴你自己的答案!


注意:如果其中一个父进程已经被终止,则会出现问题:WMI将为您提供一个不存在的进程的标识。 我正在工作的产品的性质,我不时重新启动探险家(只在开发期间),这是我看到的问题。 这对我来说并不是一个问题,但很高兴知道。

谢谢