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

前端 未结 3 637
醉话见心
醉话见心 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);
    

提交回复
热议问题