2010/08/12

他プロセスのコマンドラインを取得

NILScriptのProcessオブジェクトには、他のプロセスのコマンドライン文字列を取得する「commandline」プロパティが用意されています。
これを使用すれば、特定のファイルを開いているプロセスを強制終了するなどの機能も簡単に実現できるでしょう。

Windowsには、他プロセスのコマンドラインを取得するAPIが用意されていないため、commandlineの取得は特殊な方法で実現されています。
自プロセスのコマンドライン文字列を取得するのに使う「GetCommandLine」というAPIの関数アドレスが、同一環境上の全てのプロセスで一定であることを利用して、「ReadProcessMemory」というAPIで対象プロセスのメモリ内容を取得し、そこからコマンドライン文字列が格納されているアドレスを辿って読み取るのです。
ただし、UAC環境下で別の権限で実行されているプロセスなどのコマンドライン文字列は取得できません。これはWindowsVista以降のタスクマネージャに追加されたコマンドライン文字列表示機能でも同様のようです。

0 件のコメント:

コメントを投稿