Condividi tramite


IRP_MN_FILTER_RESOURCE_REQUIREMENTS

Il gestore PnP invia questo IRP a uno stack di dispositivi in modo che il driver di funzione possa modificare le risorse richieste dal dispositivo, se appropriato.

Il driver di funzione gestisce in genere questo IRP.

Il driver del bus padre (e i driver di filtro del bus) non deve gestire questa richiesta per un PDO figlio; Tale driver deve invece segnalare i requisiti delle risorse in risposta a una richiesta di IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

I driver di filtro superiore e inferiore non gestiscono questo IRP.

Valore

0x0d

Codice principale

IRP_MJ_PNP

Data di invio

Il gestore PnP invia questo IRP quando si prepara ad allocare risorse a un dispositivo.

Il gestore PnP invia l'IRP in IRQL PASSIVE_LEVEL nel contesto di un thread arbitrario.

Parametri di input

Irp-> IoStatus.Information punta a un IO_RESOURCE_REQUIREMENTS_LIST contenente i requisiti delle risorse hardware per il dispositivo. Il puntatore è NULL se il dispositivo non utilizza risorse hardware.

Parameters.FilterResourceRequirements.IoResourceRequirementList punta anche a un IO_RESOURCE_REQUIREMENTS_LIST, ma il driver di funzione deve usare l'elenco nel blocco IoStatus .

Parametri di output

Restituito nel blocco di stato di I/O.

Blocco dello stato I/O

Se un driver di funzione gestisce questo IRP, lo gestisce nel modo in cui viene eseguito il backup dello stack. Se il driver di funzione gestisce correttamente l'IRP, imposta Irp-IoStatus.Status su STATUS_SUCCESS e imposta Irp-IoStatus.Information>> su un puntatore a un IO_RESOURCE_REQUIREMENTS_LIST contenente i requisiti delle risorse filtrati. Per altre informazioni sull'impostazione dell'elenco di risorse filtrate, vedere la sezione "Operazione". Se un driver di funzione rileva un errore durante la gestione di questa istanza di IRP, imposta l'errore in Irp-IoStatus.Status>. Se un driver di funzione non gestisce questa IRP, usa IoSkipCurrentIrpStackLocation per passare lo stack invariato.

I driver di filtro superiore e inferiore non gestiscono questo IRP. Tale driver chiama IoSkipCurrentIrpStackLocation, passa l'IRP fino al driver successivo, non deve modificare Irp-IoStatus> e non deve completare l'IRP.

Il driver del bus padre non gestisce l'IRP. Lascia Irp-IoStatus> così come è e completa l'IRP.

Operazione

Il gestore PnP invia una richiesta di IRP_MN_QUERY_RESOURCE_REQUIREMENTS al driver del bus padre per il dispositivo, prima che il driver di funzione abbia collegato il relativo oggetto dispositivo allo stack di dispositivi. Per consentire al driver di funzione di modificare i requisiti delle risorse del dispositivo, se appropriato, il gestore PnP invia in seguito una richiesta di IRP_MN_FILTER_RESOURCE_REQUIREMENTS allo stack di dispositivi completo. Il gestore PnP invia l'IRP prima di allocare risorse hardware al dispositivo durante la configurazione iniziale del dispositivo. Il gestore PnP potrebbe anche inviare questo IRP durante il ribilanciamento delle risorse.

Quando il gestore PnP invia l'IRP, fornisce lo stack di driver con un elenco dei requisiti delle risorse, che i driver possono modificare e restituire. Il gestore PnP fornisce uno dei tipi seguenti di elenco dei requisiti delle risorse (elencati in ordine di priorità):

  • Configurazione forzata (modificata da un elenco di risorse a un elenco dei requisiti delle risorse)

  • Override della configurazione

  • Configurazione di base

  • Configurazione di avvio (modificata da un elenco di risorse a un elenco dei requisiti delle risorse)

Se un driver di funzione gestisce l'IRP, deve impostare una routine di completamento e gestire l'IRP nel suo modo di eseguire il backup dello stack di dispositivi. Vedere Plug and Play per informazioni sulla gestione di un'IRP PnP nel suo modo di eseguire il backup dello stack di dispositivi.

Se il driver di funzione non modifica le dimensioni dell'elenco corrente puntato da Irp-IoStatus.Information>, il driver può modificare l'elenco sul posto. Se il driver deve modificare le dimensioni dell'elenco dei requisiti, il driver deve allocare un nuovo elenco di IO_RESOURCE_REQUIREMENTS_LIST dalla memoria in pagina e liberare l'elenco precedente. Il gestore PnP libera la struttura restituita quando non è più necessaria.

Un driver di funzione deve mantenere l'ordine delle risorse nell'elenco a cui fa riferimento Irp-IoStatus.Information> e non deve modificare i tag delle risorse che non gestisce. Il driver deve prestare attenzione a modificare l'elenco dei requisiti in modo che il bus padre del dispositivo supporti. Se un driver di funzione aggiunge una nuova risorsa all'elenco dei requisiti e tale risorsa viene assegnata al dispositivo, il driver di funzione deve filtrare tale risorsa dall'IRP_MN_START_DEVICE prima di passare l'IRP iniziale al driver del bus.

Se il driver di funzione per il dispositivo non gestisce questa IRP, il gestore PnP usa i requisiti di risorsa come specificato dal driver del bus padre in risposta alla richiesta di IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Un driver di funzione deve essere preparato per gestire questo IRP per un dispositivo in qualsiasi momento dopo che la routine AddDevice del driver è stata chiamata per il dispositivo.

Vedere Plug and Play per le regole generali per la gestione di irp secondari Plug and Play.

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

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE