сказать?

ользую WMI для создания контрольной точки RCT. Ниже приведен фрагмент кода. Проблема в том, когда я вызываю методCreate Snapshot с помощьюExecMethodконтрольная точка создается, ноResultingSnapshot по-прежнему указывает наNULL.

Поскольку вызов асинхронный (как возвращаемое значение изpOutParameters 4096) Я также ждал, пока работа не будет завершена вWaitForJobCompletion ноpOutParameters не обновляется и тем не менее,ResultingSnapshot нулевой.

В основном мне это нужноResultingSnapshot для создания контрольной точки. Если есть какой-то другой способ сделать это, я могу написать это, но мне нужно руководство.

Я новичок в WMI, любая помощь или руководство приветствуется.

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

РЕДАКТИРОВАТЬ Я обнаружил, что параметр SnapshotType не установлен правильно, это должно быть 32768, и я использовал следующий способ для преобразования uint16 в Variant, но без успеха, и я получаю0x80070057 Incorrect Parameter Ошибка.

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

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

Ответы на вопрос(2)

Ваш ответ на вопрос