Freigeben über


Überprüfen des E/A-Stapelspeicherorts des Treibers

Ein Haupt-E/A-Funktionscode wird am E/A-Stapelspeicherort des Treibers für jeden eingehenden IRP festgelegt.

Die Dispatchroutine eines Treibers muss den E/A-Stapelspeicherort des Treibers für die IRP überprüfen, um zu bestimmen, was zu tun ist, wenn eine der folgenden Bedingungen erfüllt ist:

  • Die Dispatchroutine verarbeitet mehr als einen Haupt-E/A-Funktionscode.

  • Die Dispatchroutine muss eine Reihe von Nebenfunktionscodes für bestimmte Hauptfunktionscodes verarbeiten. IRPs mit Nebenfunktionscodes umfassen IRP_MJ_PNP und IRP_MJ_POWER sowie bestimmte IRPs, die der SCSI-Porttreiber und Dateisystemtreiber verarbeiten müssen.

  • Die Dispatchroutine eines Gerätetreibers oder eines eng gekoppelten Treibers auf höherer Ebene verarbeitet IRP_MJ_DEVICE_CONTROL - oder IRP_MJ_INTERNAL_DEVICE_CONTROL-Anforderungen , denen ein Satz von E/A-Steuercodes zugeordnet ist.

Um einen Zeiger auf den E/A-Stapelspeicherort eines Treibers abzurufen, ruft seine Dispatchroutine IoGetCurrentIrpStackLocation auf.

Die Verteilungsroutinen von Treibern auf höherer Ebene rufen immer IoGetCurrentIrpStackLocation und ioGetNextIrpStackLocation auf, um einen Zeiger auf den E/A-Stapelspeicherort des nächstniedrigen Treibers für IRPs zu erhalten, die sie für den nächstniedrigen Treiber eingerichtet haben, wenn IRPs den Treiberstapel weiter unten übergeben.

Die DispatchDeviceControl-Routine oder DispatchInternalDeviceControl-Routine eines Gerätetreibers oder möglicherweise der eng gekoppelten Klassentreiber muss bestimmen, welcher E/A-Steuerungscode am E/A-Stapelspeicherort des Treibers unter Parameters.DeviceIoControl.IoControlCode für jede Anforderung festgelegt ist. Der E/A-Steuerungscode befindet sich im E/A-Stapel des Treibers.

In den meisten Fällen übergibt die DispatchDeviceControl - oder DispatchInternalDeviceControl-Routine eines Treibers auf höherer Ebene einfach eine IRP_MJ_DEVICE_CONTROL - oder IRP_MJ_INTERNAL_DEVICE_CONTROL-Anforderung an den nächstniedrigen Treiber, nachdem der Stapelspeicherort im IRP eingerichtet wurde. SCSI-Klassentreiber müssen jedoch bestimmte SCSI-Port-E/A-Steuercodes überprüfen, damit sie den E/A-Stapelspeicherort des SCSI-Porttreibers ordnungsgemäß einrichten können, bevor diese Anforderungen übergeben werden.