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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk