다음을 통해 공유


IWbemHiPerfProvider::QueryInstances 메서드(wbemprov.h)

IWbemHiPerfProvider::QueryInstances 메서드는 제공된 IWbemObjectSink instance 사용하여 지정된 클래스의 인스턴스를 반환합니다. 메서드는 즉시 반환되어야 합니다. 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; 그렇지 않으면 하나 이상의 동적 클래스 공급자에 필요한 IWbemContext 개체에 대한 포인터입니다. 컨텍스트 개체의 값은 공급자 설명서에 지정해야 합니다. 자세한 내용은 WMI 호출을 참조하세요.

[in] pSink

클라이언트가 IWbemServices의 비동기 메서드에 제공하는 IWbemObjectSink 구현에 대한 포인터입니다.

반환 값

이 메서드는 메서드 호출의 상태를 나타내는 HRESULT를 반환합니다. 다음 목록에는 HRESULT 내에 포함된 값이 나열되어 있습니다.

HiPerf 공급자는 QueryInstances의 반환 코드 또는 pResponseHandlerSetStatus 메서드 호출을 통해 성공 또는 실패를 보고할 수 있습니다. 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

추가 정보

WMI 공급자 개발

IWbemHiPerfProvider

인스턴스 공급자를 고성능 공급자로 만들기

성능 카운터 공급자

인스턴스 공급자 작성