2009-05-29 26 views
0

プロセスIDのみを使用して別のプロセスが開いているwinstationの名前(たとえば "winsta0")を取得しようとしています。私はMSDNでこれを行うものは何も見つかりません。彼らはGetProcessWindowStation()を持っているように見えますが、これはあなた自身のプロセスでのみ機能します。プロセスIDからWinstation名を取得

アイデア?

UPDATE: たぶんこれは...(DWORD dwProcessId __in 、DWORD * pSessionId __out )

BOOL ProcessIdToSessionIdパズルの一部です。

答えて

1

EnumWindowStations()、EnumDesktopWindows()、GetWindowThreadProcessId()を使用して、実行中のすべてのウィンドウを調べて、目的のプロセスIDと一致するウィンドウを探す必要があります。

0

まあ、私はAPI関数を見ていましたが、あなたと同じ致命的な終わりを打ちました。ターゲットプロセスが1つまたは複数のトップレベルウィンドウを作成する限り、Remyの提案は機能するはずです。以下、クレイジーなアイデアも、私に発生しました:

  1. を使用VirtualAllocEx()そのメモリ
  2. 利用CreateRemoteThread(にいくつかのコードを書くために)ターゲット・プロセス
  3. 使用WriteProcessMemory(にいくつかの実行可能なメモリを割り当てるために)そのプロセスでコードを実行するには

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

関連する問題