Metode IWbemServices::ExecMethodAsync (wbemcli.h)

Metode IWbemServices::ExecMethodAsync secara asinkron menjalankan metode yang diekspor oleh objek CIM. Panggilan segera kembali ke klien saat parameter masuk diteruskan ke penyedia yang sesuai tempatnya dijalankan. Informasi dan status dikembalikan ke pemanggil melalui sink objek yang disediakan.

Metode tidak diimplementasikan secara langsung oleh Manajemen Windows, tetapi diekspor oleh penyedia metode. Untuk kelas CIM tertentu, metode yang tersedia dan parameternya adalah bagian dari dokumentasi untuk penyedia yang dimaksud.

Sintaks

HRESULT ExecMethodAsync(
  [in] const BSTR       strObjectPath,
  [in] const BSTR       strMethodName,
  [in] long             lFlags,
  [in] IWbemContext     *pCtx,
  [in] IWbemClassObject *pInParams,
  [in] IWbemObjectSink  *pResponseHandler
);

Parameter

[in] strObjectPath

BSTR valid yang berisi jalur objek objek yang metodenya akan dijalankan. Anda dapat memanggil metode statis menggunakan nama kelas atau jalur objek ke instans. Penyedia metode dapat mengurai parameter jalur objek untuk menentukan kelas dan instans yang berisi definisi metode.

[in] strMethodName

Nama metode untuk objek .

[in] lFlags

WBEM_FLAG_SEND_STATUS mendaftar dengan Manajemen Windows permintaan untuk menerima laporan status menengah melalui implementasi klien IWbemObjectSink::SetStatus. Implementasi penyedia harus mendukung pelaporan status menengah agar bendera ini mengubah perilaku. Perhatikan bahwa bendera WBEM_FLAG_USE_AMENDED_QUALIFIERS tidak dapat digunakan di sini.

[in] pCtx

Biasanya NULL; jika tidak, ini adalah penunjuk ke objek IWbemContext yang dapat digunakan oleh penyedia yang menjalankan metode . Nilai dalam objek konteks harus ditentukan dalam dokumentasi untuk penyedia yang dimaksud. Untuk informasi selengkapnya tentang parameter ini, lihat Melakukan Panggilan ke WMI.

[in] pInParams

Dapat berupa NULL jika tidak ada parameter masuk yang diperlukan untuk menjalankan metode . Jika tidak, ini menunjuk ke objek IWbemClassObject yang berisi properti yang bertindak sebagai parameter masuk untuk eksekusi metode. Konten objek khusus metode, dan merupakan bagian dari spesifikasi untuk penyedia yang bersangkutan. Namun, objek yang paling umum adalah instans kelas sistem __Parameters . Untuk setiap parameter input ke metode yang akan dipanggil, ada satu properti non-sistem. Penyedia metode mengabaikan kualifikasi ID yang dilampirkan ke setiap parameter dalam metode , yang biasanya hanya digunakan oleh browser dan aplikasi serupa.

[in] pResponseHandler

Tidak boleh NULL. Sink objek menerima hasil panggilan metode. Parameter keluar dikirim ke IWbemObjectSink::Indicate. Objek yang paling umum dikembalikan adalah instans kelas sistem __Parameters . Untuk informasi selengkapnya tentang kode pengembalian, lihat bagian Keterangan. Saat menerapkan penyedia metode, Anda harus memanggil Menunjukkan untuk mengembalikan informasi parameter output sebelum memanggil IWbemObjectSink::SetStatus untuk melaporkan status akhir.

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 apa pun yang tersedia dari fungsi COM GetErrorInfo.

Kesalahan lain dilaporkan secara asinkron ke sink objek yang disediakan dalam parameter pReponseHandler .

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

Keterangan

Penyedia metode tunggal dapat menyediakan metode untuk banyak kelas dan instans. Penyedia metode harus berurusan dengan maksimal tiga nilai pengembalian.

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. Jika Anda memerlukan komunikasi asinkron, lihat Memanggil Metode.

Mengembalikan nilai Deskripsi
ExecMethodAsync (diperlukan) Menunjukkan apakah parameter input untuk metode yang diacu oleh parameter pInParams valid atau tidak.
Metode yang dipanggil (opsional) Tergantung pada metode . Nilai yang dikembalikan ditempatkan di properti ReturnValue dari instans __PARAMETERS yang mewakili parameter keluar dan dikembalikan melalui panggilan ke Tunjukkan.
Parameter metode yang dipanggil keluar (opsional) Tergantung pada metode . Parameter keluar ditempatkan di properti non-sistem dari instans __PARAMETERS dan dikembalikan melalui Menunjukkan.
 

Contoh

Contoh C++ berikut menunjukkan cara mengimplementasikan metode IWbemServices::ExecMethodAsync untuk metode Echo dari kelas TestMeth . Kelas TestMeth mendukung metode yang memiliki satu parameter input dan satu parameter output dan yang mengembalikan bilangan bulat 32-bit yang tidak ditandatangani. Implementasinya mengasumsikan bahwa hanya ada satu metode yang disebut Echo dan satu kelas yang berisinya. Demi keringkasan, tidak ada pemeriksaan kesalahan atau penguraian jalur objek.

STDMETHODIMP CMyMethodProvider::ExecMethodAsync(BSTR ObjectPath, 
    BSTR MethodName, long lFlags, IWbemContext* pCtx, 
    IWbemClassObject* pInParams, IWbemObjectSink* pResultSink)
{
    HRESULT hr;
    IWbemClassObject * pClass = NULL;
    IWbemClassObject * pOutClass = NULL;
    IWbemClassObject* pOutParams;

    // Allocate some BSTRs.

    BSTR ClassName = SysAllocString(L"TestMeth");    
    BSTR InputArgName = SysAllocString(L"sInArg");
    BSTR OutputArgName = SysAllocString(L"sOutArg");
    BSTR retValName = SysAllocString(L"ReturnValue");

    // Get the class object; this is hard-coded and matches the class
    // in the MOF.  A more sophisticated example would parse 
    // ObjectPath to determine the class and possibly the instance.
    // The m_pWbemSvcs pointer is of type IWbemServices*
    hr = m_pWbemSvcs->GetObject(ClassName, 0, pCtx, &pClass, NULL);

    // This method returns values, and so creates an instance of the
    // output argument class.

    hr = pClass->GetMethod(MethodName, 0, NULL, &pOutClass);
    pOutClass->SpawnInstance(0, &pOutParams);

    // Copy the input argument into the output object.

    VARIANT var;
    VariantInit(&var);

    // Get the input argument.
    pInParams->Get(InputArgName, 0, &var, NULL, NULL);   

    // Put it into the output object.
    pOutParams->Put(OutputArgName , 0, &var, 0);      

    long lLen = wcslen(var.bstrVal);
    VariantClear(&var);
    var.vt = VT_I4;
    var.lVal = lLen;
    // Special name for the return value.
    pOutParams->Put(retValName , 0, &var, 0); 

    // Send the output object back to the client by the sink. Then 
    // release the pointers and free the strings.

    hr = pResultSink->Indicate(1, &pOutParams);
    pOutParams->Release();
    pOutClass->Release();
    pClass->Release();
    SysFreeString(ClassName);
    SysFreeString(InputArgName);
    SysFreeString(OutputArgName);
    SysFreeString(retValName);
 
    // All done; now set the status.

    hr = pResultSink->SetStatus(0,WBEM_S_NO_ERROR,NULL,NULL);
    return WBEM_S_NO_ERROR;
}

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

IWbemCallResult::GetResultObject

IWbemServices

IWbemServices::ExecMethodAsync