Asynchrones Behandeln von Übertragungen
Mit Ausnahme von Treibern der obersten Ebene verarbeiten alle Treiber IRP_MJ_READ - und IRP_MJ_WRITE-Anforderungen asynchron. Die Routinen DispatchRead und DispatchWrite in einem Treiber der höchsten Ebene können nicht darauf warten, dass Treiber auf niedrigerer Ebene die Verarbeitung einer asynchronen Lese- oder Schreibanforderung beenden. sie müssen eine solche Anforderung an niedrigere Fahrer weiterleiten und STATUS_PENDING zurückgeben.
Ebenso muss die DispatchReadWrite-Routine eines Gerätetreibers der niedrigsten Ebene die Übertragungsanforderung an andere Treiberroutinen übergeben, die Geräte-E/A-Anforderungen verarbeiten, und dann STATUS_PENDING zurückgeben.
Ein Treiber auf höherer Ebene muss manchmal IRPs für partielle Übertragungen einrichten und an niedrigere Treiber übergeben. Der Treiber auf höherer Ebene kann den ursprünglichen Lese-/Schreib-IRP nur abschließen, wenn seine Teilübertragungsanforderungen von den niedrigeren Treibern abgeschlossen wurden.
Beispielsweise ist die DispatchReadWrite-Routine eines SCSI-Klassentreibers erforderlich, um große Übertragungsanforderungen, die die übertragungsfunktionen des zugrunde liegenden HBA überschreiten, in eine Reihe von Teilübertragungsanforderungen aufzuteilen. Der Klassentreiber muss die Parameter in seinen IRPs für partielle Übertragung einrichten, damit die SCSI-Port-/Miniporttreiber jede Teilübertragungsanforderung in einem einzelnen DMA-Vorgang erfüllen können.
Andere Gerätetreiber, die DMA oder PIO verwenden, müssen möglicherweise auch große Übertragungsanforderungen für sich selbst aufteilen.
Weitere Informationen zur Verwendung von DMA und PIO finden Sie unter Eingabe-/Ausgabetechniken.