IWbemHiPerfProvider::QueryInstances 메서드(wbemprov.h)
IWbemHiPerfProvider::QueryInstances 메서드는 제공된 IWbemObjectSink instance 사용하여 지정된 클래스의 인스턴스를 반환합니다. 메서드는 즉시 반환되어야 합니다. 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; 그렇지 않으면 하나 이상의 동적 클래스 공급자에 필요한 IWbemContext 개체에 대한 포인터입니다. 컨텍스트 개체의 값은 공급자 설명서에 지정해야 합니다. 자세한 내용은 WMI 호출을 참조하세요.
[in] pSink
클라이언트가 IWbemServices의 비동기 메서드에 제공하는 IWbemObjectSink 구현에 대한 포인터입니다.
반환 값
이 메서드는 메서드 호출의 상태를 나타내는 HRESULT를 반환합니다. 다음 목록에는 HRESULT 내에 포함된 값이 나열되어 있습니다.
HiPerf 공급자는 QueryInstances의 반환 코드 또는 pResponseHandler의 SetStatus 메서드 호출을 통해 성공 또는 실패를 보고할 수 있습니다. SetStatus 메서드를 호출하는 경우 pResponseHandler를 통해 전송된 반환 코드가 QueryInstances 반환 코드보다 우선합니다.
설명
WMI는 IWbemServices::CreateInstanceEnum 또는 IWbemServices::CreateInstanceEnumAsync 요청에 대한 응답으로 QueryInstances를 호출합니다.
결과 집합의 끝을 나타내기 위해 IWbemObjectSink::SetStatus 메서드가 호출됩니다. 오류 조건이 발생하면 IWbemObjectSink::Indicate 에 대한 중간 호출 없이 IWbemObjectSink::SetStatus를 호출할 수도 있습니다.
예제
다음 코드 예제에서는 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 포함) |
라이브러리 | Wbemuuid.lib |
DLL | Wmiprvsd.dll |
추가 정보
인스턴스 공급자를 고성능 공급자로 만들기