IWbemHiPerfProvider::CreateRefreshableObject 메서드(wbemprov.h)
IWbemHiPerfProvider::CreateRefreshableObject 메서드는 새로 고칠 수 있는 instance 개체를 요청합니다. WMI 리프레셔는 IWbemConfigureRefresher::AddObjectByPath 또는 IWbemConfigureRefresher::AddObjectByTemplate 인터페이스에 대한 클라이언트 요청에 대한 응답으로 IWbemHiPerfProvider::CreateRefreshableObject를 호출합니다. 공급자는 제공된 템플릿 개체에서 키를 읽고 pRefresher의 refresh 메서드가 호출될 때마다 새로 고칠 ppRefreshable 매개 변수의 개체를 제공합니다. 공급자는 IWbemHiPerfProvider::CreateRefresher에 대한 이전 호출에서 얻은 제공된 새로 고침에 새로 고침 가능한 개체를 연결합니다.
구문
HRESULT CreateRefreshableObject(
[in] IWbemServices *pNamespace,
[in] IWbemObjectAccess *pTemplate,
[in] IWbemRefresher *pRefresher,
[in] long lFlags,
[in] IWbemContext *pContext,
[out] IWbemObjectAccess **ppRefreshable,
[out] long *plId
);
매개 변수
[in] pNamespace
IWbemServices는 공급자가 수행한 모든 요청을 처리할 수 있는 Windows Management에 대한 포인터입니다. 포인터를 실행하는 동안 WMI로 다시 호출해야 하는 경우 공급자는 해당 포인터에서 AddRef 를 호출합니다.
[in] pTemplate
템플릿을 포함하는 IWbemObjectAccess 개체에 대한 포인터입니다.
[in] pRefresher
IWbemHiPerfProvider::CreateRefresher를 호출하여 얻은 새로 고침을 포함하는 IWbemRefresher 개체에 대한 포인터입니다.
[in] lFlags
예약되어 있습니다. 이 매개 변수는 0이어야 합니다.
[in] pContext
일반적으로 NULL; 그렇지 않으면 하나 이상의 동적 클래스 공급자에 필요한 IWbemContext 개체에 대한 포인터입니다. 컨텍스트 개체의 값은 특정 공급자 설명서에 지정해야 합니다. 이 매개 변수에 대한 자세한 내용은 WMI 호출을 참조하세요.
[out] ppRefreshable
새로 고칠 수 있는 개체를 포함하는 IWbemObjectAccess 개체에 대한 참조를 포함하는 포인터입니다.
[out] plId
이 새로 고침 가능한 개체를 고유하게 식별하는 공급자가 반환한 정수에 대한 포인터입니다.
반환 값
이 메서드는 메서드 호출의 상태를 나타내는 HRESULT를 반환합니다. 다음 목록에는 HRESULT에 포함된 값이 나열되어 있습니다.
설명
제공된 instance 템플릿에는 키 속성이 채워진 개체가 포함됩니다. 반환된 개체는 새로 고칠 수 있는 고유 개체여야 합니다. 새로 고침 작업 중에는 공급자가 새로 고칠 수 있는 개체를 터치하면 안됩니다. 리프레셔를 소유한 개체가 개체를 복원하지 않는 한 공급자는 반환된 개체에 액세스해서는 안 됩니다. 제공된 instance 템플릿의 키 속성이 채워집니다. 또한 공급자는 instance 경로의 유효성을 검사해야 합니다.
예제
다음 코드 예제에서는 CreateRefreshableObject를 구현하는 방법을 설명합니다.
HRESULT CMyHiPerfProvider::CreateRefreshableObject(
/* [in] */IWbemServices *pNamespace,
/* [in] */IWbemObjectAccess *pTemplate,
/* [in] */IWbemRefresher *pRefresher,
/* [in] */long lFlags,
/* [in] */IWbemContext *pCtx,
/* [out] */IWbemObjectAccess **ppRefreshable,
/* [out] */ long *plId
)
{
// Use a private interface defined
// to talk with the refresher. You must define
// the IMyRefresher interface.
IMyRefresher* pMyRefr = NULL;
HRESULT hres = pRefresher->QueryInterface(
IID_IMyRefresher,
(void**) &pMyRefr );
if ( SUCCEEDED( hres ) )
{
// Check for a valid instance.
// You must implement the ValidateInst function.
if ( ValidateInst( pTemplate ) )
{
IWbemClassObject* pTemplateObj = NULL;
IWbemClassObject* pCloneObj = NULL;
IWbemObjectAccess* pCloneAcc = NULL;
// Clone the object, then get an
// IWbemObjectAccess pointer.
pTemplate->QueryInterface(
IID_IWbemClassObject,
(void**) &pTemplateObj );
pTemplateObj->Clone( &pCloneObj );
pCloneObj->QueryInterface(
IID_IWbemObjectAccess,
(void**) &pCloneAcc );
// Generate a unique identifier.
// For example, use:
/**plId = InterlockedIncrement( &m_lLastId );*/
// Add the object to an array of
// objects to refresh.
//For example, use:
/*pMyRefr->AddInstance( *plId, pCloneAcc );*/
// Maintains AddRef from QI
*ppRefreshable = pCloneAcc;
pTemplateObj->Release();
pCloneObj->Release();
}
else
{
hres = WBEM_E_NOT_FOUND;
}
pMyRefr->Release();
}
return hres;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
지원되는 최소 서버 | Windows Server 2008 |
대상 플랫폼 | Windows |
헤더 | wbemprov.h(Wbemidl.h 포함) |
라이브러리 | Wbemuuid.lib |
DLL | Wmiprvsd.dll |
추가 정보
인스턴스 공급자를 고성능 공급자로 만들기