0

Windows 7 で NtQueryInformationProcess ()を使用して、(NtQueryInformationProcess() によって返される PEBのRTL_USER_PROCESS_PARAMETERSを介して) 別のプロセスのコマンド ラインを取得しています。

これは通常は問題なく動作しますが、同じ実行可能ファイルの複数のインスタンスが開始されると、コマンド ライン文字列はすべてのインスタンスで同じになります。つまり、常に最初に開始されたインスタンスのコマンド ラインになります。ただし、GetCommandLine() は、プロセスごとに正しいコマンド ラインを返します。

誰かがこれを確認または改ざんできますか?

4

1 に答える 1

1

おそらく見逃しているのは、PEB の各ポインターは、NtQueryInformationProcess を呼び出して PEB を取得したプロセスではなく、PEB のプロセスのアドレス空間にのみ関連するということです。ポインターを参照するには、ReadProcessMemory を使用する必要があります。そうしないと、プロセスが同様に配置される可能性が高いため、PEB のプロセスではなく、NtQueryInformationProcess 呼び出し元のコマンド ラインを読み取ることになります。

ポインター間接化の各レベルで NtQueryInformationProcess と ReadProcessMemory を使用すると、すべてのプロセスのコマンド ラインを正しく取得できることが確認できます。ソース コードの例については、 https://stackoverflow.com/a/13408150/1236546を参照してください。

于 2013-01-23T23:37:32.553 に答える