Compartir a través de


Registro de un proveedor

Antes de implementar el proveedor, primero debe registrar el proveedor con WMI. El registro del proveedor define el tipo del proveedor y las clases que admite el proveedor. WMI solo puede acceder a proveedores registrados.

Nota:

Para obtener más información sobre cómo registrar un proveedor de MI, vea Cómo: Registrar un proveedor mi.

 

Puede escribir el código de proveedor antes de registrar el proveedor. Sin embargo, es muy difícil depurar un proveedor que no está registrado con WMI. La determinación de las interfaces del proveedor también ayuda a describir el propósito y la estructura de un proveedor. Por lo tanto, el registro del proveedor le ayuda a diseñar el proveedor.

Solo los administradores pueden registrar o eliminar un proveedor.

Un proveedor debe registrarse para todos los distintos tipos de funciones de proveedor que realiza. Casi todos los proveedores proporcionan instancias de clases que definen, pero también pueden proporcionar datos de propiedad, métodos, eventos o clases. El proveedor también puede registrarse como proveedor de consumo de eventos o como proveedor de indicadores de rendimiento. Se recomienda combinar toda la funcionalidad del proveedor en un proveedor en lugar de tener muchos proveedores independientes para cada tipo. Un ejemplo es el proveedor del Registro del sistema, que proporciona métodos e instancias, y el proveedor de cuota de disco, que proporciona instancias, métodos y eventos.

Un proveedor debe registrarse para todos los distintos tipos de funciones de proveedor que realiza. Casi todos los proveedores proporcionan instancias de clases que definen, pero también pueden proporcionar datos de propiedad, métodos, eventos o clases. El proveedor también se puede registrar como proveedor de consumidores de eventos o como proveedor de contadores de rendimiento.

La misma instancia de __Win32Provider se usa para cada tipo de registro:

Ejemplo: Creación y registro de una instancia de un proveedor

En el ejemplo siguiente se muestra un archivo MOF que crea y registra una instancia del proveedor del Registro del sistema en el espacio de nombres root\cimv2. Asigna el alias $Reg al proveedor para evitar el uso del nombre de ruta de acceso largo necesario en los registros de instancias y métodos. Para obtener más información, consulte Creación de un alias.

// Place the Registry provider in the root\cimv2 namespace
#pragma namespace("\\\\.\\ROOT\\cimv2")

// Create an instance of __Win32Provider
instance of __Win32Provider as $Reg
{
Name = "RegProv";        
CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
HostingModel = "NetworkServiceHost:LocalServiceHost";
};

// Register as an instance provider by
// creating an instance
// of __InstanceProviderRegistration
instance of __InstanceProviderRegistration
{
 provider = $Reg;
 SupportsDelete = FALSE;
 SupportsEnumeration = TRUE;
 SupportsGet = TRUE;
 SupportsPut = TRUE;
};

// Register as a method provider by
// creating an instance
// of __MethodProviderRegistration
instance of __MethodProviderRegistration
{
 provider = $Reg;
};

// Define the StdRegProv class
[dynamic: ToInstance, provider("RegProv")]
class StdRegProv
{
[implemented, static] uint32 CreateKey(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName);
[implemented, static] uint32 DeleteKey(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName);
[implemented, static] uint32 EnumKey(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [OUT] string sNames[]);
[implemented, static] uint32 EnumValues(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [OUT] string sNames[], 
 [OUT] sint32 Types[]);
[implemented, static] uint32 DeleteValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName);
 [implemented, static] uint32 SetDWORDValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [IN] uint32 uValue = 3);
[implemented, static] uint32 GetDWORDValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [OUT] uint32 uValue);
[implemented, static] uint32 SetStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [IN] string sValue = "hello");
[implemented, static] uint32 GetStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [in] string sValueName, 
 [OUT] string sValue);
[implemented, static] uint32 SetMultiStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [IN] string sValue[] = {"hello", "there"});
[implemented, static] uint32 GetMultiStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [OUT] string sValue[]);
[implemented, static] uint32 SetExpandedStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [IN] string sValue = "%path%");
[implemented, static] uint32 GetExpandedStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [OUT] string sValue);
[implemented, static] uint32 SetBinaryValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [in] string sValueName, 
 [in] uint8 uValue[] = {1, 2});
[implemented, static] uint32 GetBinaryValue(
 {IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [OUT] uint8 uValue[]);
[implemented, static] uint32 CheckAccess(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] uint32 uRequired = 3, 
 [OUT] boolean bGranted);
};

Ejemplo: Registro de un proveedor

En el procedimiento siguiente se describe cómo registrar un proveedor.

Para registrar un proveedor

  1. Registre el proveedor como servidor COM.

    Si es necesario, es posible que tenga que crear entradas del Registro. Este proceso se aplica a todos los servidores COM y no está relacionado con WMI. Para obtener más información, consulte la sección COM en la documentación del Kit de desarrollo de software (SDK) de Microsoft Windows.

  2. Cree un archivo MOF que contenga instancias de __Win32Provider y una instancia de una clase derivada directa o indirectamente de __ProviderRegistration, como __InstanceProviderRegistration. Solo los administradores pueden registrar o eliminar un proveedor mediante la creación de instancias de clases derivadas de __Win32Provider o __ProviderRegistration.

  3. Establezca HostingModel en la instancia de __Win32Provider según los valores de Modelos de hospedaje.

    Nota:

    A menos que el proveedor requiera los privilegios elevados de la cuenta LocalSystem, la propiedad __Win32Provider.HostingModel debe establecerse en "NetworkServiceHost". Para obtener más información, vea proveedor de hospedaje y seguridad.

     

    En el siguiente ejemplo de MOF del ejemplo completo se muestra el código que crea una instancia de __Win32Provider.

    instance of __Win32Provider as $Reg
    {
    Name = "RegProv";        
    CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
    HostingModel = "NetworkServiceHost:LocalServiceHost";
    };
    
  4. Instancia de una clase derivada directa o indirectamente de __ProviderRegistration, para describir la implementación lógica del proveedor. Un proveedor se puede registrar para varios tipos diferentes de funcionalidad. En el ejemplo anterior se registra RegProv como instancia y proveedor de métodos. Pero si RegProv admite esta funcionalidad, también podría registrarse como un proveedor de propiedades o eventos. En la tabla siguiente se enumeran las clases que registran la funcionalidad del proveedor.

    Clases para el registro de proveedores Descripción
    __InstanceProviderRegistration Registra un proveedor de instancias.
    __EventProviderRegistration Registra un proveedor de eventos.
    __EventConsumerProviderRegistration Registra un proveedor de consumidores de eventos.
    __MethodProviderRegistration Registra un proveedor de métodos.
    __PropertyProviderRegistration Registra un proveedor de propiedades.

     

  5. Coloque el archivo MOF en un directorio permanente.

    Normalmente, debe colocar el archivo en el directorio de instalación del proveedor.

  6. Compile el archivo MOF mediante mofcomp o la interfaz IMofCompiler .

    Para obtener más información, vea compilar archivos MOF.

    Windows 8 y Windows Server 2012: Al instalar proveedores, tanto mofcomp como la interfaz IMofCompiler tratan los calificadores [Key] y [Static] como true si están presentes, independientemente de sus valores reales. Otros calificadores se tratan como falsos si están presentes pero no se establecen explícitamente como verdaderos.

Desarrollar un proveedor WMI

Establecer descriptores de seguridad de espacio de nombres

Protección del proveedor