IRP_MN_READ_CONFIG
I conducenti degli autobus con spazio di configurazione devono gestire questa richiesta per i dispositivi figlio (PDO figlio). I driver di filtro e di funzione non gestiscono questa richiesta.
Valore
0x0F
Codice principale
Data di invio
Un driver o un altro componente di sistema invia questo IRP per leggere lo spazio di configurazione del bus padre di un dispositivo.
Un driver o un altro componente di sistema invia questo IRP al DISPATCH_LEVEL IRQL < in un contesto di thread arbitrario.
Parametri di input
Il membro Parameters.ReadWriteConfig della struttura IO_STACK_LOCATION è una struttura contenente le informazioni seguenti:
ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length
I membri della struttura possono essere interpretati in modo diverso da driver di bus diversi, ma i membri vengono in genere definiti come segue:
WhichSpace
Specifica l'area di memoria a cui accedere. Questo parametro può accettare i valori seguenti:
Valore | Bus | Significato |
---|---|---|
PCI_WHICHSPACE_CONFIG |
PCI |
Spazio di configurazione PCI. |
PCI_WHICHSPACE_ROM |
PCI |
Memoria di sola lettura. |
PCCARD_COMMON_MEMORY PCCARD_COMMON_MEMORY_INDIRECT |
PCMCIA |
Memoria PCCARD principale. |
PCCARD_ATTRIBUTE_MEMORY PCCARD_ATTRIBUTE_MEMORY_INDIRECT |
PCMCIA |
Spazio dell'attributo PCMCIA (configurazione). |
PCCARD_PCI_CONFIGURATION_SPACE |
PCMCIA |
Spazio di configurazione PCI. |
I valori PCI_XXX sono definiti in Wdm.h. I valori PCCARD_XXX sono definiti in Ntddpcm.h.
Buffer
Punta a un buffer in cui restituire le informazioni richieste. Il componente che invia l'IRP alloca questa struttura dalla memoria di paging. Il formato del buffer è specifico del bus.
Compensare
Specifica un offset nello spazio di configurazione.
Lunghezza
Specifica il numero di byte da leggere.
Parametri di output
In caso di esito positivo, un driver del bus riempie il buffer in Parameters.ReadWriteConfig.Buffer con i dati richiesti.
Blocco dello stato I/O
Un driver del bus imposta Irp-IoStatus.Status> su STATUS_SUCCESS o su uno stato di errore appropriato, ad esempio STATUS_INVALID_PARAMETER_n, STATUS_NO_SUCH_DEVICE o STATUS_DEVICE_NOT_READY.
In caso di esito positivo, un driver del bus imposta Irp-IoStatus.Information> sul numero di byte restituiti.
Se un driver del bus non è in grado di completare questa richiesta immediatamente, può contrassegnare l'IRP in sospeso, restituire STATUS_PENDING e completare l'IRP in un secondo momento.
Operazione
Un driver del bus gestisce questo IRP per i dispositivi figlio (PDO figlio).
I driver di funzione e filtro non gestiscono questo IRP; passano al driver inferiore successivo senza modifiche a Irp-IoStatus>. Stato e non impostano una routine IoCompletion.
Un driver del bus che gestisce questa richiesta deve controllare il parametro WhichSpace per assicurarsi che contenga un valore supportato dal driver.
Vedere Plug and Play per le regole generali per la gestione di Plug and Play irP secondari.
Invio di questo IRP
In genere, un driver di funzione invia questo IRP al driver principale nello stack di dispositivi a cui è collegato e l'IRP viene gestito dal driver del bus padre.
Per informazioni sull'invio di provider di integrazione, vedere Gestione dei runtime di integrazione. I passaggi seguenti si applicano in modo specifico a questo IRP:
Allocare un buffer da un pool di paging e inizializzarlo in zeri.
Impostare i valori nella successiva posizione dello stack di I/O di IRP: impostare MajorFunction su IRP_MJ_PNP, impostare MinorFunction su IRP_MN_READ_CONFIG e impostare i valori appropriati in Parameters.ReadWriteConfig.
Inizializzare IoStatus.Status per STATUS_NOT_SUPPORTED.
Deallocare l'IRP e il buffer quando non sono più necessari.
I driver devono inviare questo IRP dal DISPATCH_LEVEL IRQL < .
Un driver può accedere allo spazio di configurazione di un bus in DISPATCH_LEVEL tramite una routine dell'interfaccia del bus, se il driver del bus padre supporta tale interfaccia. Per ottenere un'interfaccia del bus, un driver invia una richiesta di IRP_MN_QUERY_INTERFACE allo stack di dispositivi in cui è collegato il driver. Il driver chiama quindi la routine appropriata restituita nell'interfaccia .
Ad esempio, per leggere lo spazio di configurazione da DISPATCH_LEVEL, un driver può chiamare IRP_MN_QUERY_INTERFACE durante l'inizializzazione del driver per ottenere l'interfaccia BUS_INTERFACE_STANDARD dal driver del bus padre. Il driver invia la query IRP dal PASSIVE_LEVEL IRQL. Successivamente, dal codice in IRQL DISPATCH_LEVEL, il driver chiama la routine appropriata restituita nell'interfaccia, ad esempio la routine Interface.GetBusData .
Requisiti
Intestazione |
Wdm.h (include Wdm.h, Ntddk.h o Ntifs.h) |