Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit Ausnahme von Dateisystemtreibern verfügt ein Treiber auf höherer Ebene in der Regel nicht über interne Treiberwarteschlangen für IRPs. Eine solche DispatchReadWrite-Routine eines Treibers kann IRPs mit gültigen Parametern an niedrigere Treiber übergeben, möglicherweise nach dem Einrichten der IoCompletion-Routine , wie unter Übergeben von IRPs für den Treiberstapel beschrieben.
Die DispatchReadWrite-Routine eines SCSI-Klassentreibers ist jedoch für das Aufteilen großer Übertragungsanforderungen verantwortlich, bevor ein IRP mit dem Hauptfunktionscode IRP_MJ_READ oder IRP_MJ_WRITE an das SCSI-Port/Miniport-Treiberpaar gesendet wird. Weitere Informationen finden Sie unter Storage Class Driver's SplitTransferRequest Routine.
Wenn ein höherer Treiber einen oder mehrere IRPs zuweist, die er in seiner DispatchReadWrite-Routine für den nächstniedrigeren Treiber einrichtet, um eine bestimmte Anzahl von Teilübertragungen anzufordern, muss die DispatchReadWrite-Routine mit jedem vom Treiber zugewiesenen IRP IoSetCompletionRoutine aufrufen. Der Treiber muss seine IoCompletion-Routine registrieren, um zu verfolgen, wie viele Daten in jedem Teilübertragungsvorgang übertragen werden, damit die IoCompletion-Routine alle vom Treiber zugewiesenen IRPs freigeben und schließlich die ursprüngliche Anforderung abschließen kann.
Wenn der zugrunde liegende Treiber ein Wechselmediengerät steuert, müssen alle vom Treiber auf höherer Ebene zugewiesenen IRPs über einen Threadkontext verfügen. Um einen Threadkontext einzurichten, muss der Treiber das Irp-Tail.Overlay.Thread in jedem neu zugeordneten IRP aus dem Wert im IRP für eingehende Übertragungen festlegen. Weitere Informationen finden Sie unter Unterstützen von Wechselmedien.
Wenn der zugrunde liegende Gerätetreiber einen IRP für eine partielle Übertragung mit einem Fehler zurückgibt, kann die IoCompletion-Routine entweder die Teilübertragungsanforderung wiederholen oder den ursprünglichen IRP mit seinem I/O-Statusblock, der mit dem zurückgegebenen Fehler versehen ist, abschließen, nachdem alle vom Treiber höherer Ebene zugewiesenen IRPs und Speicher freigegeben wurden.
Wenn die DispatchReadWrite-Routine eines höheren Levels Speicher für Teilübertragungen zuweist und auf diese Zuweisung durch die IoCompletion-Routine des Treibers (oder durch den darunterliegenden Gerätetreiber) zugegriffen wird, muss die DispatchReadWrite-Routine diesen Speicher aus einem nicht ausgelagerten Pool zuordnen.