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.
Jeder Treiber auf höherer Ebene kann über eine StartIo-Routine verfügen. Ein solcher Treiber ist jedoch unwahrscheinlich, dass er mit vorhandenen Treibern auf niedrigerer Ebene interoperabel ist und wahrscheinlich schlechte Leistungsmerkmale aufweist.
Eine StartIo-Routine in einem Treiber auf höherer Ebene hat die folgenden Auswirkungen:
Eingehende IRPs können durch Aufrufen von IoStartPacket aus den DispatchXxx-Routinen des Treibers und IoStartNextPacket aus den IoCompletion-Routinen in die Warteschlange gestellt werden, wodurch IRPs jeweils einzeln über die StartIo-Routine verarbeitet werden.
Der E/A-Durchsatz des Fahrers könnte in Zeiten schwerer E/A-Nachfrage spürbar langsamer werden, da seine StartIo-Routine zu einem Engpass werden kann.
Die StartIo-Routine des Treibers ruft IoCallDriver mit jedem IRP bei IRQL = DISPATCH_LEVEL auf, wodurch alle Verteilerroutinen auf niedrigerer Ebene auch bei IRQL = DISPATCH_LEVEL ausgeführt werden. Dadurch wird die Menge der Supportroutinen eingeschränkt, die Treiber niedrigerer Ebenen in ihren Dispatch-Routinen aufrufen können. Da die meisten Treiberentwickler davon ausgehen, dass die Dispatch-Routinen ihrer Treiber auf IRQL < DISPATCH_LEVEL ausgeführt werden, ist es wohl eher unwahrscheinlich, dass der höherstufige Treiber mit vielen vorhandenen Treibern auf niedrigerer Ebene kompatibel ist.
Die StartIo-Routine reduziert den gesamten Systemdurchsatz, da sie und die Verteilerroutinen aller Treiber auf niedrigerer Ebene in ihrer Kette unter IRQL = DISPATCH_LEVEL ausgeführt werden.
Weitere Informationen zu den IRQLs, bei denen Standardtreiberroutinen ausgeführt werden, finden Sie unter Verwalten von Hardwareprioritäten.
Keiner der vom System bereitgestellten Treiber auf höherer Ebene verfügt über eine StartIo-Routine , da sie die IRP-Verarbeitung für den Treiber selbst, für alle Treiber darüber und darunter sowie für das System insgesamt verlangsamen kann.
Die meisten Treiber auf höherer Ebene senden einfach IRPs an Treiber auf niedrigerer Ebene aus ihren Dispatch-Routinen und führen alle erforderlichen Bereinigungsverarbeitungen in ihren IoCompletion-Routinen durch.
Treiber auf höherer Ebene können jedoch interne Warteschlangen für IRPs einrichten, die bestimmte Arten von Vorgängen anfordern, oder interne Warteschlangen einrichten, um IRPs für eine Reihe heterogener zugrunde liegenden Geräte wie den SCSI-Porttreiber gebunden zu halten. Weitere Informationen finden Sie unter Queuing und Dequeuing IRPs.