我正在尝试让我的服务以用户身份创建一个进程,但我必须首先获取 token 。现在由于某种原因,我的函数不断返回错误 87,即 ERROR_INVALID_PARAMETER。有人知道为什么吗?它已经困扰我几个小时了,从我所看到的参数是正确的。谢谢。
这是我的代码:
PHANDLE currentToken = 0;
ULONG id = WTSGetActiveConsoleSessionId();
printf("ULONG = %d", id);
// Get token of the logged in user by the active session ID
BOOL bRet = WTSQueryUserToken(id, currentToken);
if (bRet == false)
{
printf("ERROR: %d", GetLastError());
}
最佳答案
我按照如下方式解决了这个问题: 将 currentToken 定义为 HANDLE 而不是指针 (PHANDLE) 并将对其的引用传递给 WTSQueryUserToken 函数
PHANDLE currentToken = 0;
changes to:
HANDLE currentToken = 0;
还有...
BOOL bRet = WTSQueryUserToken(id, currentToken);
//Change this to:
BOOL bRet = WTSQueryUserToken(id, ¤tToken);
在此之后,我收到了 1314 - ERROR_PRIVILEGE_NOT_HELD 错误,但那是因为应用程序需要以用户“localsystem”身份运行,而唯一的方法是将其作为服务运行 - 超出了此答案的范围,我无论如何解决了87错误!
关于C++ WTSQueryUserToken 函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387939/