Windowsマシンで実行されているプログラム/プロセスを監視できる小さなアプリケーションを開発しようとしています.
プログラム/プロセスが実行されない場合は、ブロックする必要があります。アンチウイルスと同じように機能します。
これが基本的な考え方です。
OS にフックして、マシンで実行しようとしているすべてのプログラム/プロセスについて通知を受け取る方法を知りたいです。
Windowsマシンで実行されているプログラム/プロセスを監視できる小さなアプリケーションを開発しようとしています.
プログラム/プロセスが実行されない場合は、ブロックする必要があります。アンチウイルスと同じように機能します。
これが基本的な考え方です。
OS にフックして、マシンで実行しようとしているすべてのプログラム/プロセスについて通知を受け取る方法を知りたいです。
最も簡単な方法は、WMI を使用することです。特に Win32_ProcessStartTrace を監視します。これは Win32_Process よりも優れています。これは、イベントを使用するようにセットアップされているのに対し、Win32_Process はより CPU を集中的に使用するポーリングを必要とするためです。以下は、C# での実行方法です。まず、System.Management がプロジェクトのリファレンスとして設定されていることを確認してください。
public System.Management.ManagementEventWatcher mgmtWtch;
public Form1()
{
InitializeComponent();
mgmtWtch = new System.Management.ManagementEventWatcher("Select * From Win32_ProcessStartTrace");
mgmtWtch.EventArrived += new System.Management.EventArrivedEventHandler(mgmtWtch_EventArrived);
mgmtWtch.Start();
}
void mgmtWtch_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
{
MessageBox.Show((string)e.NewEvent["ProcessName"]);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mgmtWtch.Stop();
}
コードは、新しいプロセスを起動するたびにメッセージ ボックスを生成します。そこから、ホワイトリスト/ブラックリストを確認して適切に行動できます。
Win32-api SetWindowsHookExを定数 WH_GETMESSAGE でチェックして、新しいウィンドウが作成されているときにプログラムにコールバックを追加します。
http://pinvoke.net/default.aspx/user32.SetWindowsHookEx
詳細については、その API と WH_GETMESSAGE を Google で調べてください。
次の記事/コード ライブラリもチェックしてください: http://www.vbaccelerator.com/home/Vb/Code/Libraries/Hooks/vbAccelerator_Hook_Library/article.asp
リアルタイム通知を取得しようとはしていません。ただし、C#で実行中のプロセスを取得する方法は次のとおりです
using System.Diagnostics;
//Somewhere in your method
Process[] runningList = Process.GetProcesses();
foreach(Process p in runningList){
Console.WriteLine("Process: {0} ID: {1}", p.ProcessName, p.Id);
}
プロセスの次の小道具を使用することもできます