Bagikan melalui


Melakukan Panggilan ke WMI

Penyedia dapat memanggil metode yang diterapkan oleh WMI dari dalam implementasi metode mereka. Namun, ada pertimbangan khusus ketika penyedia memanggil implementasi WMI dari metode IWbemServices dari 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 penyedia memiliki parameter pCtx , penunjuk ke implementasi antarmuka IWbemContext . Ketika WMI memanggil penyedia, WMI meneruskan pointer 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 dan pernyataan #include berikut 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 mengeluarkan panggilan apa pun ke WMI yang meminta modifikasi data saat melayani permintaan baca. Satu-satunya penyedia yang merupakan pengecualian untuk aturan ini adalah penyedia pendorongan. Penyedia push adalah penyedia kelas yang menyimpan data di repositori WMI dan bergantung pada WMI untuk menangani permintaan dari klien. Saat melayani permintaan baca, penyedia push dapat memperbarui repositori WMI, tetapi harus mengatur parameter lFlags ke WBEM_FLAG_OWNER_UPDATE dalam panggilan IWbemServices yang sesuai.

Penyedia acara tidak boleh melakukan 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 Namepace

Mengamankan Penyedia Anda