銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

リモート接続先で接続元の情報を C# で取得する

リモート接続先で起動するアプリで、接続元の情報を取得したい事案が発生しました。 そんなときはこの関数を使えばよさそうです*1

WTSQuerySessionInformation 関数

DllImportすれば C# でも書けますね、ということで書いてみました。sessionId は WTS_CURRENT_SESSION を指定すれば自分自身のセッション情報を取得できるのですが、これは uint.MaxValue のようです。

Retrieve Terminal Server session information.

若干面倒なのは、WTSInfoClass で指定した値に応じて ppBuffer が示す変数の構造が変わることです。そのため、サンプルでは WTSClientAddressWTSClientName の時のパターンを書いています。WTSClientAddressの時の構造体はここに情報があります。

WTS_CLIENT_ADDRESS structure (Windows)

また、自分自身以外のすべてのセッション情報を取得したい場合のサンプルも書いています。これはこの関数を使います。

WTSEnumerateSessions 関数

というやや面倒な処理が初めての DllImport 体験でした。

*1:アプリをUAC昇格して起動することで権限的な問題もなさそう