Condividi tramite


IRP_MN_START_DEVICE

Tutti i driver PnP devono gestire questo IRP.

Valore

0x00

Codice principale

IRP_MJ_PNP

Data di invio

Il gestore PnP invia questo IRP dopo aver assegnato le risorse hardware, se presenti, al dispositivo. Il dispositivo potrebbe essere stato enumerato di recente e viene avviato per la prima volta oppure il dispositivo potrebbe essere riavviato dopo essere stato arrestato per il ribilanciamento delle risorse.

A volte il gestore PnP invia un IRP_MN_START_DEVICE a un dispositivo già avviato, fornendo un set diverso di risorse rispetto al dispositivo attualmente in uso. Un driver avvia questa azione chiamando IoInvalidateDeviceState e rispondendo alla richiesta di IRP_MN_QUERY_PNP_DEVICE_STATE successiva con il flag PNP_RESOURCE_REQUIREMENTS_CHANGED impostato. Un autista di bus può usare questo meccanismo, ad esempio, per aprire una nuova apertura su un bridge PCI-to-PCI.

Il gestore PnP invia questo IRP al PASSIVE_LEVEL IRQL nel contesto di un thread di sistema.

Parametri di input

Il membro Parameters.StartDevice.AllocateResources della struttura IO_STACK_LOCATION punta a un CM_RESOURCE_LIST che descrive le risorse hardware assegnate dal manager PnP al dispositivo. Questo elenco contiene le risorse in formato non elaborato. Usare le risorse non elaborate per programmare il dispositivo.

Parameters.StartDevice.AllocateResourcesTranslated punta a un CM_RESOURCE_LIST che descrive le risorse hardware assegnate dal gestore PnP al dispositivo. Questo elenco contiene le risorse in formato tradotto. Usare le risorse tradotte per connettere il vettore di interrupt, mappare lo spazio di I/O e mappare la memoria.

Parametri di output

Nessuno

Blocco dello stato I/O

Un driver imposta Irp-IoStatus.Status> su STATUS_SUCCESS o su uno stato di errore appropriato, ad esempio STATUS_UNSUCCESSFUL o STATUS_INSUFFICIENT_RESOURCES.

Se un driver richiede tempo per eseguire le operazioni di avvio per un dispositivo, può contrassegnare l'IRP in sospeso e restituire STATUS_PENDING.

Operazione

Questo IRP deve essere gestito prima dal driver del bus padre per un dispositivo e quindi da ogni driver superiore nello stack di dispositivi.

In risposta a questo IRP, i driver avviano un dispositivo per la prima volta o riavviano un dispositivo arrestato. Le operazioni esatte necessarie per avviare un dispositivo variano da dispositivo a dispositivo, ma possono includere l'alimentazione nel dispositivo, l'esecuzione dell'inizializzazione specifica del dispositivo e la connessione dell'interrupt.

Un driver può in genere gestire questo IRP nello stesso modo se avvia un dispositivo per la prima volta o riavvia un dispositivo dopo un IRP_MN_STOP_DEVICE, tranne se un driver deve ripristinare lo stato del dispositivo in un riavvio dopo un arresto.

Nei sistemi operativi Windows Vista e versioni successive è consigliabile che i driver eselaborino sempre il IRP_MN_START_DEVICE IRP e ne completino l'elaborazione in un secondo momento. Questo ordine consente al sistema di elaborare i riavvii del dispositivo in modo asincrono. Nei sistemi operativi precedenti a Windows Vista, i driver possono restituire STATUS_PENDING dalle routine di invio, ma il gestore PnP non sovrappone il riavvio del dispositivo con qualsiasi altra operazione.

Per altre informazioni sulla gestione di un IRP di avvio, vedere Avvio di un dispositivo.

Invio di questo IRP

Riservato per l'utilizzo nel sistema. I driver non devono inviare questo IRP.

Requisiti

Intestazione

Wdm.h (include Wdm.h, Ntddk.h o Ntifs.h)

Vedi anche

IRP_MN_STOP_DEVICE