E/A-Modell für SCSI-Ports
Der SCSI-Porttreiber kommuniziert mit seinem Miniporttreiber über eine Reihe von Zeigern auf Miniporttreiber-Rückrufroutinen in der Dispatchtabelle und dem Treiberobjekt. Der Miniporttreiber ruft ScsiPortInitialize aus seiner DriverEntry-Routine auf, um die Dispatchtabelle und das Treiberobjekt des SCSI-Ports mit diesen Rückrufzeigern zu initialisieren. Ein solcher Rückrufzeiger ist der Einstiegspunkt für die Start-E/A-Routine des Miniporttreibers, die zum Verarbeiten von E/A-Anforderungen verwendet wird. Der Porttreiber weist diesen Zeiger dem DriverStartIo-Member des Treiberobjekts zu.
Wenn der SCSI-Port eine E/A-Anforderung von einem Treiber auf höherer Ebene empfängt, wird die Anforderung in eine interne Warteschlange eingereiht. Weitere Informationen zu den internen Warteschlangen des SCSI-Ports finden Sie unter Warteschlangenverwaltung des SCSI-Porttreibers.
Sobald das Zielgerät bereit ist, die nächste E/A-Anforderung zu empfangen, ruft der SCSI-Port IoStartPacket auf, wodurch wiederum der Miniporttreiber aufgerufen wird, startet die in DriverObject-DriverStartIo gespeicherte E/A-Rückrufroutine>. Informationen zum Betrieb und den erforderlichen Merkmalen der Start-E/A-Routine des Miniporttreibers finden Sie unter HwScsiStartIo-Routine des SCSI-Miniporttreibers.
Der SCSI-Port löst die IRQL des Prozessors aus, bevor die Start-E/A-Routine des Miniporttreibers aufgerufen wird, um Unterbrechungen zu maskieren und sicherzustellen, dass die Start-E/A-Routine synchronisierten Zugriff auf kritische Betriebssystem- und Treiberstrukturen hat.
Während der Fluss von E/A-Anforderungspaketen zwischen einem Speicherklassentreiber und dem SCSI-Porttreiber asynchron ist, ist der Fluss von E/A-Anforderungspaketen zwischen dem SCSI-Porttreiber und dem Zielgerät synchron. Der SCSI-Port verwendet ein internes Warteschlangensystem, das es Klassentreibern ermöglicht, neue E/A-Anforderungen an den SCSI-Port zu senden, bevor vorherige E/A-Anforderungen abgeschlossen sind. Der SCSI-Port sendet jedoch erst die nächste E/A-Anforderung an das Zielgerät, bis es eine Benachrichtigung vom Miniporttreiber erhält, dass der Miniporttreiber bereit ist, die nächste E/A-Anforderung zu empfangen. Der Miniporttreiber benachrichtigt den SCSI-Port durch einen Aufruf der ScsiPortNotification-Bibliotheksroutine .
Der Storport Driver bietet ein flexibleres E/A-Modell, insbesondere im Hinblick auf die Maskierung von Interrupts. Informationen zu den Unterschieden zwischen dem Storport-E/A-Modell und dem SCSI-Port-E/A-Modell finden Sie unter Storport-E/A-Modell.