Dispatchroutinen des Speicherklassentreibers
Klassentreiber DRIVER_DISPATCH und DispatchClose-Routinen haben in der Regel keine gerätespezifischen Anforderungen. Die meisten Speicherklassentreiber sind Zwischentreiber. Ihre Dispatchroutinen geben nur STATUS_SUCCESS zurück, um anzugeben, dass ein bestimmtes Geräteobjekt vorhanden ist, sodass Treiber auf höherer Ebene und indirekt Benutzermodusanwendungen das Gerät für E/A öffnen und das Gerät anschließend schließen können.
Die Klassentreiberroutinen DispatchDeviceControl und DispatchInternalDeviceControl müssen resident sein; Das heißt, sie können nicht ausgelagert werden oder teil des Pageable-Image-Abschnitts eines Treibers sein. Abhängig von der IOCTL einer bestimmten Anforderung kann eine solche Dispatchroutine eine ausgelagerte Routine aufrufen oder auf einen Aufruf von einem Synchronisierungs- oder Benachrichtigungsobjekt warten (wodurch der ausführende Thread blockiert wird), aber die Dispatchroutine muss in der Lage sein, eine unbekannte IOCTL an DISPATCH_LEVEL zu übergeben.
Ein Speicherklassentreiber muss über eine DispatchPnP-Routine verfügen, damit Anforderungen das Gerät starten, beenden und entfernen und auf andere PnP-Anforderungen reagieren können, z. B. die Benachrichtigung, dass sich das Gerät im Pagingpfad befindet. Ausführliche Informationen zur Behandlung einer PnP-Startanforderung finden Sie unter Behandeln von PnP-Start in einem Speicherklassentreiber. Ausführliche Informationen zur Behandlung anderer PnP-Anforderungen finden Sie unter Behandeln von PnP-Anforderungen an Speicherperipheriegeräte.
Ein Speicherklassentreiber muss auch über eine DispatchPower-Routine verfügen, damit Anforderungen den Energiezustand seines Geräts festlegen können. Weitere Informationen finden Sie unter Behandeln von Stromanforderungen an Speicherperipheriegeräte.
Ein Speicherklassentreiber muss über eine DispatchShutdown-Routine und möglicherweise über eine DispatchFlushBuffers-Routine verfügen, wenn sein Gerät Daten intern zwischenspeichert, wenn sein Gerät möglicherweise an einen Bus angefügt ist, der von einem HBA gesteuert wird, der Daten intern zwischenspeichert, oder wenn ein Dateisystem über dem Klassentreiber liegt. Um die Datenintegrität aufrechtzuerhalten, sollte ein solcher Cache auf das Gerät geleert werden, bevor das System heruntergefahren wird.
Weitere Informationen zu allgemeinen Anforderungen für Dispatchroutinen finden Sie unter Schreiben von Dispatchroutinen .