そのため、Windows Server 2008 を搭載したサーバーで LoadLibrary と GetProcAddress wtsapi32.dll を使用して WTSQueryUserToken() を呼び出したいと思います。実際にサーバーまで歩いてこのプログラムを実行すると、問題なくファイルを明示的に読み込むことができます。ただし、Mstsc.exe でサーバーにアクセスして同じことを行うと、GetLastError() からのエラー コード 2 で GetProcAddress() が失敗します。wtsapi32.dll はリモート デスクトップ サービス API と関係がありますが、この問題を追跡する方法がわかりません。どんなヒントでも本当に感謝します。前もって感謝します。
編集:
私が本当に困っていることについて、別の考えが出てくることがわかりました。
したがって、wtsapi32.dll は、サーバーで Mstsc.exe を実行した場合でも読み込まれます。
実際の問題は、WTSQueryUserToken() が常に失敗し、サーバーを Mstsc.exe したときにのみFALSE が返されることです。サーバーのオペレーティング システムは 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)
探しているものとは何の関係もなかったので、質問のタイトルを変更しました。
ありがとう。