Freigeben über


StartIo-Routinen in Higher-Level-Treibern

Jeder Treiber auf höherer Ebene kann über eine StartIo-Routine verfügen. Es ist jedoch unwahrscheinlich, dass ein solcher Treiber 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 in die Warteschlange eingereiht werden, indem IoStartPacket aus den Dispatch-Xxx-Routinen des Treibers und IoStartNextPacket aus den IoCompletion-Routinen aufgerufen werden, wodurch IRPs einzeln über die StartIo-Routine verarbeitet werden.

  • Der E/A-Durchsatz des Treibers könnte in Zeiten hoher E/A-Nachfrage spürbar langsamer werden, da die StartIo-Routine zu einem Engpass werden kann.

  • Die StartIo-Routine des Treibers ruft IoCallDriver mit jedem IRP bei IRQL = DISPATCH_LEVEL auf, wodurch die Dispatchroutinen aller niedrigeren Treiberebenen auch bei IRQL = DISPATCH_LEVEL ausgeführt werden. Dies schränkt den Satz von Supportroutinen ein, die niedrigere Treiber in ihren Dispatchroutinen aufrufen können. Da die meisten Treiberautoren davon ausgehen, dass die Dispatchroutinen ihrer Fahrer bei IRQL < DISPATCH_LEVEL ausgeführt werden, ist es unwahrscheinlich, dass der Treiber auf höherer Ebene mit vielen vorhandenen Treibern auf niedrigerer Ebene interoperabel ist.

  • Die StartIo-Routine reduziert den Gesamtsystemdurchsatz, da sie und die Dispatchroutinen aller Treiber auf niedrigerer Ebene in ihrer Kette mit IRQL = DISPATCH_LEVEL ausgeführt werden.

    Weitere Informationen zu den IRQLs, unter denen Standardtreiberroutinen ausgeführt werden, finden Sie unter Verwalten von Hardwareprioritäten.

Keiner der vom System bereitgestellten Übergeordneten Treiber verfügt über eine StartIo-Routine , da er die IRP-Verarbeitung für den Treiber selbst, für alle Treiber darüber und darunter und für das System insgesamt verlangsamen kann.

Die meisten Treiber auf höherer Ebene senden IRPs einfach von ihren Dispatchroutinen an Treiber niedrigerer Ebene und führen alle erforderlichen sauber-Up-Verarbeitung 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 liegender Geräte wie den SCSI-Porttreiber zu halten. Weitere Informationen finden Sie unter Warteschlangen und Aufheben der Warteschlange für IRPs.