Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un controlador puede implementar bloques personalizados que expongan instrumentación específica del dispositivo. Por ejemplo, un controlador para una unidad de disco que puede notificar la temperatura podría implementar un bloque de eventos personalizado que notifique a los clientes WMI cuando la temperatura de la unidad aumenta más allá de un umbral seguro.
Para implementar un bloque personalizado, un controlador:
Define una clase en su archivo MOF, compila el archivo MOF en un recurso e incluye el recurso en el controlador, como se describe en Publicación de un esquema WMI.
Registra el bloque con WMI junto con los demás bloques estándar y personalizados admitidos por el controlador, como se describe en Registro como proveedor de datos WMI.
Controla todas las solicitudes WMI que especifican el puntero de objeto de dispositivo del controlador en Parameters.WMI.ProviderId y el GUID del bloque estándar en Parameters.WMI.DataPath, como se describe en Control de solicitudes WMI.
Los controladores no pueden controlar el orden en que se cargan los archivos MOF binarios. La única garantía es que wmicore.mof se carga antes de cualquier archivo MOF específico del controlador. Por lo tanto, las clases WMI personalizadas solo deben heredar de cualquiera de las clases del mismo archivo MOF o en wmicore.mof.
Para mejorar el rendimiento y la facilidad de uso de bloques de datos WMI personalizados, tenga en cuenta las siguientes directrices:
Coloque los elementos de datos agrupados de forma operativa en el mismo bloque de datos.
Por ejemplo, un controlador de puerto i8042 podría mantener información de estado sobre los puertos de teclado y mouse. En lugar de un único bloque de datos grande que contenga toda la información del mouse y del teclado, un controlador podría definir un bloque de datos para el puerto del mouse y otro bloque de datos para el puerto de teclado.
Coloque los elementos de datos usados con frecuencia en bloques de datos independientes, especialmente si de lo contrario se agruparían con elementos que se usan con poca frecuencia.
Por ejemplo, un controlador podría exponer el uso de cpu en un bloque de datos con un solo elemento, por lo que un cliente WMI podría realizar un seguimiento del uso de la CPU sin incurrir en la sobrecarga de recuperar elementos de datos adicionales en el bloque. Un cliente WMI no puede consultar un solo elemento de datos, por lo que para obtener un elemento debe consultar una instancia completa de un bloque de datos.
Use bloques de eventos para notificar a los clientes WMI eventos excepcionales, no como alternativa al registro de errores.
Solo se puede poner en cola un número limitado de eventos a la vez y, si la cola es eventos completos, se perderá. Además, no se puede garantizar el tiempo de entrega de eventos a los clientes WMI.
Limite los bloques de eventos a un tamaño máximo de 1K bytes.
Los elementos de evento deben definirse como tipos de datos pequeños, ya que hay un límite de tamaño definido por el Registro (inicialmente, 1K) para toda la estructura de WNODE_EVENT_ITEM que contiene el evento generado. En el caso de las notificaciones grandes, un controlador puede enviar una estructura de WNODE_EVENT_REFERENCE que especifica una única instancia de un bloque de datos, que WMI consulta para obtener el evento real. Sin embargo, esto aumenta el retraso de tiempo entre la aparición del evento y la notificación.
Coloque elementos de datos de tamaño fijo al principio de un bloque de datos, seguido de cualquier elemento de datos de tamaño variable.
Por ejemplo, un bloque de datos que tiene tres elementos de datos DWORD y una cadena de longitud variable debe colocar primero los tres DWORD, seguido de la cadena. Colocar elementos de datos de tamaño fijo al principio de un bloque permite a los clientes WMI extraerlos más fácilmente.
Tenga en cuenta qué tipos de usuarios del sistema desea acceder a los bloques de datos del controlador. El sistema proporciona un descriptor de seguridad predeterminado para todos los GUID de clase WMI. Si es necesario, puede proporcionar descriptores de seguridad alternativos en el archivo INF del dispositivo. Para obtener más información, consulte Creación de instalaciones de dispositivos seguros.
WMI no admite el control de versiones, por lo que un escritor de controladores debe definir una nueva clase MOF y generar un nuevo GUID para revisar un bloque personalizado existente.