Méthode IWbemHiPerfProvider ::QueryInstances (wbemprov.h)
La méthode IWbemHiPerfProvider ::QueryInstances retourne des instances de la classe spécifiée à l’aide du instance IWbemObjectSink fourni. La méthode doit être retournée immédiatement. L’interface IWbemObjectSink est utilisée pour spécifier des résultats.
Syntaxe
HRESULT QueryInstances(
[in] IWbemServices *pNamespace,
[in] WCHAR *wszClass,
[in] long lFlags,
[in] IWbemContext *pCtx,
[in] IWbemObjectSink *pSink
);
Paramètres
[in] pNamespace
Pointeur IWbemServices vers WMI qui peut traiter n’importe quelle requête du fournisseur. Le fournisseur doit appeler AddRef sur ce pointeur s’il doit rappeler WMI pendant l’exécution.
[in] wszClass
Pointeur vers une chaîne WCHAR qui spécifie la classe dont les instances sont retournées.
[in] lFlags
Entier qui contient les indicateurs.
[in] pCtx
Généralement NULL ; sinon, pointeur vers un objet IWbemContext requis par un ou plusieurs fournisseurs de classes dynamiques. Les valeurs de l’objet de contexte doivent être spécifiées dans la documentation du fournisseur. Pour plus d’informations, consultez Passer des appels à WMI.
[in] pSink
Pointeur vers l’implémentation IWbemObjectSink fournie par le client vers l’une des méthodes asynchrones d’IWbemServices.
Valeur retournée
Cette méthode retourne une valeur HRESULT qui indique l’état de l’appel de méthode. La liste suivante répertorie la valeur contenue dans un HRESULT.
Les fournisseurs HiPerf peuvent signaler la réussite ou l’échec par le biais du code de retour de QueryInstances ou d’un appel à la méthode SetStatus de pResponseHandler. Si vous appelez la méthode SetStatus , le code de retour envoyé via pResponseHandler est prioritaire sur le code de retour QueryInstances .
Remarques
WMI appelle QueryInstances en réponse à une requête IWbemServices ::CreateInstanceEnum ou IWbemServices ::CreateInstanceEnumAsync .
La méthode IWbemObjectSink ::SetStatus est appelée pour indiquer la fin du jeu de résultats. Lorsque des conditions d’erreur se produisent, IWbemObjectSink ::SetStatus peut également être appelé sans appel intermédiaire à IWbemObjectSink ::Indique.
Exemples
L’exemple de code suivant montre comment implémenter 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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista |
Serveur minimal pris en charge | Windows Server 2008 |
Plateforme cible | Windows |
En-tête | wbemprov.h (inclure Wbemidl.h) |
Bibliothèque | Wbemuuid.lib |
DLL | Wmiprvsd.dll |
Voir aussi
Développement d’un fournisseur WMI
Création d’un fournisseur d’instance dans un fournisseur de haute performance