次の API 呼び出しを使用して、ターミナル サーバー セッションでリモート クライアントの名前を特定しています。
ret = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION,
WTS_INFO_CLASS.WTSClientName, buffer, bufferLen)
通常、アプリケーションがターミナル サーバー セッションで実行されていないbuffer
場合、呼び出しは成功し (ret != 0)、単に null ポインターを返します。したがって、これは予想される動作であると考えました。
しかし、ある顧客のマシンでは、関数が失敗し始め (ret == 0)、GetLastError
5: アクセスが拒否されました。(いつものように、顧客は自分のシステム構成はまったく変更されていないと主張しています。)
だから、私の質問は次のとおりです。
- 非ターミナル サービス マシン (たとえば、「通常の」Windows 7 PC など) で WTSClientName をクエリすると、どのような動作が予想されますか?
- このエラー コードが返される理由は何ですか? テスト マシンでは、ユーザーが管理者権限を持っていなくても、関数呼び出しは常に期待どおりに動作することに注意してください (成功し、バッファーが空になります)。
これが関連しているかどうかはわかりませんが、Web アプリケーション内から関数を呼び出すことで、この問題 (エラー 5) を再現できます。ただし、この場合はそうではありません (通常の Windows アプリケーションです)。