none
Utilisation de IWbemServices::ExecMethod RRS feed

  • Question

  • Bonjour,

    J'essai d'utiliser la méthode "IWbemServices::ExecMethod" avec 

        BSTR MethodName = SysAllocString(L"GetBinaryValue");

        BSTR ClassName = SysAllocString(L"StdRegProv");

    mais j'ai problème pour remonter le résultat. Mon code est le suivant:

    ...

    //Connection OK

    BSTR MethodName = SysAllocString(L"GetBinaryValue");

    BSTR ClassName = SysAllocString(L"StdRegProv");

     

    hres = S_OK;

    IWbemLocator *ppiWmiLoc = NULL;

     

    IWbemClassObject* pClass = NULL;

    hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL);

     

    IWbemClassObject* pInParamsDefinition = NULL;

    IWbemClassObject* pOutParamsDefinition = NULL;

    hres = pClass->GetMethod(MethodName, 0,&pInParamsDefinition, &pOutParamsDefinition);

     

    IWbemClassObject* pInClassInstance = NULL;

    hres = pInParamsDefinition->SpawnInstance(0, &pInClassInstance);

     

    IWbemClassObject* pOutClassInstance = NULL;

    hres = pInParamsDefinition->SpawnInstance(0, &pOutClassInstance);

     

    IWbemCallResult* ppCallResult = NULL;

     

    //////////////////////////////////////////

    VARIANT varCommand;

    varCommand.vt  = VT_I4;

    varCommand.lVal  = (LONG)HKEY_LOCAL_MACHINE;

     

    hres = pInClassInstance->Put(L"hDefKey", 0, &varCommand, 0);

    //////////////////////////////////////////

     

    //////////////////////////////////////////

    varCommand.vt  = VT_BSTR;

    varCommand.bstrVal = L"SOFTWARE\\Essai";

    hres = pInClassInstance->Put(L"sSubKeyName", 0, &varCommand, 0);

    //////////////////////////////////////////

     

    //////////////////////////////////////////

    varCommand.vt  = VT_BSTR;

    varCommand.bstrVal = L"";

    hres = pInClassInstance->Put(L"sValueName", 0, &varCommand, 0);

    //////////////////////////////////////////

     

    // Execute Method

    hres = pSvc->ExecMethod(ClassName, MethodName, 0, NULL, pInClassInstance, &pOutClassInstance, &ppCallResult);

     

    BSTR ret;

    hres = pOutClassInstance->GetObjectText(0, &ret);

     

    // Vérification des paramètres passés

    VARIANT varInValue;

    VariantClear(&varInValue);

    hres = pInClassInstance->Get(_bstr_t(L"hDefKey"), 0, &varInValue, NULL, 0);

    VariantClear(&varInValue);

    hres = pInClassInstance->Get(_bstr_t(L"sSubKeyName"), 0, &varInValue, NULL, 0);

     

    // traitement du résultat

    VARIANT varResultValue;

    IWbemClassObject* ppResultObject;

     

    hres = ppCallResult->GetResultObject(WBEM_INFINITE,  &ppResultObject);

    // Ne retourne jamais rien : attendu valeur de la clef 

    // WBEM_E_NOT_FOUND  2147749890 (0x80041002)   ----> Object cannot be found.

     

    hres = ppResultObject->GetObjectText(0, &ret);

     

    ...

    //Deconnection

     

     

    Est ce que quelqu'un pourrait m'aider ?

    Merci

     

    lundi 19 juillet 2010 08:10

Réponses

Toutes les réponses