Share via


Definición de nombres de instancia de WMI

Una instancia de un bloque WMI contiene datos proporcionados por un determinado dispositivo físico o componente de software. Al igual que el GUID de un bloque identifica de forma única el bloque, el nombre de una instancia identifica de forma única esa instancia de un bloque. Las aplicaciones cliente WMI usan nombres de instancia para asociar la información devuelta en un bloque de datos con el dispositivo o componente que proporcionó los datos. WMI usa nombres de instancia para determinar a qué dispositivo se debe enviar una solicitud. Se recomienda encarecidamente que los controladores usen su PDO al definir nombres de instancia.

Un controlador puede definir nombres de instancia para un bloque de dos maneras:

  • El controlador pasa una lista de nombres de instancia estáticos a WMI cuando registra el bloque.

    Una vez registrado el bloque, tanto el controlador como WMI especifican un nombre de instancia por su índice en esta lista. Los nombres de instancia estáticos se pueden basar en el identificador de instancia de dispositivo del PDO de un controlador o en un nombre base definido por el controlador; o el controlador puede definir una lista de cadenas de nombre de instancia. Los nombres de instancia estáticos se conservan hasta que el controlador los cambia explícitamente al volver a registrar el bloque.

  • El controlador genera nombres de instancia dinámicos a medida que se crean instancias.

    El controlador indica que generará nombres de instancia dinámicos para un bloque cuando registre el bloque. Una vez registrado el bloque, tanto el controlador como el WMI pasan nombres de instancia dinámicos como cadenas en el búfer en Parameters.WMI.Buffer.

Un controlador debe generar nombres de instancia dinámicos solo si el número de instancias o nombres de instancia de un bloque de datos cambia con frecuencia en tiempo de ejecución. Por ejemplo, un controlador podría usar identificadores de proceso o las direcciones IP de las conexiones TCP/IP como nombres de instancia. Estos nombres de instancia deben ser dinámicos; si fueran estáticos, el controlador incurriría en una sobrecarga considerable porque tendría que llamar a IoWMIRegistrationControl para actualizar el número y los nombres de las instancias cada vez que se produjo un cambio.

En la mayoría de los casos, los nombres de instancia estáticos son preferibles a los nombres de instancia dinámicos por los siguientes motivos:

  • Los nombres de instancia estáticos mejoran el rendimiento de un controlador porque el controlador no necesita devolver cadenas de nombre de instancia en respuesta a las solicitudes WMI, ya que debe para los nombres de instancia dinámicos.

  • WMI puede detectar colisiones de nombres de instancia estáticos en el registro y modificar automáticamente los nombres de instancia si es necesario, de modo que todos los nombres de instancia sean únicos para un bloque determinado, independientemente del número de controladores que registren el bloque.

    WMI no puede detectar colisiones de nombres de instancia para nombres de instancia dinámicos, por lo que el controlador es responsable de generar nombres únicos mediante IoWMIAllocateInstanceIds.

  • Un controlador puede usar las rutinas de la biblioteca WMI para controlar irP para un bloque que use nombres de instancia estáticos, siempre que los nombres se basen en el PDO del controlador o en un nombre base definido por el controlador.

    Un controlador no puede usar rutinas de biblioteca WMI para controlar IRP para un bloque de datos que use nombres de instancia dinámicos.

Un controlador indica si un bloque usa nombres de instancia estáticos o dinámicos y el tipo de nombres de instancia estáticos, estableciendo o borrando WMIREG_FLAG_XXX en la estructura WMIREGGUID o WMIGUIDREGINFO que pasa a WMI cuando registra el bloque. Para obtener más información, consulte Registro como proveedor de datos WMI.