2

私が理解しているように、DEVICE_OBJECT には AttachedDevice メンバー (LowerDevice メンバーではない) があるため、WDM デバイスのデバイス スタックを下から上にのみ繰り返すことができます。幸いなことに、AddDevice コールバックは PhysicalDeviceObject を受け取るので、スタック全体を反復処理できます。

フィルター ドライバー内から、特定のデバイス オブジェクトを既にフィルター処理しているかどうかを判断しようとしています。(これには正当な理由があるとしましょう。ご容赦ください。) 私のアイデアは、スタック内のすべての DEVICE_OBJECT を調べて、その DriverObject メンバーを私のものと比較することでした。

IoGetAttachedDeviceReference の存在から判断すると、AttachedDevice にアクセスするだけでは安全ではないと思います。デバイスが突然なくなるリスクがあるからです。ただし、IoGetAttachedDeviceReference を使用すると、スタックの一番上に直接移動できます。これは私にとっては良くありません。

では、デバイス スタックを反復処理する安全な方法はありますか?

4

1 に答える 1

4

スタックが破棄されないことを何らかの方法で保証できない限り (たとえば、スタックを参照するアクティブなファイル オブジェクトがある場合)、AttachedDevice チェーンを安全に歩くことはできません。Win2K では、これがほぼ唯一のオプションです。

XP 以降では、実際には、スタックの一番上から下に移動する方法が推奨されます。これを行うには、IoGetAttachedDeviceReference を呼び出してから、IoGetLowerDeviceObject を呼び出します。

-スコット

于 2011-02-24T15:53:31.363 に答える