IWbemHiPerfProvider::QueryInstances メソッド (wbemprov.h)
IWbemHiPerfProvider::QueryInstances メソッドは、指定された IWbemObjectSink インスタンスを使用して、指定したクラスのインスタンスを返します。 メソッドは直ちにを返す必要があります。 IWbemObjectSink インターフェイスは、結果を指定するために使用されます。
構文
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 からのリターン コードまたは pResponseHandler の SetStatus メソッドの呼び出しを通じて、成功または失敗を報告できます。 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 |
こちらもご覧ください
インスタンス プロバイダーをハイパフォーマンス プロバイダーに変換する