リモート接続先で起動するアプリで、接続元の情報を取得したい事案が発生しました。 そんなときはこの関数を使えばよさそうです*1。
DllImportすれば C# でも書けますね、ということで書いてみました。sessionId は WTS_CURRENT_SESSION を指定すれば自分自身のセッション情報を取得できるのですが、これは uint.MaxValue
のようです。
Retrieve Terminal Server session information.
若干面倒なのは、WTSInfoClass
で指定した値に応じて ppBuffer が示す変数の構造が変わることです。そのため、サンプルでは WTSClientAddress
と WTSClientName
の時のパターンを書いています。WTSClientAddress
の時の構造体はここに情報があります。
WTS_CLIENT_ADDRESS structure (Windows)
また、自分自身以外のすべてのセッション情報を取得したい場合のサンプルも書いています。これはこの関数を使います。
というやや面倒な処理が初めての DllImport 体験でした。
*1:アプリをUAC昇格して起動することで権限的な問題もなさそう