Membuat Metode WMI

Untuk membuat metode WMI, tentukan parameter input dan output untuk metode . Parameter input dan output diwakili oleh kelas sistem WMI khusus __PARAMETERS. Untuk informasi selengkapnya, lihat Memanggil Metode dan Menulis Penyedia Metode.

Bagian berikut dibahas dalam topik ini:

Membuat Metode Kelas WMI di MOF

Dalam WMI, metode penyedia umumnya adalah tindakan berbeda yang terkait dengan objek yang diwakili kelas. Daripada mengubah nilai properti untuk menjalankan tindakan, metode harus dibuat. Misalnya, Anda dapat mengaktifkan atau menonaktifkan pusat informasi jaringan (NIC) yang diwakili oleh Win32_NetworkAdapter dengan menggunakan metode Aktifkan dan Nonaktifkan . Meskipun tindakan ini dapat direpresentasikan sebagai properti baca/tulis, desain yang disarankan adalah membuat metode . Atau, jika Anda ingin membuat status atau nilai terlihat untuk kelas , maka pendekatan yang disarankan adalah membuat properti baca/tulis daripada metode . Dalam Win32_NetworkAdapter, properti NetEnabled membuat status adaptor terlihat tetapi perubahan antar status dijalankan oleh metode Aktifkan atau Nonaktifkan .

Deklarasi kelas dapat mencakup deklarasi satu atau beberapa metode. Anda dapat memilih untuk mewarisi metode kelas induk, atau menerapkan metode Anda sendiri. Jika Anda memilih untuk menerapkan metode Anda sendiri, Anda harus mendeklarasikan metode dan menandai metode dengan tag kualifikasi tertentu.

Prosedur berikut menjelaskan cara mendeklarasikan metode di kelas yang tidak mewarisi dari kelas dasar.

Untuk mendeklarasikan metode

  1. Tentukan nama metode Anda antara kurung kurawal deklarasi kelas, diikuti oleh kualifikasi apa pun.

    Contoh kode berikut menguraikan sintaks untuk metode .

    [Dynamic, Provider ("ProviderName")]
    class ClassName
    {
        [Implemented] <ReturnType> <MethodName>
            ([ParameterDirection, IDQualifier] 
            <ParameterType> <ParameterName>);
    };
    
  2. Setelah selesai, masukkan kode Managed Object Format (MOF) Anda ke dalam repositori WMI dengan panggilan ke pengkompilasi MOF.

    Untuk informasi selengkapnya, lihat Mengkompilasi File MOF.

Daftar berikut mendefinisikan elemen deklarasi metode.

Penyedia

Menautkan penyedia tertentu ke deskripsi kelas Anda. Nilai kualifikasi Penyedia adalah nama penyedia, yang memberi tahu WMI di mana kode yang mendukung metode Anda berada. Penyedia juga harus menandai dengan kualifikasi Dinamis kelas apa pun yang memiliki instans dinamis. Sebaliknya, jangan gunakan Kualifikasi dinamis untuk menandai kelas yang berisi instans statis dengan metode Yang Diimplementasikan .

Dilaksanakan

Menyatakan bahwa Anda akan menerapkan metode, daripada mewarisi implementasi metode dari kelas induk. Secara default, WMI menyebarluaskan implementasi kelas induk ke kelas turunan kecuali kelas turunan menyediakan implementasi. Menghilangkan kualifikasi yang Diimplementasikan menunjukkan bahwa metode tidak memiliki implementasi di kelas tersebut. Jika Anda mendeklarasi ulang metode tanpa kualifikasi yang Diimplementasikan , WMI masih berasumsi bahwa Anda tidak akan menerapkan metode tersebut, dan memanggil implementasi metode kelas induk saat dipanggil. Dengan demikian, mendeklarasikan ulang metode di kelas turunan tanpa melampirkan kualifikasi yang Diimplementasikan hanya berguna ketika Anda menambahkan atau menghapus kualifikasi ke atau dari metode .

ReturnType

Menjelaskan nilai apa yang dikembalikan metode. Nilai yang dikembalikan untuk metode harus berupa objek Boolean, numerik, CHAR, STRING, DATETIME, atau skema. Anda juga dapat mendeklarasikan jenis pengembalian sebagai VOID, yang menunjukkan bahwa metode tidak mengembalikan apa pun. Namun, Anda tidak dapat mendeklarasikan array sebagai jenis nilai yang dikembalikan.

MethodName

Mendefinisikan nama metode . Setiap metode harus memiliki nama yang unik. WMI tidak mengizinkan dua metode dengan nama yang sama dan tanda tangan yang berbeda untuk ada dalam satu kelas atau dalam hierarki kelas. Dengan demikian, Anda juga tidak dapat membebani metode secara berlebihan.

ParameterDirection

Berisi kualifikasi yang menjelaskan apakah parameter adalah parameter input, parameter output, atau keduanya. Jangan gunakan nama parameter yang sama lebih dari satu kali sebagai parameter input atau lebih dari satu kali sebagai parameter output. Jika nama parameter yang sama muncul dengan kualifikasi Masuk dan Keluar , fungsionalitas secara konseptual sama dengan menggunakan kualifikasi Masuk, Keluar pada satu parameter. Namun, saat menggunakan deklarasi terpisah, parameter input dan output harus sama persis dalam semua hal lain, termasuk jumlah dan jenis kualifikasi ID , dan kualifikasi harus sama dan secara eksplisit dinyatakan untuk keduanya. Sangat disarankan untuk menggunakan kualifikasi Masuk, Keluar dalam satu deklarasi parameter.

IDQualifier

Berisi kualifikasi ID yang secara unik mengidentifikasi posisi setiap parameter dalam urutan parameter dalam metode . Secara default, pengkompilasi MOF secara otomatis menandai parameter dengan kualifikasi ID . Pengkompilasi menandai parameter pertama dengan nilai 0 (nol), parameter kedua nilai 1 (satu), dan sebagainya. Jika perlu, Anda dapat secara eksplisit menyatakan urutan ID dalam kode MOF Anda.

ParameterType

Menjelaskan jenis data apa yang dapat diterima metode. Anda dapat menentukan jenis parameter sebagai nilai data MOF apa pun, termasuk array, objek skema, atau referensi. Saat menggunakan array sebagai parameter, gunakan array sebagai tidak terikat atau dengan ukuran eksplisit.

ParameterName

Berisi nama parameter. Anda juga dapat memilih untuk menentukan nilai default parameter pada saat ini. Parameter yang tidak memiliki nilai awal tetap tidak ditetapkan.

Contoh kode berikut menjelaskan daftar parameter dan kualifikasi.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] sint32 InParam);
    [Implemented] 
    void MyMethod2 ([in, id(0)] sint32 InParam, 
       [out, id(1)] sint32 OutParam);
    [Implemented] 
    sint32 MyMethod3 ([in, out, id(0)] sint32 InOutParam);
};

Contoh kode berikut menjelaskan cara menggunakan array dalam parameter MOF.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk DiskParam[]);
    [Implemented] 
    sint32 MyMethod2 ([in, id(0)] Win32_LogicalDisk DiskParam[32]);
};

Contoh kode berikut menjelaskan penggunaan objek skema sebagai parameter dan nilai yang dikembalikan.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk 
        DiskParam);
    [Implemented] 
    Win32_LogicalDisk MyMethod2 ([in, id(0)] string DiskVolLabel);
};

Contoh kode berikut menjelaskan cara menyertakan dua referensi: satu ke instans kelas Win32_LogicalDisk dan yang lainnya ke instans jenis objek yang tidak diketahui.

[Dynamic, Provider("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk ref DiskRef);
    [Implemented] 
    sint32 MyMethod2 ([in, id(0)] object ref AnyObject);
};

Membuat Metode Kelas WMI di C++

Prosedur berikut menjelaskan cara membuat metode kelas WMI secara terprogram.

Untuk membuat metode kelas WMI secara terprogram

  1. Buat kelas tempat metode akan berada.

    Anda harus terlebih dahulu memiliki kelas untuk menempatkan metode sebelum membuat metode .

  2. Ambil dua kelas anak dari kelas sistem __PARAMETERS menggunakan IWbemServices::GetObject atau GetObjectAsync.

    Gunakan kelas anak pertama untuk menjelaskan dalam parameter, dan yang kedua untuk menjelaskan parameter keluar. Jika perlu, Anda dapat melakukan satu pengambilan diikuti dengan panggilan ke metode IWbemClassObject::Clone .

  3. Tulis parameter dalam ke kelas pertama, dan parameter keluar ke kelas kedua, menggunakan satu atau beberapa panggilan ke IWbemClassObject::P ut.

    Saat menjelaskan parameter ke metode , amati aturan dan batasan berikut:

    • Perlakukan parameter [in, out] sebagai entri terpisah, satu di objek yang berisi dalam parameter dan satu di objek yang berisi parameter luar.

    • Selain kualifikasi [in, out], kualifikasi yang tersisa harus sama persis.

    • Tentukan kualifikasi ID , mulai dari 0 (nol), satu untuk setiap parameter.

      Urutan parameter input atau output ditetapkan oleh nilai kualifikasi ID pada setiap parameter. Semua argumen input harus mendahului argumen output apa pun. Mengubah urutan parameter input dan output metode saat memperbarui penyedia metode yang ada dapat menyebabkan aplikasi yang memanggil metode gagal. Tambahkan parameter input baru di akhir parameter yang ada daripada menyisipkannya dalam urutan yang sudah dibuat.

      Pastikan untuk tidak membiarkan celah dalam urutan kualifikasi ID .

    • Tempatkan nilai yang dikembalikan di kelas out-parameters sebagai properti bernama ReturnValue.

      Ini mengidentifikasi properti sebagai nilai pengembalian metode. Jenis CIM properti ini adalah jenis pengembalian metode. Jika metode memiliki jenis pengembalian kekosongan, maka tidak memiliki properti ReturnValue sama sekali. Selain itu, properti ReturnValue tidak dapat memiliki kualifikasi ID seperti argumen metode . Menetapkan kualifikasi ID ke properti ReturnValue menghasilkan kesalahan WMI.

    • Ekspreskan nilai parameter default apa pun untuk properti di kelas .

  4. Tempatkan kedua objek __PARAMETERS ke kelas induk dengan panggilan ke IWbemClassObject::P utMethod.

    Satu panggilan ke PutMethod dapat menempatkan objek __PARAMETERS ke dalam kelas.

Membuat Kelas