Bagikan melalui


Penyedia::Metode ExecQuery (provider.h)

[Kelas Penyedia adalah bagian dari Kerangka Kerja Penyedia WMI yang sekarang dipertimbangkan dalam status akhir, dan tidak ada pengembangan, peningkatan, atau pembaruan lebih lanjut yang akan tersedia untuk masalah terkait non-keamanan yang memengaruhi pustaka ini. API MI harus digunakan untuk semua pengembangan baru.]

Metode ExecQuery dipanggil oleh WMI untuk memproses kueri WMI Query Language (WQL).

Sintaks

HRESULT ExecQuery(
        MethodContext     *pMethodContext,
  [ref] CFrameworkQuery & cQuery,
        long              lFlags
);

Parameter

pMethodContext

Arahkan ke objek konteks untuk panggilan ini. Nilai ini berisi properti IWbemContext yang ditentukan oleh klien. Selain itu, pointer ini harus digunakan sebagai parameter untuk setiap panggilan kembali ke WMI.

[ref] cQuery

Penunjuk ke kueri yang telah diurai oleh kerangka kerja penyedia.

lFlags

Bitmask bendera dengan informasi tentang operasi eksekusi kueri. Ini adalah nilai yang ditentukan oleh klien dalam metode IWbemServices::ExecQuery .

Bendera berikut ditangani oleh (dan difilter) oleh WMI:

  • WBEM_FLAG_ENSURE_LOCATABLE
  • WBEM_FLAG_FORWARD_ONLY
  • WBEM_FLAG_BIDIRECTIONAL
  • WBEM_FLAG_USE_AMENDED_QUALIFIERS
  • WBEM_FLAG_RETURN_IMMEDIATELY
  • WBEM_FLAG_PROTOTYPE

Menampilkan nilai

Implementasi penyedia kerangka kerja default dari metode ini mengembalikan WBEM_E_PROVIDER_NOT_CAPABLE ke metode panggilan. Metode IWbemServices::ExecQuery mencantumkan nilai pengembalian umum, meskipun Anda dapat memilih untuk mengembalikan kode pengembalian COM apa pun.

Keterangan

WMI sering memanggil ExecQuery sebagai respons terhadap panggilan klien ke IWbemServices::ExecQuery, di mana klien meneruskan daftar properti yang dipilih atau klausa WHERE. WMI juga dapat memanggil ExecQuery jika kueri klien berisi pernyataan "ASSOCIATORS OF" atau "REFERENCES OF" yang menjelaskan kelas Anda. Jika implementasi ExecQuery Anda mengembalikan WBEM_E_NOT_SUPPORTED, klien bergantung pada WMI untuk menangani kueri.

WMI menangani kueri dengan memanggil implementasi CreateInstanceEnum Anda untuk menyediakan semua instans. WMI kemudian memfilter instans yang dihasilkan sebelum mengembalikan instans ke klien. Oleh karena itu, implementasi ExecQuery apa pun yang Anda buat harus lebih efisien daripada CreateInstanceEnum.

Berikut ini menjelaskan implementasi umum ExecQuery:

  1. Buat instans kosong kelas Anda menggunakan Provider::CreateNewInstance.
  2. Tentukan subset instans yang harus Anda buat.

    Anda dapat menggunakan metode seperti IsPropertyRequired untuk melihat properti apa yang diperlukan, dan GetValuesForProp untuk melihat instans apa yang diperlukan WMI. Metode lain yang menangani properti yang diminta termasuk CFrameworkQuery::GetRequiredProperties, CFrameworkQuery::AllPropertiesAreRequired, dan CFrameworkQuery::KeysOnly.

  3. Isi properti instans kosong menggunakan metode Set dari kelas CInstance , seperti CInstance::SetByte atau CInstance::SetStringArray.
  4. Kirim instans kembali ke klien menggunakan CInstance::Commit.
  5. Mengembalikan nilai pengembalian yang sesuai.

    Implementasi penyedia kerangka kerja ExecQuery default mengembalikan WBEM_E_PROVIDER_NOT_CAPABLE. Jika Anda menerapkan ExecQuery, Anda harus menggunakan nilai pengembalian umum yang tercantum dalam IWbemServices::ExecQuery. Namun, jika perlu, Anda dapat mengembalikan kode pengembalian COM apa pun.

WMI tidak mengirim kueri "ASSOCIATORS OF" atau "REFERENCES OF" ke penyedia kerangka kerja. Sebaliknya, WMI menggunakan skema untuk menentukan kelas mana yang terkait dengan kelas yang dimaksud, dan menghasilkan kueri WQL yang sesuai untuk mengambil hasilnya. Oleh karena itu, Anda tidak perlu mengodekan dukungan tambahan dari kueri "ASSOCIATORS OF" dan "REFERENCES OF".

Namun, Anda harus mengingat hal-hal berikut saat menulis penyedia kerangka kerja Anda:

Persyaratan

   
Klien minimum yang didukung Windows Vista
Server minimum yang didukung Windows Server 2008
Target Platform Windows
Header provider.h (termasuk FwCommon.h)
Pustaka FrameDyn.lib
DLL FrameDynOS.dll; FrameDyn.dll