Winapi 执行SetTokenInformation时出现错误1314

Winapi 执行SetTokenInformation时出现错误1314,winapi,Winapi,来自mingw的gcc版本4.5.2(gcc) 顺便说一句,忽略错误126 我的问题是: 为什么会出现错误1314 我想在不知道登录用户和密码的情况下,使用CreateProcessAsUser从服务启动交互式桌面中的程序。错误1314是“客户端未持有所需的权限” 从WTSQueryUserToken()docs(http://msdn.microsoft.com/en-us/library/aa383840.aspx): 要成功调用此函数,调用应用程序必须在LocalSystem帐户的上下文中

来自mingw的gcc版本4.5.2(gcc)

顺便说一句,忽略错误126

我的问题是: 为什么会出现错误1314


我想在不知道登录用户和密码的情况下,使用CreateProcessAsUser从服务启动交互式桌面中的程序。

错误
1314
是“客户端未持有所需的权限”

WTSQueryUserToken()
docs(http://msdn.microsoft.com/en-us/library/aa383840.aspx):

要成功调用此函数,调用应用程序必须在LocalSystem帐户的上下文中运行,并且具有SE_TCB_NAME权限

另外,您对
WTSQueryUserToken()
的调用应该如下所示:

session.exe
err001:126
err002:126
err003:126
err004:1314
err005:203
here we go
err006:87
您还需要适当的特权才能启用
SetTokenInformation()


底线是,您正在尝试执行Windows为高权限进程保留的某些操作,因此您需要确保您的进程配置为适当运行(可能是作为与常规非权限进程对话以进行用户交互的服务)。

实际上,我甚至直接在cmd中运行此程序,它仍然显示错误1314。我的意思是,即使我在当前活动登录桌面上启动的cmd.exe上运行它,我也得到了错误1314。我对这个特权感到困惑。如果你从cmd窗口启动,你的进程将在该cmd窗口的帐户下运行(该帐户将是登录的用户(除非你正在做一些特殊的事情,比如用“runas”启动cmd)。它几乎肯定不是在LocalSystem帐户下运行的。有关在LocalSystem下运行cmd的方法,请参阅(尽管如果这在最新版本的Windows上不起作用,我也不会感到太惊讶)。您可能还需要显式启用
SE_TCB_NAME
特权:Keith Brown的书,“编程Windows安全性”(),对所有这些东西都有很好的覆盖范围。但是它非常旧,所以我不确定它是否会因为MS在过去十年中所做的安全更改而有太多的漏洞。既然你可以用运费买到一个旧的/剩余的,我仍然推荐它。为什么我必须在LocalSystem帐户下运行它?我只想能够在登录用户的环境下使用CreateProcessAsUser()rt某些程序,该环境应为交互式桌面的会话和工作站。
session.exe
err001:126
err002:126
err003:126
err004:1314
err005:203
here we go
err006:87
WTSQueryUserToken(dwSessionId, &hTokenDup);