gpt4 book ai didi

winapi - 无法在远程 session 中获取用户 token

转载 作者:行者123 更新时间:2023-12-02 05:15:32 24 4
gpt4 key购买 nike

因此,我想 LoadLibrary 和 GetProcAddress wtsapi32.dll 在我的 Windows Server 2008 服务器中调用 WTSQueryUserToken()。当我实际走到服务器并执行该程序时,可以毫无问题地显式加载该文件。但是,当我 Mstsc.exe 访问我的服务器并执行相同的操作时,它最终导致 GetProcAddress() 失败,并显示来自 GetLastError() 的错误代码 2。wtsapi32.dll 确实与远程桌面服务 API 有关系,但我不知道如何追踪这个问题。任何提示将不胜感激。提前致谢。

编辑:

事实证明,我对我真正遇到的问题有了另一种想法。

所以 wtsapi32.dll 在任何情况下都会加载,即使我在服务器上执行 Mstsc.exe 也是如此。

真正的问题是当我在服务器上执行 Mstsc.exe 时,WTSQueryUserToken() 总是失败并返回 FALSE ONLY。我的服务器操作系统是 Windows Server 2008。我使用 Windows 7 的桌面上的 WTSQueryUserToken() 工作正常。

我的代码在这里。

HANDLE hTokenImperson = nullptr;

HMODULE hModWtsapi32 = LoadLibrary(TEXT("wtsapi32.dll"));
HMODULE hModKernel32 = LoadLibrary(TEXT("kernel32.dll"));
auto lpfnWTSQueryUserToken = reinterpret_cast<bool(*)(ULONG, PHANDLE)>(GetProcAddress(hModWtsapi32, "WTSQueryUserToken"));
auto lpfnWTSGetActiveConsoleSessionId = reinterpret_cast<DWORD(*)(void)>(GetProcAddress(hModKernel32, "WTSGetActiveConsoleSessionId"));

// dwSessionId is not 0.
dwSessionId = lpfnWTSGetActiveConsoleSessionId();

// FALSE returns only when I do mstsc.exe.
// Works well when I walk to my server and execute this application.
lpfnWTSQueryUserToken(dwSessionId, &hTokenImperson)

我已经重命名了问题的标题,因为它与我正在寻找的内容没有任何关系。

谢谢。

最佳答案

WTSGetActiveConsoleSessionId 返回当前附加到物理控制台的 session (MSDN)。如果您需要为远程 session 获取 token ,您可以调用 WTSEnumerateSessions首先查找事件 session 。

BOOL WTSEnumerateSessions(
_In_ HANDLE hServer,
_In_ DWORD Reserved,
_In_ DWORD Version,
_Out_ PWTS_SESSION_INFO *ppSessionInfo, // <------
_Out_ DWORD *pCount
);

检查 PWTS_SESSION_INFO 结构的状态

获取事件 session 的 session ID 后,调用 WTSQueryUserToken 获取访问 token 。

关于winapi - 无法在远程 session 中获取用户 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com