0

プロセス ID のみを使用して、別のプロセスが開いた winstation の名前 (「winsta0」など) を取得しようとしています。MSDN でこれを行うものは見つかりません。独自のプロセスでのみ機能する GetProcessWindowStation() しかないようです。

何か案は?

更新: 多分これはパズルの一部です...

BOOL ProcessIdToSessionId( __in DWORD dwProcessId, __out DWORD *pSessionId );

4

2 に答える 2

1

おそらく、EnumWindowStations()、EnumDesktops()、EnumDesktopWindows()、およびGetWindowThreadProcessId()を使用して、目的のプロセスIDに一致するウィンドウが見つかるまで実行中のすべてのウィンドウを調べる必要があります。

于 2009-06-03T23:40:52.783 に答える
0

さて、私はAPI関数を見ましたが、あなたと同じ行き止まりになりました。Remyの提案は、ターゲットプロセスが1つ以上のトップレベルウィンドウを作成する限り機能するはずです。次の、クレイジーなアイデアも私に思い浮かびました。

  1. VirtualAllocEx()を使用して、ターゲットプロセスに実行可能メモリを割り当てます
  2. WriteProcessMemory()を使用して、そのメモリにコードを書き込みます
  3. CreateRemoteThread()を使用して、そのプロセスでコードを実行します

挿入されたコードはGetProcessWindowStation()を呼び出し、IPCメカニズムを使用してプロセスに送り返します。取得したら、VirtualFreeEx()を使用して、ターゲットプロセスの元のアドレス空間を復元します。別のユーザーのプロセスでこれを使用すると、いくつかの追加の問題が発生しますが、管理者として実行している場合でも機能するはずです。

于 2009-06-04T13:15:58.603 に答える