IWbemServices::P utClassAsync 메서드(wbemcli.h)

IWbemServices::P utClassAsync 메서드는 새 클래스를 만들거나 기존 클래스를 업데이트합니다. pObject 매개 변수로 지정된 클래스는 필요한 모든 속성 값으로 올바르게 초기화되어야 합니다. 호출이 즉시 반환됩니다. 성공 또는 실패는 pResponseHandler 매개 변수로 지정된 개체 싱크에 제공됩니다.

구문

HRESULT PutClassAsync(
  [in] IWbemClassObject *pObject,
  [in] long             lFlags,
  [in] IWbemContext     *pCtx,
  [in] IWbemObjectSink  *pResponseHandler
);

매개 변수

[in] pObject

클래스 정의를 포함하는 개체에 대한 포인터입니다.

[in] lFlags

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

WBEM_FLAG_USE_AMENDED_QUALIFIERS

이 플래그가 설정된 경우 WMI는 수정된 버전을 가진 한정자를 저장하지 않습니다. 이 플래그가 설정되지 않은 경우 이 개체가 지역화되지 않고 모든 한정자는 이 instance 함께 저장됩니다.

WBEM_FLAG_CREATE_OR_UPDATE

이 플래그를 사용하면 클래스가 없는 경우 이 클래스를 만들거나 이미 있는 경우 덮어씁니다.

WBEM_FLAG_UPDATE_ONLY

기존 클래스를 업데이트.

WBEM_FLAG_CREATE_ONLY

이 플래그는 클래스 만들기 전용입니다. 클래스가 이미 있는 경우 호출이 실패합니다.

WBEM_FLAG_SEND_STATUS

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

WBEM_FLAG_OWNER_UPDATE

푸시 공급자는 PutClassAsync 를 호출할 때 이 클래스가 변경되었음을 나타내기 위해 이 플래그를 지정해야 합니다.

WBEM_FLAG_UPDATE_COMPATIBLE

이 플래그를 사용하면 파생 클래스가 없고 해당 클래스에 대한 인스턴스가 없는 경우 클래스를 업데이트할 수 있습니다. 또한 변경 내용이 중요하지 않은 한정자(예: 설명 한정자)에만 해당되는 경우 모든 경우에 업데이트를 허용합니다. 이 호출의 기본 동작이며 이전 버전의 Windows Management와의 호환성에 사용됩니다. 클래스에 인스턴스가 있거나 중요한 한정자를 변경하면 업데이트가 실패합니다.

WBEM_FLAG_UPDATE_SAFE_MODE

이 플래그는 변경으로 인해 자식 클래스와 충돌하지 않는 한 자식 클래스가 있더라도 클래스를 업데이트할 수 있습니다. 이 플래그가 허용하는 업데이트의 예는 이전에 자식 클래스에서 언급되지 않은 기본 클래스에 새 속성을 추가하는 것입니다. 클래스에 인스턴스가 있는 경우 업데이트가 실패합니다.

WBEM_FLAG_UPDATE_FORCE_MODE

이 플래그는 충돌하는 자식 클래스가 있을 때 클래스를 강제로 업데이트합니다. 이 플래그를 강제로 업데이트하는 예는 클래스 한정자를 자식 클래스에 정의하고 기본 클래스가 기존 클래스와 충돌하는 동일한 한정자를 추가하려고 하는 경우입니다. 강제 모드에서는 자식 클래스에서 충돌하는 한정자를 삭제하여 이 충돌을 해결합니다.

[in] pCtx

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

[in] pResponseHandler

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

반환 값

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

다른 상태 또는 오류 코드는 pReponseHandler 매개 변수로 지정된 개체 싱크에 보고됩니다.

네트워크 문제로 인해 Windows Management에 대한 원격 연결이 끊어지는 경우에도 COM 관련 오류 코드가 반환될 수 있습니다.

PutInstanceAsyncWBEM_S_NO_ERROR 반환하는 경우 WMI는 응답 처리기의 SetStatus 메서드에서 결과를 기다립니다. WMI는 로컬 연결에서 또는 원격 연결 제한 시간이 발생할 때까지 무기한 대기합니다.

WBEM_E_FAILED 반환하면 다른 공급자가 클래스를 만들 기회가 없으므로 나중에 성공할 수 있는 방식으로 클래스 공급자가 실패한 경우에만 반환되어야 합니다.

참고 클라이언트 또는 공급자가 사용하는 동안 클래스 정의를 변경하면 예측할 수 없는 동작이 발생합니다. IWbemServices::P utClass 메서드는 현재 클래스를 사용하는 클라이언트 또는 공급자가 없는 경우에만 클래스를 만들거나 업데이트하는 데 사용해야 합니다.
 

설명

한 특정 클래스에 대해 여러 클래스 공급자가 설치된 경우 WMI는 해당 클래스를 만들 수 있는 클래스 공급자를 인식하지 않습니다.

결과 집합의 끝을 나타내기 위해 IWbemObjectSink::SetStatus 메서드가 호출됩니다. IWbemObjectSink::오류 조건이 발생하는지 여부를 나타내기 위한 중간 호출 없이 호출될 수도 있습니다.

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

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

예제

다음 코드 예제에서는 PutClassAsync의 간단한 구현을 설명합니다.

HRESULT CStdProvider::PutClassAsync( 
            /* [in] */ IWbemClassObject __RPC_FAR *pObject,
            /* [in] */ long lFlags,
            /* [in] */ IWbemContext __RPC_FAR *pCtx,
            /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
            )
{
    // You must implement the ClassIsValid function yourself to
    // determine if the class contains a valid instance
   if (ClassIsValid(lFlags, pObject))
   {
       return WBEM_S_NO_ERROR;
   }

   return WBEM_E_PROVIDER_NOT_CAPABLE;   
}

요구 사항

요구 사항
지원되는 최소 클라이언트 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

추가 정보

메서드 호출

클래스 만들기

IWbemServices

IWbemServices::PutClass