私が理解しているように、DEVICE_OBJECT には AttachedDevice メンバー (LowerDevice メンバーではない) があるため、WDM デバイスのデバイス スタックを下から上にのみ繰り返すことができます。幸いなことに、AddDevice コールバックは PhysicalDeviceObject を受け取るので、スタック全体を反復処理できます。
フィルター ドライバー内から、特定のデバイス オブジェクトを既にフィルター処理しているかどうかを判断しようとしています。(これには正当な理由があるとしましょう。ご容赦ください。) 私のアイデアは、スタック内のすべての DEVICE_OBJECT を調べて、その DriverObject メンバーを私のものと比較することでした。
IoGetAttachedDeviceReference の存在から判断すると、AttachedDevice にアクセスするだけでは安全ではないと思います。デバイスが突然なくなるリスクがあるからです。ただし、IoGetAttachedDeviceReference を使用すると、スタックの一番上に直接移動できます。これは私にとっては良くありません。
では、デバイス スタックを反復処理する安全な方法はありますか?