IWbemServices::CreateInstanceEnumAsync method (wbemcli.h)

Metode IWbemServices::CreateInstanceEnumAsync membuat enumerator yang secara asinkron mengembalikan instans kelas tertentu sesuai dengan kriteria pilihan yang ditentukan pengguna. Metode ini mendukung kueri Bahasa Kueri WMI (WQL) sederhana. Kueri yang lebih kompleks dapat diproses menggunakan metode IWbemServices::ExecQueryAsync .

Sintaks

HRESULT CreateInstanceEnumAsync(
  [in] const BSTR      strFilter,
  [in] long            lFlags,
  [in] IWbemContext    *pCtx,
  [in] IWbemObjectSink *pResponseHandler
);

Parameter

[in] strFilter

BSTR valid yang berisi nama kelas tempat instans diinginkan. Parameter ini tidak boleh NULL.

[in] lFlags

Parameter ini bisa menjadi salah satu nilai berikut.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

Jika bendera ini diatur, Windows Management Instrumentation (WMI) mengambil kualifikasi yang diubah yang disimpan di namespace layanan lokal koneksi saat ini. Jika tidak diatur, hanya kualifikasi yang disimpan di namespace langsung yang diambil.

WBEM_FLAG_DEEP

Bendera ini memaksa enumerasi untuk menyertakan instans ini dan semua subkelas dalam hierarki.

WBEM_FLAG_SHALLOW

Bendera ini memaksa enumerasi untuk hanya menyertakan instans murni dari kelas ini, tidak termasuk semua instans subkelas, yang menyediakan properti yang tidak ditemukan di kelas ini.

WBEM_FLAG_SEND_STATUS

Bendera ini mendaftar dengan Manajemen Windows permintaan untuk menerima laporan status perantara melalui implementasi klien IWbemObjectSink::SetStatus. Implementasi penyedia harus mendukung pelaporan status menengah agar bendera ini mengubah perilaku.

WBEM_FLAG_BIDIRECTIONAL

Bendera ini menyebabkan Manajemen Windows mempertahankan penunjuk ke objek enumerasi hingga klien merilis enumerator.

WBEM_FLAG_DIRECT_READ

Bendera ini menyebabkan akses langsung ke penyedia untuk kelas yang ditentukan tanpa memperhatikan kelas atau subkelas induknya.

[in] pCtx

Biasanya NULL. Jika tidak, ini adalah penunjuk ke objek IWbemContext yang dapat digunakan oleh penyedia yang mengembalikan instans yang diminta. Nilai dalam objek konteks harus ditentukan dalam dokumentasi untuk penyedia yang dimaksud. Untuk informasi selengkapnya, lihat Melakukan Panggilan ke WMI.

[in] pResponseHandler

Arahkan ke implementasi penelepon IWbemObjectSink. Handler ini menerima objek saat tersedia. Jika ada kode kesalahan yang dikembalikan, maka penunjuk IWbemObjectSink yang disediakan tidak digunakan. Jika WBEM_S_NO_ERROR dikembalikan, implementasi IWbemObjectSink pengguna akan dipanggil untuk menunjukkan hasil operasi. Manajemen Windows hanya memanggil AddRef pada pointer jika WBEM_S_NO_ERROR kembali. Dalam kasus di mana kode kesalahan kembali, jumlah referensi sama dengan pada entri. Untuk informasi selengkapnya, lihat Memanggil Metode.

Mengembalikan nilai

Metode ini mengembalikan HRESULT yang menunjukkan status panggilan metode. Daftar berikut mencantumkan nilai yang terkandung dalam HRESULT.

Jika gagal, Anda dapat memperoleh informasi lebih lanjut dari fungsi COM GetErrorInfo.

Kode kesalahan khusus COM juga dapat dikembalikan jika masalah jaringan menyebabkan Anda kehilangan koneksi jarak jauh ke Manajemen Windows.

