IWbemHiPerfProvider::QueryInstances メソッド (wbemprov.h)

IWbemHiPerfProvider::QueryInstances メソッドは、指定された IWbemObjectSink インスタンスを使用して、指定したクラスのインスタンスを返します。 メソッドは直ちにを返す必要があります。 IWbemObjectSink インターフェイスは、結果を指定するために使用されます。

メモ プロバイダーがこのメソッドを実装していない場合は、 WBEM_E_PROVIDER_NOT_CAPABLEを返す必要があります。
 

構文

HRESULT QueryInstances(
  [in] IWbemServices   *pNamespace,
  [in] WCHAR           *wszClass,
  [in] long            lFlags,
  [in] IWbemContext    *pCtx,
  [in] IWbemObjectSink *pSink
);

パラメーター

[in] pNamespace

プロバイダーからの要求をサービスできる WMI への IWbemServices ポインター。 実行中に WMI にコールバックする必要がある場合、プロバイダーはこのポインターで AddRef を呼び出す必要があります。

[in] wszClass

インスタンスが返されるクラスを指定する WCHAR 文字列へのポインター。

[in] lFlags

フラグを含む整数。

[in] pCtx

通常 は NULL です。それ以外の場合は、1 つ以上の動的クラス プロバイダーに必要な IWbemContext オブジェクトへのポインター。 コンテキスト オブジェクトの値は、プロバイダーのドキュメントで指定する必要があります。 詳細については、「WMI を呼び出す」を参照してください。

[in] pSink

クライアントによって IWbemServices のいずれかの非同期メソッドに提供される IWbemObjectSink 実装へのポインター。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。 次の一覧は、 HRESULT 内に含まれる値の一覧です。

HiPerf プロバイダーは、QueryInstances からのリターン コードまたは pResponseHandlerSetStatus メソッドの呼び出しを通じて、成功または失敗を報告できます。 SetStatus メソッドを呼び出すと、pResponseHandler を介して送信されたリターン コードが QueryInstances リターン コードよりも優先されます。

注釈

WMI は、IWbemServices::CreateInstanceEnum または IWbemServices::CreateInstanceEnumAsync 要求に応答して QueryInstances を呼び出します。

IWbemObjectSink::SetStatus メソッドは、結果セットの末尾を示すために呼び出されます。 エラー状態が発生すると、 IWbemObjectSink::SetStatus が呼び出され、 IWbemObjectSink::Indicate の呼び出しが間もなく呼び出される場合もあります。

次のコード例は、 QueryInstances を実装する方法を示しています。

HRESULT CMyHiPerfProvider::QueryInstances(
    /* [in] */ IWbemServices* pNamespace,  
    /* [in] */ BSTR strClass,
    /* [in] */ long lFlags,
    /* [in] */ IWbemContext __RPC_FAR *pCtx,
    /* [in] */ IWbemObjectSink __RPC_FAR *pSink
)
{
   IWbemClassObject *pClass = 0;
   IWbemClassObject *pNextInst = 0;

   // The IWbemObjectSink interface must be
   // implemented in a class that you define. You then
   // must assign the pResponseHandler pointer
   // an instance of the class that implements
   // the IWbemObjectSink interface.
   IWbemObjectSink* pResponseHandler = 0;
   HRESULT hRes;

    // Use the namespace pointer to retrieve a class
    // definition.

   hRes = pNamespace ->GetObject(strClass, 0, NULL, &pClass, 0);
   if (WBEM_NO_ERROR==hRes)
       return hRes;


    // Now loop through the private source and create each instance.

     for (int i = 0 ; i < NUM_OF_INSTANCES ; i++)
    {
         hRes = pClass->SpawnInstance(0, &pNextInst);

         // Exit loop if no new instance is spawned
         if (WBEM_S_FALSE == hRes)
            break;

        if(NULL!=pNextInst)
       {
        // Create the instance.
        // For example, call a function (FillInst) that
        // assigns a value to the pNextInst pointer.
        /*FillInst(pNextInst);*/

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

   // Send a finish message to WMI.
    pResponseHandler->SetStatus(0, WBEM_S_NO_ERROR, 0, 0);
    // Free memory resources.
    pNamespace->Release();
    pClass->Release();
    SysFreeString(strClass);

  return WBEM_S_NO_ERROR;
}

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー wbemprov.h (Wbemidl.h を含む)
Library Wbemuuid.lib
[DLL] Wmiprvsd.dll

こちらもご覧ください

WMI プロバイダーの開発

IWbemHiPerfProvider

インスタンス プロバイダーをハイパフォーマンス プロバイダーに変換する

パフォーマンス カウンタ プロバイダ

インスタンス プロバイダーの作成