Méthode IWbemServices ::GetObjectAsync (wbemcli.h)

La méthode IWbemServices ::GetObjectAsync récupère un objet, soit une définition de classe, soit instance, en fonction de son chemin d’accès. Ceci est similaire à IWbemServices ::GetObject , sauf que l’appel retourne immédiatement et que l’objet est fourni au récepteur d’objet fourni.

Actuellement, cette méthode récupère les objets uniquement à partir de l’espace de noms associé au pointeur IWbemServices .

Syntaxe

HRESULT GetObjectAsync(
  [in] const BSTR      strObjectPath,
  [in] long            lFlags,
  [in] IWbemContext    *pCtx,
  [in] IWbemObjectSink *pResponseHandler
);

Paramètres

[in] strObjectPath

Chemin de l’objet à récupérer. Pour un fournisseur instance, StrObjectPath peut être au format suivant :

  • Namespace :Class.Key = « Value »
  • Namespace :Class = « Value »
  • Namespace :Class.Key = « Value », Key2 = « Value2 »
La spécification de l’espace de noms avant la classe est facultative. Les chemins d’objet sans espaces de noms font référence aux instances de l’espace de noms actuel. Si nécessaire, vous pouvez remplacer le guillemet unique (') par le guillemet double (« ) pour délimiter le début et la fin des types de propriétés de chaîne.

Si cette valeur est NULL, un objet vide, qui peut devenir une nouvelle classe, est retourné. Pour plus d’informations, consultez Création d'un commentaire.

[in] lFlags

Les indicateurs suivants affectent le comportement de cette méthode.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

Si cet indicateur est défini, WMI récupère les qualificateurs modifiés stockés dans l’espace de noms localisé des paramètres régionaux de la connexion actuelle. S’il n’est pas défini, seuls les qualificateurs stockés dans l’espace de noms immédiat sont récupérés.

WBEM_FLAG_DIRECT_READ

Cet indicateur entraîne un accès direct au fournisseur pour la classe spécifiée sans égard à sa ou ses sous-classes parentes.

WBEM_FLAG_SEND_STATUS

Enregistre une demande de réception de rapports de status intermédiaires via l’implémentation par le client d’IWbemObjectSink ::SetStatus. L’implémentation du fournisseur doit prendre en charge les rapports intermédiaires status pour que cet indicateur modifie le comportement.

[in] pCtx

Généralement NULL. Sinon, il s’agit d’un pointeur vers un objet IWbemContext qui peut être utilisé par le fournisseur qui produit la classe ou le instance demandé. Les valeurs de l’objet de contexte doivent être spécifiées dans la documentation du fournisseur en question. Pour plus d’informations sur ce paramètre, consultez Effectuer des appels à WMI.

[in] pResponseHandler

Pointeur vers l’implémentation d’IWbemObjectSink par l’appelant. Ce gestionnaire reçoit l’objet demandé lorsqu’il devient disponible via la méthode IWbemObjectSink ::Indicate . Le paramètre pObjParam contient l’objet . Si un code d’erreur est retourné, le pointeur IWbemObjectSink fourni n’est pas utilisé. Si WBEM_S_NO_ERROR est retourné, l’implémentation IWbemObjectSink de l’utilisateur est appelée pour indiquer le résultat de l’opération. Gestion Windows appelle uniquement AddRef vers le pointeur dans les cas où WBEM_S_NO_ERROR retourne. Dans les cas où un code d’erreur retourne, le nombre de références est le même que lors de l’entrée. Pour plus d’informations sur ce paramètre, consultez Appel d’une méthode.

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.

En cas d’échec, vous pouvez obtenir toutes les informations disponibles à partir de la fonction COM GetErrorInfoGetErrorInfo.

Des codes d’erreur spécifiques à COM peuvent également être retournés si des problèmes réseau vous font perdre la connexion à distance à Windows Management.

Remarques

Lorsque vous implémentez un fournisseur de instance, vous devez utiliser l’exemple de code de l’analyseur de chemin d’accès d’objet dans la section WMI du PSDK pour analyser le chemin d’accès de l’objet afin de reconnaître l’objet demandé par le client. En outre, un fournisseur qui prend en charge une classe dérivée doit uniquement fournir les valeurs des propriétés locales de la classe, plutôt que les propriétés héritées. WMI demande que le fournisseur de la classe de base gère les propriétés héritées.

Lors de l’implémentation d’un fournisseur de classes, GetObjectAsync doit déterminer quelle classe est demandée en analysant le chemin d’accès de l’objet nom de classe stocké dans le paramètre strObjectPath . La méthode GetObjectAsync génère ensuite la classe dynamiquement ou prend la classe à partir d’un cache privé. Ensuite, GetObjectAsync envoie la classe à WMI à l’aide du pointeur IWbemObjectSink pointé vers le paramètre pResponseHandler . La méthode IWbemObjectSink ::SetStatus est appelée pour indiquer la fin du jeu de résultats. Il peut également être appelé sans appel intermédiaire à IWbemObjectSink ::Indiquer si des conditions d’erreur se produisent.

Étant donné que le rappel n’est peut-être pas retourné au même niveau d’authentification que le client, il est recommandé d’utiliser semi-synchrone au lieu d’une communication asynchrone. Si vous avez besoin d’une communication asynchrone, consultez Appel d’une méthode.

Pour plus d’informations sur l’utilisation semi-synchronisée des méthodes, consultez IWbemServices ::GetObject et Appel d’une méthode.

Exemples

L’exemple suivant explique comment implémenter GetObjectAsync pour un fournisseur de instance.

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;
  
}

L’exemple suivant montre comment un fournisseur de classe classique implémente 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;
}

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 wbemcli.h (inclure Wbemidl.h)
Bibliothèque 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

Voir aussi

Appel d’une méthode

Création d’une classe

Description de l'emplacement d'un objet WMI

IWbemServices

IWbemServices::GetObject