(WMI) ExecMethod out parameter - ResultingSnapshot is NULL irrespective of the result of the call, Why?

前端 未结 3 617
醉话见心
醉话见心 2020-12-06 08:01

I am using WMI to create an RCT Checkpoint. Below is the code snippet. The problem is when I call the method Create Snapshot using ExecMethodthe ch

相关标签:
3条回答
  • 2020-12-06 08:57

    You provide a ppCallResult parameter. From the documentation:

    ppCallResult [out] If NULL, this is not used. If ppCallResult is specified, it must be set to point to NULL on entry. In this case, the call returns immediately with WBEM_S_NO_ERROR. The ppCallResult parameter receives a pointer to a new IWbemCallResult object, which must be polled to obtain the result of the method execution using the GetCallStatus method. The out parameters for the call are available by calling IWbemCallResult::GetResultObject.

    Therefore you need to use GetCallStatus on pCallResult until the method has finished and then GetResultObject to get the out parameters:

    LONG status;
    while ((hr = pCallResult->GetCallStatus(1000, &status)) == WBEM_S_TIMEDOUT);
    /* check hr and status here */
    hr = pCallResult->GetResultObject(0, &pResObj);
    

    or use WBEM_INFINITE:

    LONG status;
    hr = pCallResult->GetCallStatus(WBEM_INFINITE, &status);
    /* check hr and status here */
    hr = pCallResult->GetResultObject(0, &pResObj);
    

    Alternatively provide NULL instead of pCallResult and it will be a synchronous call where pOutParameters will be set:

    hr = m_pWbemServices->ExecMethod(path, L"CreateSnapshot", 0, NULL, pInParams, &pOutParameters, NULL);
    
    0 讨论(0)
  • 2020-12-06 08:57

    Was SnapshotType=32768 giving error to you? Because snapshot is not created when I use this Snapshot Type.

    The following log is getting created:

    Checkpoint creation failed for 'Ubuntu1' because an invalid checkpoint type has been specified. (Virtual machine ID 5C773BB5-B630-48B4-AB9E-71C548F3FAE4)

    Edit: I am not sure if it will help but this solved my problem: https://docs.microsoft.com/en-us/answers/questions/160321/wmi-createsnapshot-not-working-with-snapshottype-3.html

    0 讨论(0)
  • 2020-12-06 09:03
    HRESULT GetRelated(PWSTR sAssociatePath, PWSTR sResultClass, IWbemClassObject** ppResultObject)
    {
    CStringW query;
    query.Format(L"associators of {%s} where ResultClass = %s", sAssociatePath, sResultClass);
    
    CComPtr<IEnumWbemClassObject> pEnumOb;
    
    HRESULT hr = m_pWbemServices->ExecQuery(
        BSTR(L"WQL"),
        CComBSTR(query),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
        NULL,
        &pEnumOb));
    ULONG uReturn = 0;
    CComPtr<IWbemClassObject> pObject;
    hr = pEnumOb->Next(WBEM_INFINITE, 1, &pObject, &uReturn);
    return hr;
    }
    // Call the GetRelated function above with the __PATH parameter of JOB
    CComPtr<IWbemClassObject> pOutParam = NULL;
    CHK_HRES(this->ExecMethod(pHyperVObject, L"ConvertToReferencePoint", pInParams, &pOutParam, NULL));
    CComVariant jobPath;
    CHK_HRES(pOutParam->Get(L"Job", 0, &jobPath, NULL, NULL));
    CComPtr<IWbemClassObject> pResult;
    GetRelated(jobPath.bstrVal, L"Msvm_VirtualSystemReferencePoint", &pResult);
    
    0 讨论(0)
提交回复
热议问题