Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Antes de implementar seu provedor, primeiro você deve registrar seu provedor no WMI. Registrar o provedor define o tipo do provedor e as classes que ele suporta. O WMI só pode acessar provedores registrados.
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 provedor antes de registrar o provedor. No entanto, é muito difícil depurar um provedor que não está registrado no WMI. Determinar as interfaces do 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 ser registrado para todos os diferentes tipos de funções de provedor que ele 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 provedor também pode ser registrado como um provedor de consumidor de eventos ou um provedor de contador 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 de 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 ser registrado para todos os diferentes tipos de funções de provedor que ele 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 provedor também pode ser registrado como um provedor de consumidor de eventos ou um provedor de contador de desempenho.
A mesma instância de __Win32Provider é usada para cada tipo de registro:
- Registrando um provedor de instância
- Registrando um provedor de classe
- Registrando um provedor de método
- Registrando um provedor de eventos
- Registrando um provedor de consumidor de eventos
- Transformando um provedor de instância em um provedor de High-Performance
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 do Registro do Sistema 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: registrando um provedor
O procedimento a seguir descreve como registrar um provedor.
Para registrar um provedor
Registre o provedor como um servidor COM.
Caso necessário, você poderá precisar criar entradas do Registro. Esse processo se aplica a todos os servidores COM e não está relacionado ao WMI. Para obter mais informações, consulte a seção COM na documentação do Microsoft Windows Software Development Kit (SDK).
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.
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 privilégios elevados da conta LocalSystem, a propriedade __Win32Provider.HostingModel deve ser definida como "NetworkServiceHost". Para obter mais informações, consulte de hospedagem e segurança do provedor de.
O exemplo de 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"; };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 uma instância e um provedor de método. No entanto, se o RegProv suporta a funcionalidade, ele também poderá ser registrado como um provedor de propriedade ou de eventos. A tabela a seguir lista as classes que registram a funcionalidade do provedor.
Classes de cadastro de provedores Descrição __InstanceProviderRegistration Registra um provedor de instância. __EventProviderRegistration Registra um provedor de eventos. __EventConsumerProviderRegistration Registra um provedor de consumidores de eventos. __MethodProviderRegistration Registra um provedor de métodos. __PropertyProviderRegistration Registra um provedor de propriedades. Coloque o arquivo MOF em um diretório permanente.
Normalmente, você deve colocar o arquivo no diretório de instalação do provedor.
Compile o arquivo MOF usando mofcomp ou a interface IMofCompiler .
Para obter mais informações, consulte Compilando arquivos MOF.
Windows 8 e Windows Server 2012: Ao instalar provedores, tanto o mofcomp quanto a interface IMofCompiler tratam os qualificadores [Key] e [Estático] como verdadeiros se eles estiverem presentes, independentemente de seus valores reais. Outros qualificadores são tratados como 'false' se estiverem presentes, mas não configurados explicitamente como 'true'.
Tópicos relacionados