IWbemServices::CreateClassEnumAsync 메서드(wbemcli.h)

IWbemServices::CreateClassEnumAsync 메서드는 클래스 공급자가 지원하는 모든 클래스의 열거형을 반환합니다. 클래스 공급자는 처음부터 각 클래스 정의를 만들고 요청된 클래스의 하위 클래스만 반환합니다. 비동기 메서드인 CreateClassEnumAsync는 상태 메시지를 즉시 반환한 다음, 필요한 경우 pResponseHandler 매개 변수를 통해 전달된 싱크를 업데이트합니다.

호출이 성공하면 WMI는 포인터 pResponseHandler에서 AddRef를 호출하고 즉시 반환한 다음 pResponseHandler – > 쿼리가 충족될 때까지 클래스 정의가 있는 다른 스레드에서 표시를 비동기적으로 호출합니다.

구문

HRESULT CreateClassEnumAsync(
  [in] const BSTR      strSuperclass,
  [in] long            lFlags,
  [in] IWbemContext    *pCtx,
  [in] IWbemObjectSink *pResponseHandler
);

매개 변수

[in] strSuperclass

NULL 또는 blank가 아닌 경우 이 매개 변수는 부모 클래스 이름을 지정합니다. 이 클래스의 하위 클래스인 클래스만 열거자에 반환됩니다. NULL 또는 blank이고 lFlagsWBEM_FLAG_SHALLOW 경우 상위 클래스가 없는 최상위 클래스만 반환됩니다. NULL이거나 비어 있고 lFlag가WBEM_FLAG_DEEP 경우 네임스페이스 내의 모든 클래스가 반환됩니다.

[in] lFlags

다음 값 중 하나 이상이 유효합니다.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

이 플래그가 설정되면 WMI(Windows Management Instrumentation)는 현재 연결 로캘의 지역화된 네임스페이스에 저장된 수정된 한정자를 검색합니다. 설정하지 않으면 직접 네임스페이스에 저장된 한정자만 검색됩니다.

WBEM_FLAG_BIDIRECTIONAL

이 플래그를 사용하면 클라이언트가 열거자를 해제할 때까지 WMI가 열거형 개체에 대한 포인터를 유지합니다.

WBEM_FLAG_DEEP

이 플래그는 열거형에 이 클래스와 모든 하위 클래스를 계층 구조에 포함하도록 강제합니다.

WBEM_FLAG_SHALLOW

이 플래그는 이 클래스에서 찾을 수 없는 속성을 제공하는 하위 클래스의 모든 인스턴스를 제외하고 이 클래스의 순수 인스턴스만 포함하도록 열거형을 강제로 적용합니다.

WBEM_FLAG_SEND_STATUS

이 플래그는 IWbemObjectSink::SetStatus의 클라이언트 구현을 통해 중간 상태 보고서를 수신하도록 WMI에 요청을 등록합니다. 공급자 구현은 동작을 변경하려면 이 플래그에 대한 중간 상태 보고를 지원해야 합니다.

참고strSuperclassNULL 이거나 비어 있고 WBEM_FLAG_DEEP 지정되면 모든 클래스가 반환됩니다.
 

[in] pCtx

일반적으로 NULL입니다. 그렇지 않으면 요청된 클래스를 반환하는 공급자가 사용할 수 있는 IWbemContext 개체에 대한 포인터입니다. 컨텍스트 개체의 값은 공급자에 대한 설명서에 지정해야 합니다. 이 매개 변수에 대한 자세한 내용은 WMI 호출을 참조하세요.

[in] pResponseHandler

IWbemObjectSink의 호출자 구현에 대한 포인터입니다. 이 처리기는 IWbemObjectSink::Indicate 메서드를 사용하여 사용할 수 있게 되면 개체를 받습니다. 사용할 수 있는 개체가 없으면 WMI에서 IWbemObjectSink::SetStatus 메서드를 호출합니다. 오류 코드가 반환되면 제공된 IWbemObjectSink 포인터가 사용되지 않습니다. WBEM_S_NO_ERROR 반환되면 작업 결과를 나타내기 위해 사용자 IWbemObjectSink 구현이 호출됩니다. WMI는 WBEM_S_NO_ERROR 반환할 때만 포인터에서 AddRef를 호출합니다. 오류 코드가 반환되면 참조 수가 항목 없음과 동일합니다. 이 매개 변수에 대한 자세한 설명은 메서드 호출을 참조하세요.

