IRP_MN_READ_CONFIG
Los controladores de autobús para autobuses con espacio de configuración deben controlar esta solicitud para sus dispositivos secundarios (PPO secundarios). Los controladores de filtro y función no controlan esta solicitud.
Value
0x0F
Código principal
Cuándo se envió
Un controlador u otro componente del sistema envía este IRP para leer el espacio de configuración del bus primario de un dispositivo.
Un controlador u otro componente del sistema envía este IRP a IRQL < DISPATCH_LEVEL en un contexto de subproceso arbitrario.
Parámetros de entrada
El miembro Parameters.ReadWriteConfig de la estructura IO_STACK_LOCATION es una estructura que contiene la siguiente información:
ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length
Los miembros de la estructura se pueden interpretar de forma diferente por diferentes conductores de autobús, pero los miembros se definen normalmente de la siguiente manera:
WhichSpace
Especifica el área de memoria a la que se va a acceder. Este parámetro puede aceptar los valores siguientes:
Value | En bus | Significado |
---|---|---|
PCI_WHICHSPACE_CONFIG |
PCI |
Espacio de configuración pci. |
PCI_WHICHSPACE_ROM |
PCI |
Memoria de solo lectura. |
PCCARD_COMMON_MEMORY PCCARD_COMMON_MEMORY_INDIRECT |
PCMCIA |
Memoria PCCARD principal. |
PCCARD_ATTRIBUTE_MEMORY PCCARD_ATTRIBUTE_MEMORY_INDIRECT |
PCMCIA |
Espacio del atributo PCMCIA (configuración). |
PCCARD_PCI_CONFIGURATION_SPACE |
PCMCIA |
Espacio de configuración pci. |
Los valores PCI_XXX se definen en Wdm.h. Los valores PCCARD_XXX se definen en Ntddpcm.h.
Búfer
Apunta a un búfer en el que se va a devolver la información solicitada. El componente que envía el IRP asigna esta estructura desde la memoria paginada. El formato del búfer es específico del bus.
Compensar
Especifica un desplazamiento en el espacio de configuración.
Longitud
Especifica el número de bytes que se van a leer.
Parámetros de salida
Si se ejecuta correctamente, un controlador de bus rellena el búfer en Parameters.ReadWriteConfig.Buffer con los datos solicitados.
Bloque de estado de entrada/salida
Un controlador de bus establece Irp-IoStatus.Status> en STATUS_SUCCESS o en un estado de error adecuado, como STATUS_INVALID_PARAMETER_n, STATUS_NO_SUCH_DEVICE o STATUS_DEVICE_NOT_READY.
Si se ejecuta correctamente, un controlador de autobús establece Irp-IoStatus.Information> en el número de bytes devueltos.
Si un controlador de autobús no puede completar esta solicitud inmediatamente, puede marcar el IRP pendiente, devolver STATUS_PENDING y completar el IRP en un momento posterior.
Operación
Un controlador de autobús controla este IRP para sus dispositivos secundarios (PPO secundarios).
Los controladores de función y filtro no controlan este IRP; lo pasan al siguiente controlador inferior sin cambios en Irp-IoStatus>. El estado y no establecen una rutina de IoCompletion.
Un controlador de bus que controle esta solicitud debe comprobar el parámetro WhichSpace para asegurarse de que contiene un valor que admite el controlador.
Consulte Plug and Play para conocer las reglas generales para controlar Plug and Play IRP menores.
Envío de este IRP
Normalmente, un controlador de función envía este IRP al controlador superior de la pila de dispositivos a la que está conectado y el IRP lo controla el controlador de autobús primario.
Consulte Control de IRP para obtener información sobre el envío de IRP. Los pasos siguientes se aplican específicamente a este IRP:
Asigne un búfer desde un grupo paginado e inicialícelo a ceros.
Establezca los valores en la siguiente ubicación de pila de E/S del IRP: establezca MajorFunction en IRP_MJ_PNP, establezca MinorFunction en IRP_MN_READ_CONFIG y establezca los valores adecuados en Parameters.ReadWriteConfig.
Inicialice IoStatus.Status en STATUS_NOT_SUPPORTED.
Desasigne el IRP y el búfer cuando ya no sean necesarios.
Los controladores deben enviar este IRP desde irQL < DISPATCH_LEVEL.
Un controlador puede acceder al espacio de configuración de un bus en DISPATCH_LEVEL a través de una rutina de interfaz de bus, si el controlador de autobús primario admite dicha interfaz. Para obtener una interfaz de bus, un controlador envía una solicitud de IRP_MN_QUERY_INTERFACE a la pila de dispositivos en la que está conectado el controlador. A continuación, el controlador llama a la rutina adecuada devuelta en la interfaz .
Por ejemplo, para leer el espacio de configuración de DISPATCH_LEVEL, un controlador puede llamar a IRP_MN_QUERY_INTERFACE durante la inicialización del controlador para obtener la interfaz de BUS_INTERFACE_STANDARD del controlador primario del bus. El controlador envía la consulta IRP desde irQL PASSIVE_LEVEL. Más adelante, desde el código de IRQL DISPATCH_LEVEL, el controlador llama a la rutina adecuada devuelta en la interfaz, como la rutina Interface.GetBusData .
Requisitos
Encabezado |
Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h) |