IRP_MN_START_DEVICE
Tutti i driver PnP devono gestire questo IRP.
Valore
0x00
Codice principale
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) |