Freigeben über


IRP_MN_START_DEVICE

Alle PnP-Treiber müssen diese IRP verarbeiten.

Wert

0x00

Hauptcode

IRP_MJ_PNP

Sendebedingungen

Der PnP-Manager sendet diese IRP, nachdem er Hardwareressourcen zugewiesen hat, falls vorhanden, an das Gerät. Möglicherweise wurde das Gerät kürzlich aufgelistet und wird zum ersten Mal gestartet, oder das Gerät wird neu gestartet, nachdem es für die Ressourcenausgleichsüberprüfung beendet wurde.

Manchmal sendet der PnP-Manager eine IRP_MN_START_DEVICE an ein bereits gestartetes Gerät und stellt eine andere Gruppe von Ressourcen bereit, als das Gerät derzeit verwendet. Ein Treiber initiiert diese Aktion, indem er IoInvalidateDeviceState aufruft und auf die nachfolgende IRP_MN_QUERY_PNP_DEVICE_STATE Anforderung mit dem PNP_RESOURCE_REQUIREMENTS_CHANGED-Flag antwortet. Ein Bustreiber kann diesen Mechanismus beispielsweise verwenden, um eine neue Blende auf einer PCI-zu-PCI-Brücke zu öffnen.

Der PnP-Manager sendet diese IRP bei IRQL PASSIVE_LEVEL im Kontext eines Systemthreads.

Eingabeparameter

Das Parameters.StartDevice.AssignedResources-Element der IO_STACK_LOCATION-Struktur verweist auf eine CM_RESOURCE_LIST , die die Hardwareressourcen beschreibt, die der PnP-Manager dem Gerät zugewiesen hat. Diese Liste enthält die Ressourcen in roher Form. Verwenden Sie die Rohressourcen, um das Gerät zu programmieren.

Parameters.StartDevice.AssignedResourcesTranslated verweist auf eine CM_RESOURCE_LIST , die die Hardwareressourcen beschreibt, die der PnP-Manager dem Gerät zugewiesen hat. Diese Liste enthält die Ressourcen in übersetzter Form. Verwenden Sie die übersetzten Ressourcen, um den Interruptvektor, den E/A-Raum und den Kartenspeicher zu verbinden.

Ausgabeparameter

Keine

E/A-Statusblock

Ein Treiber legt Irp-IoStatus.Status> auf STATUS_SUCCESS oder auf einen entsprechenden Fehler status fest, z. B. STATUS_UNSUCCESSFUL oder STATUS_INSUFFICIENT_RESOURCES.

Wenn ein Treiber einige Zeit benötigt, um seine Startvorgänge für ein Gerät auszuführen, kann er die ausstehende IRP markieren und STATUS_PENDING zurückgeben.

Vorgang

Diese IRP muss zuerst vom übergeordneten Bustreiber für ein Gerät und dann von jedem höheren Treiber im Gerätestapel verarbeitet werden.

Als Reaktion auf diese IRP starten Treiber ein Gerät zum ersten Mal oder starten ein angehaltenes Gerät neu. Die genauen Vorgänge, die zum Starten eines Geräts erforderlich sind, variieren von Gerät zu Gerät, können jedoch das Einschalten des Geräts, die durchführung einer gerätespezifischen Initialisierung und das Verbinden des Interrupts umfassen.

Ein Treiber kann diese IRP in der Regel auf die gleiche Weise behandeln, unabhängig davon, ob er ein Gerät zum ersten Mal startet oder ein Gerät nach einem IRP_MN_STOP_DEVICE neu startet, es sei denn, ein Treiber muss den Gerätezustand bei einem Neustart nach einem Stopp wiederherstellen.

Unter Windows Vista und höheren Betriebssystemen wird empfohlen, dass Treiber immer den IRP_MN_START_DEVICE IRP verwenden und die Verarbeitung später abschließen. Diese Reihenfolge ermöglicht es dem System, Geräteneustarts asynchron zu verarbeiten. (Unter Betriebssystemen vor Windows Vista können Treiber STATUS_PENDING aus ihren Verteilungsroutinen zurückgeben, aber der PnP-Manager überschneidet den Geräteneustart nicht mit anderen Vorgängen.)

Weitere Informationen zum Behandeln eines Start-IRP finden Sie unter Starten eines Geräts.

Senden dieses IRP

Ist für das System reserviert. Treiber dürfen diese IRP nicht senden.

Anforderungen

Header

Wdm.h (einschließlich Wdm.h, Ntddk.h oder Ntifs.h)

Weitere Informationen

IRP_MN_STOP_DEVICE