C++WTSQueryUserToken函数错误
C++ WTSQueryUserToken Function Error
我正试图让我的服务以用户身份创建一个进程,但我必须首先获得令牌。现在,由于某种原因,My函数不断返回错误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错误!
也许WTSGetActiveConsoleSessionId
没有返回有效的会话id?尝试WTSEnumerateSessions
获取活动会话:
WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSessionInfo, &dwCount);
int dataSize = sizeof(WTS_SESSION_INFO);
// look over obtained list in search of the active session
for (DWORD i = 0; i < dwCount; ++i)
{
WTS_SESSION_INFO si = pSessionInfo[i];
if (WTSActive == si.State)
{
// If the current session is active – store its ID
dwSessionId = si.SessionId;
break;
}
}
// Get token of the logged in user by the active session ID
BOOL bRet = WTSQueryUserToken(dwSessionId, currentToken);
在这里可以找到源代码和完整的代码示例。
相关文章:
- 链接器错误:函数的多个定义
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:函数声明符之后的预期函数体
- C 错误 - 函数不能超载
- 如何修复传递参数时调用错误函数的主函数?(C++)
- 错误:函数调用中有两个参数
- 错误:函数不是“类”的静态数据成员 - C++
- C ,G 编译错误函数
- CMake 解析错误函数缺少结尾")"。而是找到带有文本的未终止字符串")
- C++ 错误 函数 2 的多重定义
- 错误:函数调用中从int到int(*)[4]的转换无效
- C++14 自动扣除错误:函数返回一个数组
- 视觉C++错误:函数必须返回一个值
- 错误:函数声明中的两种或多种数据类型
- 错误:函数未在作用域中声明
- rtw_android.c错误:函数“strnicmp”的隐式声明[-Weror=隐式函数声明]
- 错误:函数中的return语句没有值,返回“void*”[-fpermission]
- 简单程序中的链接器错误:函数的多重定义
- 错误:函数参数太多
- 错误:函数__tmaincrtstartup中引用的未解析的外部符号_main