(WMI) Parámetro ExecMethod out - El resultadoSnapshot es NULL independientemente del resultado de la llamada, ¿por qué?

Estoy usando WMI para crear un punto de control RCT. A continuación se muestra el fragmento de código. El problema es cuando llamo al métodoCreate Snapshot utilizandoExecMethodel punto de control se crea pero elResultingSnapshot todavía apunta aNULL.

Como la llamada es asíncrona (como el valor de retorno depOutParameters es 4096) También he esperado hasta que el trabajo se complete enWaitForJobCompletion peropOutParameters no está actualizado y aún así, elResultingSnapshot es nulo.

Básicamente, necesito estoResultingSnapshot para crear un punto de referencia. Si hay otra forma de hacerlo, puedo escribirlo, aunque necesito orientación.

Soy nuevo en WMI, cualquier ayuda o liderazgo es apreciado.

HRESULT hr;
CComPtr<IWbemClassObject> pInParams;
CComPtr<IWbemClassObject> pOutParameters;
IWbemCallResult *pResult = 0;

// Set Method Paramters
this->GetMethodParams(L"Msvm_VirtualSystemSnapshotService", L"CreateSnapshot", &pInParams);

IWbemClassObject * pVirtualSystemSnaphotSettingData = NULL;
hr = m_pWbemServices->GetObject(L"Msvm_VirtualSystemSnapshotSettingData", 0, NULL, &pVirtualSystemSnaphotSettingData, &pResult);

IWbemClassObject * pInpInstOfSnapshotSettingData = NULL;
hr = pVirtualSystemSnaphotSettingData->SpawnInstance(0, &pInpInstOfSnapshotSettingData);

VARIANT consistencyLevel;
VariantInit(&consistencyLevel);
V_VT(&consistencyLevel) = VT_BSTR;
V_BSTR(&consistencyLevel) = SysAllocString(L"1");
hr = pInpInstOfSnapshotSettingData->Put(L"ConsistencyLevel", 0, &consistencyLevel, 0);
VariantClear(&consistencyLevel);

VARIANT elementName;
VariantInit(&elementName);
V_VT(&elementName) = VT_BSTR;
V_BSTR(&elementName) = SysAllocString(L"rhel-1");
hr = pInpInstOfSnapshotSettingData->Put(L"ElementName", 0, &elementName, 0);
VariantClear(&elementName);

hr = m_pWbemServices->PutInstance(pInpInstOfSnapshotSettingData, 0, NULL, &pResult);

BSTR objString = NULL;
hr = pInpInstOfSnapshotSettingData->GetObjectText(0, &objString);
BSTR ArgNameTwo = SysAllocString(L"SnapshotSettings");
VARIANT v;
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = objString; 

hr = pInParams->Put(ArgNameTwo, 0, &v, 0);

VARIANT vtProp;
m_pVmWbemClassObject->Get(L"__Path", 0, &vtProp, 0, 0);

wprintf(L"Affected System : : %ls", (LPWSTR)vtProp.bstrVal);
HRESULT hres = pInParams->Put(L"AffectedSystem", 0 , &vtProp, NULL);

VARIANT var;
VariantInit(&var);
V_VT(&var) = VT_BSTR;
V_BSTR(&var) = SysAllocString(L"2");


CHK_HRES(pInParams->Put(L"SnapshotType", 0, &var, 0));


IEnumWbemClassObject* pEnumOb = NULL;
hr = m_pWbemServices->ExecQuery(
BSTR(L"WQL"),
BSTR(L"select * from Msvm_VirtualSystemSnapshotService"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumOb);
IWbemClassObject *pclsObj1 = NULL;
ULONG uReturn1 = 0;

while (1)
{
    HRESULT hr = pEnumOb->Next(WBEM_INFINITE, 1, &pclsObj1, &uReturn1);

    if (0 == uReturn1)
    {
        break;
    }

    IWbemCallResult *pCallResult = NULL;
    IWbemClassObject *pResObj = NULL;

    CComBSTR path(this->GetStrProperty(L"__PATH", pclsObj1));

    hr = m_pWbemServices->ExecMethod(path, L"CreateSnapshot", 0, NULL, pInParams, &pOutParameters, &pCallResult);



    /* cout << "check1 : " << hex << hr << endl;
    hr = pCallResult->GetResultObject(0, &pResObj);
    cout << "check2" << endl;*/

    this->WaitForJobCompletion(pOutParameters);
   }

cout << "\nSnpshot Complete" << endl;
}

EDITAR Descubrí que el parámetro SnapshotType no está configurado correctamente, debería ser 32768 y he utilizado la siguiente forma para convertir uint16 a Variant pero no Success y obtengo0x80070057 Incorrect Parameter Error.

VARIANT var;
VariantInit(&var);
V_VT(&var) = VT_BSTR;
V_BSTR(&var) = SysAllocString(L"32768");

hr = pInParams->Put(L"SnapshotType", 0, &var, CIM_UINT16);

Respuestas a la pregunta(2)

Su respuesta a la pregunta