Mendaftarkan Penyedia

Sebelum menerapkan penyedia Anda, Anda harus terlebih dahulu mendaftarkan penyedia Anda dengan WMI. Mendaftarkan penyedia menentukan jenis penyedia dan kelas yang didukung penyedia. WMI hanya dapat mengakses penyedia terdaftar.

Catatan

Untuk informasi selengkapnya tentang mendaftarkan penyedia MI, lihat Cara: Mendaftarkan Penyedia MI.

 

Anda dapat menulis kode penyedia sebelum mendaftarkan penyedia. Namun, sangat sulit untuk men-debug penyedia yang tidak terdaftar di WMI. Menentukan antarmuka untuk penyedia Anda juga membantu menguraikan tujuan dan struktur penyedia. Oleh karena itu, mendaftarkan penyedia Anda membantu Anda merancang penyedia Anda.

Hanya administrator yang dapat mendaftarkan atau menghapus penyedia.

Penyedia harus terdaftar untuk semua jenis fungsi penyedia yang berbeda yang dilakukannya. Hampir semua penyedia menyediakan instans kelas yang mereka tentukan, tetapi mereka juga dapat menyediakan data properti, metode, peristiwa, atau kelas. Penyedia juga dapat terdaftar sebagai penyedia konsumen peristiwa atau penyedia penghitung kinerja. Disarankan agar Anda menggabungkan semua fungsionalitas penyedia dalam satu penyedia daripada memiliki banyak penyedia terpisah untuk setiap jenis. Contohnya adalah penyedia Registri Sistem, yang menyediakan metode dan instans, dan penyedia Kuota Disk, yang menyediakan instans, metode, dan peristiwa.

Penyedia harus terdaftar untuk semua jenis fungsi penyedia yang berbeda yang dilakukannya. Hampir semua penyedia menyediakan instans kelas yang mereka tentukan, tetapi mereka juga dapat menyediakan data properti, metode, peristiwa, atau kelas. Penyedia juga dapat terdaftar sebagai penyedia konsumen peristiwa atau penyedia penghitung kinerja.

Instans __Win32Provider yang sama digunakan untuk setiap jenis pendaftaran:

Contoh: Membuat dan Mendaftarkan Instans Penyedia

Contoh berikut menunjukkan file MOF yang membuat dan mendaftarkan instans penyedia Registri Sistem di namespace root\cimv2. Ini menetapkan alias $Reg ke penyedia untuk menghindari nama jalur panjang yang diperlukan dalam instans dan pendaftaran metode. Untuk informasi selengkapnya, lihat Membuat 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);
};

Contoh: Mendaftarkan Penyedia

Prosedur berikut menjelaskan cara mendaftarkan penyedia.

Untuk mendaftarkan penyedia

  1. Daftarkan penyedia sebagai server COM.

    Jika perlu, Anda mungkin perlu membuat entri registri. Proses ini berlaku untuk semua server COM dan tidak terkait dengan WMI. Untuk informasi selengkapnya, lihat bagian COM di dokumentasi Microsoft Windows Software Development Kit (SDK).

  2. Buat file MOF yang berisi instans __Win32Provider dan instans kelas yang berasal dari __ProviderRegistration secara langsung atau tidak langsung, seperti __InstanceProviderRegistration. Hanya administrator yang dapat mendaftarkan atau menghapus penyedia dengan membuat instans kelas yang berasal dari __Win32Provider atau __ProviderRegistration.

  3. Atur HostingModel dalam instans __Win32Provider sesuai dengan nilai dalam model Hosting.

    Catatan

    Kecuali penyedia memerlukan hak istimewa tinggi dari akun LocalSystem, properti __Win32Provider.HostingModel harus diatur ke "NetworkServiceHost". Untuk informasi selengkapnya, lihat Hosting dan Keamanan Penyedia.

     

    Contoh MOF berikut dari contoh lengkap menunjukkan kode yang membuat instans __Win32Provider.

    instance of __Win32Provider as $Reg
    {
    Name = "RegProv";        
    CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
    HostingModel = "NetworkServiceHost:LocalServiceHost";
    };
    
  4. Instans kelas yang diturunkan baik secara langsung maupun tidak langsung dari __ProviderRegistration, untuk menjelaskan implementasi logis penyedia. Penyedia dapat didaftarkan untuk beberapa jenis fungsionalitas yang berbeda. Contoh di atas mendaftarkan RegProv sebagai instans dan penyedia metode. Tetapi jika RegProv mendukung fungsionalitas, regProv juga dapat didaftarkan sebagai penyedia properti atau peristiwa. Tabel berikut mencantumkan kelas yang mendaftarkan fungsionalitas penyedia.

    Kelas pendaftaran penyedia Deskripsi
    __InstanceProviderRegistration Mendaftarkan penyedia instans.
    __EventProviderRegistration Mendaftarkan penyedia peristiwa.
    __EventConsumerProviderRegistration Mendaftarkan penyedia konsumen peristiwa.
    __MethodProviderRegistration Mendaftarkan penyedia metode.
    __PropertyProviderRegistration Mendaftarkan penyedia properti.

     

  5. Tempatkan file MOF ke direktori permanen.

    Biasanya, Anda harus menempatkan file di direktori penginstalan penyedia.

  6. Kompilasi file MOF menggunakan mofcomp atau antarmuka IMofCompiler .

    Untuk informasi selengkapnya, lihat Mengkompilasi File MOF.

    Windows 8 dan Windows Server 2012: Saat menginstal penyedia, baik mofcomp maupun antarmuka IMofCompiler memperlakukan kualifikasi [Key] dan [Static] sebagai benar jika mereka ada, terlepas dari nilai sebenarnya. Kualifikasi lain diperlakukan sebagai false jika ada tetapi tidak secara eksplisit diatur ke true.

Mengembangkan Penyedia WMI

Mengatur Deskriptor Keamanan Namepace

Mengamankan Penyedia Anda