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
IWbemServices、プロバイダーからの要求をサービスできる WMI へのポインターを返します。 実行中に WMI コールバックする必要がある場合は、このポインターで addRef を呼び出す必要があります。
[in] wszClass
インスタンスが返されるクラスを指定する WCHAR 文字列へのポインター。
[in] lFlags
フラグを含む整数。
[in] pCtx
通常、NULL をします。それ以外の場合は、IWbemContext 1 つ以上の動的クラス プロバイダーで必要なオブジェクトへのポインター。 コンテキスト オブジェクトの値は、プロバイダーのドキュメントで指定する必要があります。 詳細については、「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 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | wbemprov.h (Wbemidl.h を含む) |
ライブラリ | Wbemuuid.lib |
DLL | Wmiprvsd.dll |
関連項目
WMI プロバイダー の開発
IWbemHiPerfProvider を する
インスタンス プロバイダーを High-Performance プロバイダーにする
インスタンス プロバイダー の作成の