Penyedia instans dapat melaporkan keberhasilan atau kegagalan dengan kode pengembalian dari CreateInstanceEnumAsync, atau melalui panggilan ke SetStatus yang dilakukan melalui pResponseHandler. Jika Anda memilih untuk memanggil SetStatus, kode pengembalian yang dikirim melalui pResponseHandler lebih diutamakan.

Jika CreateInstanceEnumAsync mengembalikan WBEM_S_NO_ERROR, WMI menunggu hasil dari metode SetStatus penangan respons. WMI menunggu tanpa batas waktu pada koneksi lokal, atau sampai waktu koneksi jarak jauh habis.

Keterangan

Metode IWbemObjectSink::SetStatus dipanggil untuk menunjukkan akhir kumpulan hasil. Ini juga dapat dipanggil tanpa intervensi panggilan ke IWbemObjectSink::Menunjukkan apakah kondisi kesalahan terjadi.

Karena panggilan balik mungkin tidak dikembalikan pada tingkat autentikasi yang sama dengan yang dibutuhkan klien, disarankan agar Anda menggunakan semisinkron alih-alih komunikasi asinkron.

Untuk informasi selengkapnya, lihat IWbemServices::CreateInstanceEnum dan Memanggil Metode.

Contoh

Contoh berikut menunjukkan kepada Anda cara mengimplementasikan CreateInstanceEnumAsync.

#define NUM_OF_INSTANCES 3

HRESULT CStdProvider::CreateInstanceEnumAsync( 
            /* [in] */ BSTR strClass,
            /* [in] */ long lFlags,
            /* [in] */ IWbemContext __RPC_FAR *pCtx,
            /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
            )
{
    IWbemClassObject *pClass = 0; 
    IWbemClassObject *pNextInst = 0;

    // Assume there is an IWbemServices pointer available to
    // retrieve the class definition.
    HRESULT hRes = m_pSvc->GetObject(strClass, 0, NULL, &pClass, 0);
    if (hRes)
        return hRes;

    // Now loop through the private source and create each instance.
    for (int i = 0; i < NUM_OF_INSTANCES; i++)
    {
         // Prepare an empty object to receive the class definition.
         pClass->SpawnInstance(0, &pNextInst);

         // Create the instance.
         // For example, create the instance in a
         // FillInst method you implement:
         /*FillInst(pNextInst);*/

         // Deliver the class to WMI.
         pResponseHandler->Indicate(1, &pNextInst);
         pNextInst->Release();
    }

    // Send a finish message to WMI.
    pResponseHandler->SetStatus(0, WBEM_S_NO_ERROR, 0, 0);

    // Free memory resources.
    SysFreeString(strClass);
    pClass->Release();
    m_pSvc->Release();

    return WBEM_S_NO_ERROR;
}

Dalam contoh sebelumnya, penyedia instans memperoleh utas dari WMI untuk melakukan operasi yang diperlukan. Anda mungkin ingin memanggil metode AddRef sink dan membuat utas lain untuk mengirimkan objek dalam tataan hasil. Membuat utas lain memungkinkan utas saat ini untuk kembali ke WMI tanpa menguras kumpulan utas. Apakah penyedia memilih desain utas tunggal atau tidak daripada desain utas ganda tergantung pada berapa lama penyedia berencana untuk menggunakan utas WMI. Tidak ada aturan tetap. Eksperimen dapat membantu Anda menentukan bagaimana desain Anda memengaruhi performa WMI.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista
Server minimum yang didukung Windows Server 2008
Target Platform Windows
Header wbemcli.h (termasuk Wbemidl.h)
Pustaka Wbemuuid.lib
DLL Fastprox.dll; Esscli.dll; FrameDyn.dll; FrameDynOS.dll; Ntevt.dll; Stdprov.dll; Viewprov.dll; Wbemcomn.dll; Wbemcore.dll; Wbemess.dll; Wbemsvc.dll; Wmipicmp.dll; Wmidcprv.dll; Wmipjobj.dll; Wmiprvsd.dll

Lihat juga

Memanggil Metode

IWbemServices

IWbemServices::CreateInstanceEnum