プロセス ID のみを使用して、別のプロセスが開いた winstation の名前 (「winsta0」など) を取得しようとしています。MSDN でこれを行うものは見つかりません。独自のプロセスでのみ機能する GetProcessWindowStation() しかないようです。
何か案は?
更新: 多分これはパズルの一部です...
BOOL ProcessIdToSessionId( __in DWORD dwProcessId, __out DWORD *pSessionId );
おそらく、EnumWindowStations()、EnumDesktops()、EnumDesktopWindows()、およびGetWindowThreadProcessId()を使用して、目的のプロセスIDに一致するウィンドウが見つかるまで実行中のすべてのウィンドウを調べる必要があります。
さて、私はAPI関数を見ましたが、あなたと同じ行き止まりになりました。Remyの提案は、ターゲットプロセスが1つ以上のトップレベルウィンドウを作成する限り機能するはずです。次の、クレイジーなアイデアも私に思い浮かびました。
挿入されたコードはGetProcessWindowStation()を呼び出し、IPCメカニズムを使用してプロセスに送り返します。取得したら、VirtualFreeEx()を使用して、ターゲットプロセスの元のアドレス空間を復元します。別のユーザーのプロセスでこれを使用すると、いくつかの追加の問題が発生しますが、管理者として実行している場合でも機能するはずです。