Partilhar via


Registar um Fornecedor

Antes de implementar seu provedor, você deve primeiro registrar seu provedor com WMI. O registro do provedor define o tipo do provedor e as classes às quais o provedor oferece suporte. O WMI só pode aceder a fornecedores registados.

Observação

Para obter mais informações sobre como registrar um provedor de MI, consulte Como registrar um provedor de MI.

 

Você pode escrever o código do seu provedor antes de registrar o provedor. No entanto, é muito difícil depurar um provedor que não esteja registrado no WMI. Determinar as interfaces para seu provedor também ajuda a descrever a finalidade e a estrutura de um provedor. Portanto, registrar seu provedor ajuda você a projetar seu provedor.

Somente os administradores podem registrar ou excluir um provedor.

Um provedor deve estar registrado para todos os diferentes tipos de funções de provedor que executa. Quase todos os provedores fornecem instâncias de classes que definem, mas também podem fornecer dados de propriedade, métodos, eventos ou classes. O prestador pode também ser registado como prestador de serviços de consumo de eventos ou prestador de contadores de desempenho. É recomendável que você combine todas as funcionalidades do provedor em um provedor em vez de ter muitos provedores separados para cada tipo. Um exemplo é o provedor Registro do Sistema, que fornece métodos e instâncias, e o provedor de Cota de Disco , que fornece instâncias, métodos e eventos.

Um provedor deve estar registrado para todos os diferentes tipos de funções de provedor que executa. Quase todos os provedores fornecem instâncias de classes que definem, mas também podem fornecer dados de propriedade, métodos, eventos ou classes. O prestador pode também ser registado como prestador de serviços de consumo de eventos ou prestador de contadores de desempenho.

A mesma instância de __Win32Provider é usada para cada tipo de registro:

Exemplo: Criando e registrando uma instância de um provedor

O exemplo a seguir mostra um arquivo MOF que cria e registra uma instância do provedor System Registry no namespace root\cimv2. Ele atribui o alias $Reg ao provedor para evitar o nome de caminho longo necessário nos registros de instância e método. Para obter mais informações, consulte Criando um 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);
};

Exemplo: Registar um fornecedor

O procedimento a seguir descreve como registrar um provedor.

Para registar um fornecedor

  1. Registre o provedor como um servidor COM.

    Se necessário, poderá ter de criar entradas no registo. Este processo aplica-se a todos os servidores COM e não está relacionado com o WMI. Para obter mais informações, consulte a seção COM na documentação do Microsoft Windows Software Development Kit (SDK).

  2. Crie um arquivo MOF que contenha instâncias de __Win32Provider e uma instância de uma classe derivada direta ou indiretamente de __ProviderRegistration, como __InstanceProviderRegistration. Somente os administradores podem registrar ou excluir um provedor criando instâncias de classes derivadas de __Win32Provider ou __ProviderRegistration.

  3. Defina o HostingModel na instância de __Win32Provider de acordo com os valores em modelos de hospedagem.

    Observação

    A menos que o provedor exija os altos privilégios da conta LocalSystem, a propriedade__Win32Provider.HostingModel deve ser definida como "NetworkServiceHost". Para obter mais informações, consulte Provider Hosting and Security.

     

    O exemplo MOF a seguir do exemplo completo mostra o código que cria uma instância de __Win32Provider.

    instance of __Win32Provider as $Reg
    {
    Name = "RegProv";        
    CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
    HostingModel = "NetworkServiceHost:LocalServiceHost";
    };
    
  4. Uma instância de uma classe derivada direta ou indiretamente de __ProviderRegistration, para descrever a implementação lógica do provedor. Um provedor pode ser registrado para vários tipos diferentes de funcionalidade. O exemplo acima registra RegProv como um provedor de instância e método. Mas se o RegProv suportar a funcionalidade, ele também poderá ser registrado como um provedor de propriedade ou evento. A tabela a seguir lista as classes que registram a funcionalidade do provedor.

    Classes de registro do provedor Descrição
    __InstanceProviderRegistration Registra um provedor de instância .
    __EventProviderRegistration Registra um provedor de eventos .
    __EventConsumerProviderRegistration Registra um provedor consumidor de eventos.
    __RegistoDePrestadorDeMétodo Registra um provedor de método .
    __PropertyProviderRegistration Registra um provedor de propriedade .

     

  5. Coloque o arquivo MOF em um diretório permanente.

    Normalmente, você deve colocar o arquivo no diretório de instalação do provedor.

  6. Compile o arquivo MOF usando mofcomp ou a interfaceIMofCompiler.

    Para obter mais informações, consulte compilando arquivos MOF.

    Windows 8 e Windows Server 2012: Ao instalar provedores, mofcomp e a interfaceIMofCompilertratam os qualificadores [Key] e [Static] como true se estiverem presentes, independentemente de seus valores reais. Outros qualificadores são tratados como falsos se estiverem presentes, mas não explicitamente definidos como verdadeiros.

Desenvolvendo um provedor WMI

Definindo Descritores de Segurança Namepace

Proteger o seu fornecedor