반환 값

이 메서드는 메서드 호출의 상태를 나타내는 HRESULT를 반환합니다. 오류가 발생하면 COM 함수 GetErrorInfo에서 사용 가능한 정보를 얻을 수 있습니다. 네트워크 문제로 인해 WMI에 대한 원격 연결이 끊어지는 경우 COM 관련 오류 코드를 반환할 수 있습니다. CreateClassEnumAsync가 WBEM_S_NO_ERROR 반환하는 경우 WMI는 응답 처리기의 SetStatus 메서드에서 결과를 기다립니다. WMI는 로컬 연결에서 또는 원격 연결 제한 시간이 발생할 때까지 무기한 대기합니다. 다음 목록에는 HRESULT에 포함된 값이 나열되어 있습니다.

설명

콜백은 클라이언트가 요구하는 것과 동일한 인증 수준에서 반환되지 않을 수 있으므로 비동기 통신 대신 반동기를 사용하는 것이 좋습니다. 비동기 통신이 필요한 경우 메서드 호출을 참조하세요.

메서드를 반동적으로 사용하는 방법에 대한 자세한 내용은 IWbemServices::CreateClassEnum메서드 호출을 참조하세요.

예제

다음 코드 예제에서는 CreateClassEnumAsync를 구현하는 방법을 보여줍니다.

HRESULT CStdProvider::CreateClassEnumAsync( 
            /* [in] */ BSTR strSuperclass,
            /* [in] */ long lFlags,
            /* [in] */ IWbemContext __RPC_FAR *pCtx,
            /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
            )
{
    IWbemClassObject *pClass = 0;

    // Assume there is an IWbemServices pointer available (m_pSvc).
    // Retrieve an 'empty' object that will be built up
    // into the class definition.
    
    HRESULT hRes = m_pSvc->GetObject(NULL, 0, NULL, &pClass, 0);
    if (hRes)
    {
        return hRes;
    }

    // Prepare an empty object to receive the class definition.
        IWbemClassObject *pNextClass = 0;
        hRes = pClass->Clone(&pNextClass);

    // Now loop through the private source of class definitions
    // and create each class.
    while(hRes)
    {
        // Create the class definition elsewhere.
        // For example, call a function that creates a definition:
        // FillClassDef(pNextClass);

        // Deliver the class to WMI.
        pResponseHandler->Indicate(1, &pNextClass);
        pNextClass->Release( );

        // Prepare an empty object to receive the class definition.
        IWbemClassObject *pNextClass = 0;
        hRes = pClass->Clone(&pNextClass);     
    }

    pClass->Release();

    // Send a finish message to WMI.

    pResponseHandler->SetStatus(0, hRes, 0, 0);

    return hRes;
}

이전 예제에서 클래스 공급자는 WMI에서 스레드를 획득하여 필요한 작업을 수행합니다. 싱크 AddRef 메서드를 호출하고 결과 집합의 개체를 전달하는 다른 스레드를 만들 수 있습니다. 다른 스레드를 만들면 현재 스레드가 스레드 풀을 고갈하지 않고 WMI로 돌아갈 수 있습니다. 공급자가 단일 스레드 디자인 또는 이중 스레드 디자인을 선택하는지 여부는 공급자가 WMI 스레드를 사용하려는 시간에 따라 달라집니다. 고정된 규칙이 없습니다. 실험은 디자인이 WMI 성능에 미치는 영향을 결정하는 데 도움이 될 수 있습니다.

요구 사항

   
지원되는 최소 클라이언트 Windows Vista
지원되는 최소 서버 Windows Server 2008
대상 플랫폼 Windows
헤더 wbemcli.h(Wbemidl.h 포함)
라이브러리 Wbemuuid.lib
DLL Fastprox.dll; Esscli.dll; FrameDyn.dll; FrameDynOS.dll; Ntevt.dll; Stdprov.dll; Viewprov.dll; Wbemcomn.dll; Wbemcore.dll; Wbemess.dll; Wbemsvc.dll; Wmipicmp.dll; Wmidcprv.dll; Wmipjobj.dll; Wmiprvsd.dll

추가 정보

메서드 호출

IWbemObjectSink

IWbemServices

IWbemServices::CreateClassEnum

오류 코드 검색