Behandeln von PnP-Start in einem Speicherklassentreiber
Ein Speicherklassentreiber führt eine gerätespezifische Initialisierung durch, wenn der PnP-Manager die DispatchPnP-Routine des Klassentreibers mit einer Startanforderung (IRP_MJ_PNP mit IRP_MN_START_DEVICE) aufruft. Die DispatchPnPnP-Routine des Speicherklassentreibers ruft entweder eine interne StartDevice-Routine auf oder implementiert die gleiche Funktionalität inline. Da Startanforderungen, die an eine FDO gesendet werden, zuerst vom niedrigsten Treiber im Stapel verarbeitet werden müssen, leitet die DispatchPnP-Routine des Speicherklassentreibers die Anforderung mit IoCallDriver an den nächstniedrigen Treiber weiter, bevor StartDevice aufgerufen wird. Wenn die Anforderung an eine PDO gesendet wurde, muss der Treiber die Anforderung vor der Behandlung nicht weiterleiten.
Die interne StartDevice-Routine eines Speicherklassentreibers richtet die Geräteerweiterung seiner FDO mit treiberbestimmten Daten ein, um E/A-Anforderungen für das Gerät zu verwalten. Weitere Informationen finden Sie unter Einrichten der Geräteerweiterung eines Speicherklassentreibers.
Eine StartDevice-Routine sollte alle Geräteschnittstellen aktivieren, die der Treiber in seiner AddDevice-Routine registriert hat. (Siehe Geräteschnittstellenklassen.) Es kann auch eine symbolische Verknüpfung für sein Geräteobjekt erstellen.
Nachdem der Start des unteren Geräts abgeschlossen ist, kann der Treiber davon ausgehen, dass sich das Gerät für die meisten Zwecke im D0-Energiezustand (vollständig aktiviert und betriebsbereit) befindet. Wenn das Gerät nicht vollständig eingeschaltet ist, stellt der Porttreiber Anforderungen in die Warteschlange, bis das Gerät bereit ist. Wenn die StartDevice-Routine des Treibers jedoch Vorgänge ausführen muss, die Eineninschaltstrom erfordern (z. B. zum Starten eines Datenträgerlaufwerks), muss der Treiber vor dem Ausführen des Vorgangs eine D0-Energieanforderung an den nächstniedrigen Treiber senden.
Ein Treiber eines Geräts vom Typ FILE_DEVICE_DISK oder FILE_DEVICE_MASS_STORAGE kann sich für die Leerlauferkennung registrieren und die Standardtimeouts für die Energierichtlinie für die Geräteklasse verwenden, indem er erhaltungs- und Leistungstimeoutwerte von -1 in seinem PoRegisterDeviceforIdleDetection-Aufruf angibt.
Weitere Informationen zur DispatchPnP-Routine eines Speicherklassentreibers finden Sie unter Behandeln von PnP-Anforderungen an Speicherperipheriegeräte. Weitere Informationen zum Behandeln von PnP-Startanforderungen finden Sie unter Starten eines Geräts.