我自己已经能够解决这个问题,感谢所有看过这个问题的人。
好的,正如我上面提到的 - 令牌属于在会话 0 中运行的进程......
所以我所做的……是寻找未在会话 0 中运行的进程的令牌。当您将其进程 ID 作为 OpenProcessToken 的参数时。比 CreateProcessAsUser 将在同一个会话中创建进程(并且可能与您选择的进程具有相同的凭据);
问题是我无法获得使用该函数的大多数进程的任何详细信息:QueryFullProcessImageName - 因为它有一个错误,并且它不适用于从包含空格的路径创建的进程(如 C: \Program 文件)和我猜该功能的另一个问题是,因为我正在使用用户凭据运行原始进程,所以我无法访问使用本地系统帐户运行的进程的信息。这很糟糕,因为我想将 winlogon.exe 作为我的进程(因为它表示新打开的会话)。
同样为了成功使用该技巧,您必须对系统的安全性进行一些尝试,以允许该过程要求提升安全性:我选择提升的目的是:SeDebugPrivilege - 用于查找有关正在运行的进程 SeAssignPrimaryTokenPrivilege - 为了使用我从用户会话进程(即 explorer.exe)中提取的令牌运行新进程 SeCreateTokenPrivilege - 我不知道是否需要它,但我还是这样做了,因为它听起来很相关。
为了成功提升此权限 - 您必须在 run->gpedit.msc 或 run->secpol.msc (在本地计算机策略\计算机配置\ Windows 设置\安全设置\LocalPolicies\用户权限分配)
将您的帐户添加到以下权限(与上述权限兼容):
创建令牌对象
调试程序
替换进程级别令牌
就是这样!:) 它一直在工作 顺便说一句,您可能想要禁用所有 UAC 的东西...我不知道它是否相关,但它使 2008 的工作变得不那么痛苦 - 不再有烦人的弹出窗口。