デバイス オブジェクトの検証失敗

多くのドライバーは、IoCreateDevice を呼び出 すことによって、複数の種類のデバイス オブジェクトを作成します。 ドライバーによっては、ドライバーが FDO を作成する前であっても、ドライバーと通信するアプリケーションを許可する DriverEntry ルーチンでコントロール デバイス オブジェクトを作成します。 たとえば、ファイル システム ドライバーは、IoRegisterFileSystem を使用してファイル システムとして自身を登録するとき、ファイル システムの通知を処理するデバイス オブジェクトを作成します。

ドライバーでは、作成するすべてのデバイス オブジェクトに対する IRP_MJ_CREATE 要求の準備ができている必要があります。 ドライバーは、成功ステータスで要求を完了すると、作成されたファイル オブジェクトでユーザーがアクセスできる I/O 要求を受け取る必要があります。 そのため、複数のデバイス オブジェクトを作成するすべてのドライバーは、各 I/O 要求によって指定されるデバイス オブジェクトをチェックする必要があります。

たとえば、ドライバーが DriverEntry でコントロール デバイス オブジェクト全体を作成し、その AddDevice ルーチンに別のデバイス オブジェクトのセットを作成するとします。 AddDevice ルーチンは、下位レベルのドライバーに関する情報を使用してデバイス拡張機能を初期化しますが、コントロール デバイス オブジェクトにはこの情報が含まれていないとします。 この場合、すべてのディスパッチ ルーチンは、受信した各デバイス オブジェクトを慎重にチェックする必要があります。 そうしないと、デバイス拡張機能情報を使用しようとしたときにドライバーがクラッシュする可能性があります。