IWbemServices::GetObjectAsync 메서드(wbemcli.h)
IWbemServices::GetObjectAsync 메서드는 경로에 따라 클래스 정의 또는 instance 개체를 검색합니다. 이는 호출이 즉시 반환되고 개체가 제공된 개체 싱크에 제공된다는 점을 제외하고 IWbemServices::GetObject 와 유사합니다.
현재 이 메서드는 IWbemServices 포인터와 연결된 네임스페이스에서만 개체를 검색합니다.
구문
HRESULT GetObjectAsync(
[in] const BSTR strObjectPath,
[in] long lFlags,
[in] IWbemContext *pCtx,
[in] IWbemObjectSink *pResponseHandler
);
매개 변수
[in] strObjectPath
검색할 개체의 경로입니다. instance 공급자의 경우 StrObjectPath는 다음 형식일 수 있습니다.
- 네임스페이스:Class.Key = "Value"
- Namespace:Class = "Value"
- Namespace:Class.Key = "Value", Key2 = "Value2"
NULL이면 새 클래스가 될 수 있는 빈 개체가 반환됩니다. 자세한 내용은 클래스 만들기를 참조하세요.
[in] lFlags
다음 플래그는 이 메서드의 동작에 영향을 미칩니다.
WBEM_FLAG_USE_AMENDED_QUALIFIERS
이 플래그가 설정되면 WMI는 현재 연결 로캘의 지역화된 네임스페이스에 저장된 수정된 한정자를 검색합니다. 설정하지 않으면 직접 네임스페이스에 저장된 한정자만 검색됩니다.
WBEM_FLAG_DIRECT_READ
이 플래그를 사용하면 부모 클래스 또는 서브클래스에 관계없이 지정된 클래스에 대한 공급자에 직접 액세스할 수 있습니다.
WBEM_FLAG_SEND_STATUS
클라이언트의 IWbemObjectSink::SetStatus 구현을 통해 중간 상태 보고서를 수신하도록 요청을 등록합니다. 공급자 구현은 동작을 변경하려면 이 플래그에 대한 중간 상태 보고를 지원해야 합니다.
[in] pCtx
일반적으로 NULL입니다. 그렇지 않으면 요청된 클래스 또는 instance 생성하는 공급자가 사용할 수 있는 IWbemContext 개체에 대한 포인터입니다. 컨텍스트 개체의 값은 해당 공급자에 대한 설명서에 지정해야 합니다. 이 매개 변수에 대한 자세한 내용은 WMI 호출을 참조하세요.
[in] pResponseHandler
호출자의 IWbemObjectSink 구현에 대한 포인터입니다. 이 처리기는 IWbemObjectSink::Indicate 메서드를 통해 사용할 수 있게 되면 요청된 개체를 받습니다. pObjParam 매개 변수에는 개체가 포함됩니다. 오류 코드가 반환되면 제공된 IWbemObjectSink 포인터가 사용되지 않습니다. WBEM_S_NO_ERROR 반환되면 작업의 결과를 나타내기 위해 사용자의 IWbemObjectSink 구현이 호출됩니다. Windows Management는 WBEM_S_NO_ERROR 반환되는 경우에만 포인터에 AddRef를 호출합니다. 오류 코드가 반환되는 경우 참조 수는 항목에서와 동일합니다. 이 매개 변수에 대한 자세한 내용은 메서드 호출을 참조하세요.
반환 값
이 메서드는 메서드 호출의 상태를 나타내는 HRESULT를 반환합니다. 다음 목록에는 HRESULT 내에 포함된 값이 나열되어 있습니다.
실패 시 COM 함수 GetErrorInfo GetErrorInfo에서 사용 가능한 정보를 가져올 수 있습니다.
네트워크 문제로 인해 Windows Management에 대한 원격 연결이 끊어지는 경우에도 COM 관련 오류 코드가 반환될 수 있습니다.
설명
instance 공급자를 구현할 때 PSDK의 WMI 섹션에 있는 개체 경로 파서 샘플 코드를 사용하여 클라이언트가 요청하는 개체를 인식하기 위한 개체 경로를 구문 분석해야 합니다. 또한 파생 클래스를 지원하는 공급자는 상속된 속성이 아닌 클래스의 로컬 속성에 대한 값만 제공해야 합니다. WMI는 기본 클래스의 공급자가 상속된 속성을 처리할 것을 요청합니다.
클래스 공급자를 구현할 때 GetObjectAsync 는 strObjectPath 매개 변수에 저장된 클래스 이름 개체 경로를 구문 분석하여 요청되는 클래스를 결정해야 합니다. 그런 다음 GetObjectAsync 메서드는 클래스를 동적으로 빌드하거나 프라이빗 캐시에서 클래스를 가져옵니다. 그런 다음, GetObjectAsync는 pResponseHandler 매개 변수가 가리키는 IWbemObjectSink 포인터를 사용하여 클래스를 WMI로 보냅니다. 결과 집합의 끝을 나타내기 위해 IWbemObjectSink::SetStatus 메서드가 호출됩니다. IWbemObjectSink::오류 조건이 발생하는지 여부를 나타내기 위해 IWbemObjectSink에 대한 중간 호출 없이 호출할 수도 있습니다.
콜백은 클라이언트에서 요구하는 것과 동일한 인증 수준에서 반환되지 않을 수 있으므로 비동기 통신 대신 반동기를 사용하는 것이 좋습니다. 비동기 통신이 필요한 경우 메서드 호출을 참조하세요.
메서드를 반동적으로 사용하는 방법에 대한 자세한 내용은 IWbemServices::GetObject 및 메서드 호출을 참조하세요.
예제
다음 예제에서는 instance 공급자에 대해 GetObjectAsync를 구현하는 방법을 설명합니다.
SCODE CInstPro::GetObjectAsync (BSTR ObjectPath,
long lFlags, IWbemContext *pCtx,
IWbemObjectSink FAR* pHandler)
{
ULONG cRef; // Reference count
SCODE sc;
BOOL bOK = FALSE;
IWbemServices * m_pNamespace;
IWbemClassObject FAR* pObj;
// Check arguments.
if(ObjectPath == NULL || pHandler == NULL ||
m_pNamespace == NULL)
return WBEM_E_INVALID_PARAMETER;
// Based on the object path, produce an empty instance
// of the class and gather required data,
// setting the instance's property values accordingly.
// This example assumes that GetByPath is implemented
// by the provider to do this.
// The IWbemPath interface can be used to parse
// the object path, separating the namespace and class name.
sc = GetByPath (ObjectPath, &pObj, pCtx);
if(sc == S_OK)
{
pHandler->Indicate (1, &pObj);
pObj->Release();
bOK = TRUE;
}
sc = (bOK) ? S_OK : WBEM_E_NOT_FOUND;
// Set status.
pHandler->SetStatus(0,sc, NULL, NULL);
// Free memory resources.
SysFreeString(ObjectPath);
m_pNamespace->Release();
pObj->Release();
return sc;
}
다음 예제에서는 일반적인 클래스 공급자가 GetObjectAsync를 구현하는 방법을 보여 줍니다.
HRESULT CStdProvider::GetObjectAsync(
/* [in] */ BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
)
{
IWbemClassObject *pClass = 0;
// Assume there is an IWbemServices pointer available.
// Retrieve an 'empty' object which is built up
// into the class definition.
HRESULT hRes = m_pSvc->GetObject(NULL, 0, NULL, &pClass, 0);
if (hRes)
return hRes;
// Parse the object path and determine which class is
// required. The path string is the required class name.
// Fill in the properties required for the class definition
// using pClass->Put(...), and so on.
// ...
// Send the class definition back to WMI.
pResponseHandler->Indicate(1, &pClass);
// Indicate that it is now finished.
pResponseHandler->SetStatus(0, WBEM_S_NO_ERROR, 0, 0);
SysFreeString(strObjectPath);
m_pSvc->Release();
pClass->Release(); // This is no longer needed.
return WBEM_S_NO_ERROR;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | 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 |