Rejestrowanie dostawcy
Przed wdrożeniem dostawcy należy najpierw zarejestrować dostawcę w usłudze WMI. Zarejestrowanie dostawcy definiuje typ dostawcy i klasy obsługiwane przez dostawcę. Usługa WMI może uzyskiwać dostęp tylko do zarejestrowanych dostawców.
Notatka
Aby uzyskać więcej informacji na temat rejestrowania dostawcy MI, zobacz Jak: zarejestrować dostawcę MI.
Przed zarejestrowaniem dostawcy możesz napisać kod dostawcy. Jednak bardzo trudno jest debugować dostawcę, który nie jest zarejestrowany w usłudze WMI. Określenie interfejsów dostawcy pomaga również określić cel i strukturę dostawcy. W związku z tym zarejestrowanie dostawcy pomaga zaprojektować dostawcę.
Tylko administratorzy mogą zarejestrować lub usunąć dostawcę.
Dostawca musi być zarejestrowany dla wszystkich różnych typów funkcji dostawcy, które wykonuje. Prawie wszyscy dostawcy dostarczają wystąpienia klas, które definiują, ale mogą również udostępniać dane właściwości, metody, zdarzenia lub klasy. Dostawca może być również zarejestrowany jako dostawca odbiorców zdarzeń lub dostawca licznika wydajności. Zaleca się połączenie wszystkich funkcji dostawcy w jednym dostawcy, a nie posiadanie wielu oddzielnych dostawców dla każdego typu. Przykładem jest dostawca rejestru systemu , który udostępnia metody i wystąpienia, oraz dostawca przydziału dysku , który dostarcza wystąpienia, metody i zdarzenia.
Dostawca musi być zarejestrowany dla wszystkich różnych typów funkcji dostawcy, które wykonuje. Prawie wszyscy dostawcy dostarczają wystąpienia klas, które definiują, ale mogą również udostępniać dane właściwości, metody, zdarzenia lub klasy. Dostawca może być również zarejestrowany jako dostawca odbiorców zdarzeń lub dostawca licznika wydajności.
To samo wystąpienie __Win32Provider jest używane dla każdego typu rejestracji.
- Rejestrowanie dostawcy instancji
- Rejestrowanie dostawcy klas
- Rejestracja dostawcy metod
- rejestrowanie dostawcy zdarzeń
- Rejestrowanie dostawcy usług konsumpcji zdarzeń
- Przekształcenie dostawcy wystąpień w dostawcę High-Performance
Przykład: Tworzenie i Rejestrowanie Wystąpienia Dostawcy
W poniższym przykładzie pokazano plik MOF, który tworzy i rejestruje wystąpienie dostawcy rejestru systemu w przestrzeni nazw root\cimv2. Aby uniknąć długiej nazwy ścieżki wymaganej w przypadku rejestracji wystąpienia i metody, przypisuje alias $Reg do dostawcy. Aby uzyskać więcej informacji, zobacz Tworzenie aliasu.
// 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);
};
Przykład: rejestrowanie dostawcy
Poniższa procedura opisuje sposób rejestrowania dostawcy.
Aby zarejestrować dostawcę
Zarejestruj dostawcę jako serwer COM.
W razie potrzeby może być konieczne utworzenie wpisów rejestru. Ten proces dotyczy wszystkich serwerów COM i nie ma związku z usługą WMI. Aby uzyskać więcej informacji, zobacz sekcję COM w dokumentacji zestawu Microsoft Windows Software Development Kit (SDK).
Utwórz plik MOF zawierający wystąpienia __Win32Provider oraz wystąpienie klasy wywodzącej się bezpośrednio lub pośrednio z __ProviderRegistration, na przykład __InstanceProviderRegistration. Tylko administratorzy mogą zarejestrować lub usunąć dostawcę, tworząc wystąpienia klas pochodnych od __Win32Provider lub __ProviderRegistration.
Ustaw HostingModel w wystąpieniu __Win32Provider zgodnie z wartościami w Modele hostingu.
Notatka
Jeśli dostawca nie wymaga wysokich uprawnień konta LocalSystem, właściwość __Win32Provider.HostingModel powinna być ustawiona na wartość "NetworkServiceHost". Aby uzyskać więcej informacji, zobacz Provider Hosting and Security.
Poniższy przykład MOF z pełnego przykładu przedstawia kod, który tworzy wystąpienie __Win32Provider.
instance of __Win32Provider as $Reg { Name = "RegProv"; CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}"; HostingModel = "NetworkServiceHost:LocalServiceHost"; };
Wystąpienie klasy pochodzące bezpośrednio lub pośrednio z __ProviderRegistration, aby opisać logiczną implementację dostawcy. Dostawcę można zarejestrować dla kilku różnych typów funkcji. Powyższy przykład rejestruje RegProv jako dostawcę instancji i metody. Jeśli jednak RegProv obsługuje tę funkcjonalność, może być również zarejestrowany jako dostawca właściwości lub zdarzeń. W poniższej tabeli wymieniono klasy rejestrujące funkcje dostawcy.
Klasy rejestracji dostawcy Opis __InstanceProviderRegistration Rejestruje dostawcę instancji . __EventProviderRegistration Rejestruje dostawcę zdarzeń . __EventConsumerProviderRegistration Rejestruje dostawcę odbiorców zdarzeń . __MethodProviderRegistration Rejestruje dostawcę metod . __PropertyProviderRegistration Rejestruje dostawcę właściwości o nazwie. Umieść plik MOF w katalogu stałym.
Zazwyczaj należy umieścić plik w katalogu instalacyjnym dostawcy.
Skompiluj plik MOF przy użyciu mofcomp lub interfejsu IMofCompiler.
Aby uzyskać więcej informacji, zobacz kompilowanie plików MOF.
Windows 8 i Windows Server 2012: Podczas instalowania dostawców, zarówno mofcomp, jak i interfejs IMofCompiler traktują kwalifikatory [Key] i [Static] jako prawdziwe, jeśli są obecne, niezależnie od ich rzeczywistych wartości. Inne kwalifikatory są traktowane jako fałszywe, jeśli są obecne, ale nie są jawnie ustawione na wartość true.
Tematy pokrewne