Метод IWbemHiPerfProvider::QueryInstances (wbemprov.h)
Метод IWbemHiPerfProvider::QueryInstances возвращает экземпляры указанного класса с помощью предоставленного экземпляра IWbemObjectSink . Метод должен вернуться немедленно. Интерфейс IWbemObjectSink используется для указания результатов.
Синтаксис
HRESULT QueryInstances(
[in] IWbemServices *pNamespace,
[in] WCHAR *wszClass,
[in] long lFlags,
[in] IWbemContext *pCtx,
[in] IWbemObjectSink *pSink
);
Параметры
[in] pNamespace
Указатель IWbemServices на WMI, который может обслуживать любой запрос от поставщика. Поставщик должен вызвать AddRef для этого указателя, если ему необходимо выполнить обратный вызов WMI во время выполнения.
[in] wszClass
Указатель на строку WCHAR , которая указывает класс, экземпляры которого возвращаются.
[in] lFlags
Целое число, содержащее флаги.
[in] pCtx
Как правило, значение NULL; в противном случае — указатель на объект IWbemContext , необходимый одному или нескольким поставщикам динамических классов. Значения в объекте контекста должны быть указаны в документации поставщика. Дополнительные сведения см. в разделе Вызовы WMI.
[in] pSink
Указатель на реализацию IWbemObjectSink , предоставляемую клиентом для любого из асинхронных методов IWbemServices.
Возвращаемое значение
Этот метод возвращает HRESULT , указывающий состояние вызова метода. В следующем списке перечислены значения, содержащиеся в HRESULT.
Поставщики HiPerf могут сообщать об успешном или неудачном выполнении с помощью кода возврата из QueryInstances или вызова метода SetStatuspResponseHandler. При вызове метода SetStatus код возврата, отправляемый через pResponseHandler , имеет приоритет над кодом возврата QueryInstances .
Комментарии
WMI вызывает QueryInstances в ответ на запрос IWbemServices::CreateInstanceEnum или IWbemServices::CreateInstanceEnumAsync .
Вызывается метод IWbemObjectSink::SetStatus для указания конца результирующих наборов. При возникновении ошибок IWbemObjectSink::SetStatus также можно вызывать без промежуточных вызовов IWbemObjectSink::Indicate.
Примеры
В следующем примере кода показано, как реализовать 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 |
Header | wbemprov.h (включая Wbemidl.h) |
Библиотека | Wbemuuid.lib |
DLL | Wmiprvsd.dll |
См. также раздел
Преобразование поставщика экземпляра в поставщик High-Performance