Compartir a través de


Control de IRP_MN_REGINFO y IRP_MN_REGINFO_EX para registrar bloques

En Windows 98 y Windows 2000, el sistema envía la solicitud de IRP_MN_REGINFO a un controlador para permitir que un controlador registre sus clases WMI. En Windows XP y versiones posteriores, el sistema envía la solicitud IRP_MN_REGINFO_EX en su lugar. La mayoría de los controladores pueden controlar estas solicitudes mediante WmiSystemControl para proporcionar una rutina de devolución de llamada. Consulte Uso de la biblioteca WMI para registrar bloques para obtener más información.

Un controlador debe controlar IRP_MN_REGINFO o IRP_MN_REGINFO_EX solicitudes para registrar bloques que usen nombres de instancia dinámicos o que usen una lista de nombres de instancia estáticos definidos por el controlador; no puede llamar a WmiSystemControl para registrar estos bloques. Opcionalmente, un controlador puede controlar esta solicitud para registrar bloques que usan nombres de instancia estáticos basados en el PDO o en una cadena de nombre base definida por el controlador.

En este caso, el controlador:

  1. Rellena una estructura WMIREGINFO en Parameters.WMI.Buffer que especifica:

    • Número de bytes de todos los datos de registro proporcionados por el controlador, incluidos los datos proporcionados en nombre de otro controlador.

    • Ruta de acceso del registro del controlador.

    • Nombre del recurso MOF del controlador.

    • Número de bloques que se van a registrar.

    • Matriz de estructuras WMIREGGUID , una para cada bloque.

  2. Para cada bloque, el controlador rellena una estructura WMIREGGUID que especifica:

    • GUID que representa el bloque.

    • Marcas que proporcionan información sobre los nombres de instancia y otras características del bloque, como si el bloque es caro de recopilar. Para obtener más información, vea Marcas de registro de WMI.

    Si el bloque se está registrando con nombres de instancia estáticos, el controlador establece uno de los siguientes miembros para especificar datos de nombre de instancia estática para el bloque:

    • Si el controlador establece Flags con WMIREG_FLAG_INSTANCE_LIST, establece InstanceNameList en un desplazamiento en una lista de cadenas de nombre de instancia estáticas. WMI especifica instancias en solicitudes posteriores por índice en esta lista.

    • Si el controlador establece Flags con WMIREG_FLAG_INSTANCE_BASENAME, establece BaseNameOffset en un desplazamiento en una cadena de nombre base. WMI usa esta cadena para generar nombres de instancia estáticos para el bloque.

    • Si el controlador establece Flags con WMIREG_FLAG_INSTANCE_PDO, establece Pdo en el PDO pasado a la rutina AddDevice del controlador. WMI usa la ruta de acceso de la instancia de dispositivo del PDO para generar nombres de instancia estáticos para el bloque. Al controlar una solicitud de IRP_MN_REGINFO_EX , los controladores deben llamar a la rutina ObReferenceObject en el objeto de dispositivo físico pasado en Pdo. (El sistema llamará automáticamente a ObDereferenceObject para desreferenciar el objeto; el controlador no debe hacerlo).

    El controlador escribe cadenas de nombre de instancia o una cadena de nombre base en el desplazamiento indicado por InstanceNameList o BaseName, respectivamente.

  3. Si el controlador está registrando bloques en nombre de otro controlador (como un controlador de clase podría en nombre de un controlador de miniclase), el controlador rellena otra estructura WMIREGINFO y la lista de estructuras WMIREGGUID con información de registro para los bloques del otro controlador y establece NextWmiRegInfo en el primer WMIREGINFO en bytes desde el principio de la primera WMIREGINFO hasta el principio de la segunda estructura WMIREGINFO .