7

大学の最終学年のプロジェクトで C# レジストリ モニターを作成しましたが、それを Microsoft ProcessMonitor アプリケーション (正確な名前は思い出せませんが、MSoft に買収された会社でした) と比較したところ、レジストリ コールをキャプチャしていませんでした。 .

これは、私が C# ラッパーを使用していたためで、ユーザー モードのレジストリ アクセスのみをキャッチしていたのでしょうか?

このラッパーを使用しました: http://www.codeproject.com/KB/DLL/EasyHook64.aspx

カーネル モードのレジストリ アクセスをキャッチするには、C++ で記述する必要がありますか?

4

2 に答える 2

11

Process Monitorは、カーネル ドライバーまたは ETW (以下を参照) を使用して、レジストリ イベントをキャプチャします。Process Monitor が一部のデータ (ネットワーク情報など) に ETW を使用していることは知っています。

EasyHook のような API フックまたは迂回メカニズムは、通常、Win32 API レベル ( ADVAPI32.dllRegSetValueなど) で動作します。RegCreateKeyExこのため、言及した制限があります。ユーザーモードのレジストリアクセスのみがキャプチャされます。さらに、API フックは通常、プロセスごとに行われるため、データを収集する各プロセスに自分自身を挿入する必要があります。システム全体のすべてのアクセスを本当にキャプチャしたい場合は、プロセスの作成も監視する必要があります。

Event Tracing for Windows (ETW) は、(比較的言えば) すべてのレジストリ アクセスをキャプチャする簡単な方法です。ETW の背後にある基本的な考え方は、OS、ランタイム、ライブラリ、および日常的なアプリケーションの開発者でさえ、特定のインストルメンテーションをコードに追加して、興味深いイベントやシナリオに関するデータをログに記録できるというものです。このトレースはオーバーヘッドが少なく、簡単に収集できます。ETW が登場してからしばらく経ちましたが、Vista 以降のカーネル全体で注目を集めています。現在、ほとんどすべての主要なカーネル サブシステムに ETW が装備されています。また、Windows イベント ログの基礎にもなっています。

ETW にはかなりの負担があり、一部の分野では実質的なドキュメントが不足していますが、興味がある場合は、次を確認してください。

カーネル モードのレジストリ アクセスをキャッチするには、C++ で記述する必要がありますか?

いいえ、上記のTraceEventライブラリを使用すると、C# を使用して、システム全体のカーネル モードおよびユーザー モードのレジストリ アクセスをキャプチャして分析できます。

于 2011-01-29T04:43:21.597 に答える
2

カーネル モードのレジストリ アクセスを取得するには、C++ でドライバーを作成する必要があります。それ以外の方法はありません。Process Monitor はドライバーであるため、ユーザー アクセスとカーネル アクセスの両方をキャプチャできます。

Regmon と Filemon の古いバージョンは、次の場所からダウンロードできます。

http://www.decuslib.com/decus/vmslt00a/nt/filemon.htm

http://www.decuslib.com/decus/vmslt00a/nt/regmon.htm

于 2011-02-11T21:06:04.277 に答える