Verwenden von IoCompletion-Routinen
Übergeordnete Treiber, die auf IRP-spezifischer Basis überwachen, wie Treiber auf niedriger ebener Ebene bestimmte Anforderungen ausgeführt haben, können eine oder mehrere IoCompletion-Routinen aufweisen. Übergeordnete Treiber, die IRPs zum Senden von Anforderungen an niedrigere Treiber zuweisen, müssen über eine IoCompletion-Routine verfügen.
Die DispatchRead - oder DispatchWrite-Routine eines Treibers der höchsten Oder mittleren Ebene legt höchstwahrscheinlich eine IoCompletion-Routine für einen IRP fest, da Treiber auf niedrigerer Ebene Übertragungsanforderungen asynchron verarbeiten müssen.
Der Treiber der niedrigsten Ebene in einem Treiberstapel kann keine IoCompletion-Routinen registrieren.
Treiber registrieren in der Regel keine IoCompletion-Routinen für IRPs, die synchronen E/A-Vorgängen zugeordnet sind. Für instance kann die DispatchDeviceControl-Routine eines übergeordneten Treibers einen IRP mithilfe von IoBuildDeviceIoControlRequest zuordnen. In diesem Fall registriert die Dispatchroutine in der Regel keine IoCompletion-Routine , da Gerätesteuerungsanforderungen in der Regel synchron behandelt werden. Stattdessen kann der Treiber ein Ereignisobjekt zuordnen und initialisieren, und seine DispatchDeviceControl-Routine kann warten, bis ein Ereignis initialisiert wird, wenn es für vom Treiber zugewiesene IRPs sendet. In der Regel registriert ein Treiber auf höherer Ebene aus dem gleichen Grund keine IoCompletion-Routine für eine IRP, die IoBuildSynchronousFsdRequest zugeordnet ist.
Dieser Abschnitt enthält die folgenden Themen: