Bagikan melalui


Melakukan Panggilan ke Antarmuka Manajemen Windows (WMI)

Penyedia dapat memanggil metode yang diterapkan oleh WMI dari dalam implementasi metode mereka. Namun, ada pertimbangan khusus ketika penyedia memanggil implementasi WMI dari metodeIWbemServicesdari dalam implementasinya sendiri dari metode yang sama. Pertimbangan ini penting terlepas dari apakah penyedia memanggil versi metode yang sinkron atau asinkron.

Setiap metode IWbemServices yang dapat diterapkan oleh penyedia memiliki parameter pCtx, yaitu penunjuk ke implementasi antarmuka IWbemContext. Ketika WMI memanggil penyedia, WMI meneruskan penunjuk yang valid dalam parameter ini. Penyedia harus selalu meneruskan pointer yang sama ini dalam panggilan apa pun ke WMI yang mereka lakukan saat melayani permintaan. Mengabaikan untuk mengatur pCtx dengan tepat dapat menyebabkan WMI memulai perulangan tak terbatas.

Contoh kode berikut menunjukkan cara yang benar untuk memanggil implementasi WMI GetObject dari dalam implementasi GetObjectAsync.

STDMETHODIMP CClassProv::GetObjectAsync (BSTR ObjectPath,
    long lFlags, IWbemContext *pCtx,
    IWbemObjectSink *pHandler)
{
  IWbemClassObject *pclObj = NULL;
  IWbemServices* m_pNamespace;
  HRESULT hr = m_pNamespace->GetObject(
      _bstr_t(L"AClass"), 0, pCtx, &pclObj, 
      NULL );
  pclObj->Release();
  return pHandler->SetStatus(0, hr, NULL, NULL);
}

Contoh kode C++ dalam topik ini memerlukan referensi berikut dan pernyataan #include untuk dikompilasi dengan benar.

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")

Penyedia instans, kelas, dan properti tidak boleh melakukan panggilan apa pun ke WMI yang meminta modifikasi data saat melayani permintaan baca. Satu-satunya pengecualian untuk aturan ini adalah penyedia push. Penyedia push adalah penyedia kelas yang menyimpan data di repositori WMI dan bergantung pada WMI untuk menangani permintaan dari klien. Ketika menangani permintaan pembacaan, penyedia push dapat memperbarui repositori WMI, tetapi harus menyetel parameter lFlags ke WBEM_FLAG_OWNER_UPDATE dalam panggilan IWbemServices yang sesuai.

Penyedia acara tidak boleh membuat perubahan kelas saat melayani panggilan. Mereka juga tidak dapat mengeluarkan panggilan terkait peristiwa apa pun, seperti memodifikasi filter peristiwa.

Mengembangkan Penyedia WMI

Mengatur Deskriptor Keamanan Namespace

Mengamankan Penyedia Anda