VirtualBox

Changeset 74517 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Sep 28, 2018 11:24:47 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
125382
Message:

NEM/win: Updates for new builds. bugref:9044

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/NEMR3Native-win.cpp

    r73282 r74517  
    855855    AssertLogRelMsgReturn(RT_VALID_PTR(pIos), ("pIos=%p\n", pIos), STATUS_INVALID_PARAMETER_5);
    856856
    857     AssertLogRelMsgReturn(cbInput == sizeof(VID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT), ("cbInput=%#x\n", cbInput),
    858                           STATUS_INVALID_PARAMETER_8);
    859     AssertLogRelMsgReturn(RT_VALID_PTR(pvInput), ("pvInput=%p\n", pvInput), STATUS_INVALID_PARAMETER_9);
    860     PCVID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT pVidIn = (PCVID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT)pvInput;
    861     AssertLogRelMsgReturn(   pVidIn->iCpu == NEM_WIN_IOCTL_DETECTOR_FAKE_VP_INDEX
    862                           && pVidIn->fFlags == VID_MSHAGN_F_HANDLE_MESSAGE
    863                           && pVidIn->cMillies == NEM_WIN_IOCTL_DETECTOR_FAKE_TIMEOUT,
    864                           ("iCpu=%u fFlags=%#x cMillies=%#x\n", pVidIn->iCpu, pVidIn->fFlags, pVidIn->cMillies),
    865                           STATUS_INVALID_PARAMETER_9);
    866     AssertLogRelMsgReturn(cbOutput == 0, ("cbInput=%#x\n", cbInput), STATUS_INVALID_PARAMETER_10);
    867     RT_NOREF(pvOutput);
     857    if (g_uBuildNo >= 17758)
     858    {
     859        /* No timeout since about build 17758, it's now always an infinite wait.  So, a somewhat compatible change.  */
     860        AssertLogRelMsgReturn(cbInput == RT_UOFFSETOF(VID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT, cMillies),
     861                              ("cbInput=%#x\n", cbInput),
     862                              STATUS_INVALID_PARAMETER_8);
     863        AssertLogRelMsgReturn(RT_VALID_PTR(pvInput), ("pvInput=%p\n", pvInput), STATUS_INVALID_PARAMETER_9);
     864        PCVID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT pVidIn = (PCVID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT)pvInput;
     865        AssertLogRelMsgReturn(   pVidIn->iCpu == NEM_WIN_IOCTL_DETECTOR_FAKE_VP_INDEX
     866                              && pVidIn->fFlags == VID_MSHAGN_F_HANDLE_MESSAGE,
     867                              ("iCpu=%u fFlags=%#x cMillies=%#x\n", pVidIn->iCpu, pVidIn->fFlags, pVidIn->cMillies),
     868                              STATUS_INVALID_PARAMETER_9);
     869        AssertLogRelMsgReturn(cbOutput == 0, ("cbInput=%#x\n", cbInput), STATUS_INVALID_PARAMETER_10);
     870    }
     871    else
     872    {
     873        AssertLogRelMsgReturn(cbInput == sizeof(VID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT), ("cbInput=%#x\n", cbInput),
     874                              STATUS_INVALID_PARAMETER_8);
     875        AssertLogRelMsgReturn(RT_VALID_PTR(pvInput), ("pvInput=%p\n", pvInput), STATUS_INVALID_PARAMETER_9);
     876        PCVID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT pVidIn = (PCVID_IOCTL_INPUT_MESSAGE_SLOT_HANDLE_AND_GET_NEXT)pvInput;
     877        AssertLogRelMsgReturn(   pVidIn->iCpu == NEM_WIN_IOCTL_DETECTOR_FAKE_VP_INDEX
     878                              && pVidIn->fFlags == VID_MSHAGN_F_HANDLE_MESSAGE
     879                              && pVidIn->cMillies == NEM_WIN_IOCTL_DETECTOR_FAKE_TIMEOUT,
     880                              ("iCpu=%u fFlags=%#x cMillies=%#x\n", pVidIn->iCpu, pVidIn->fFlags, pVidIn->cMillies),
     881                              STATUS_INVALID_PARAMETER_9);
     882        AssertLogRelMsgReturn(cbOutput == 0, ("cbInput=%#x\n", cbInput), STATUS_INVALID_PARAMETER_10);
     883        RT_NOREF(pvOutput);
     884    }
    868885
    869886    g_IoCtlMessageSlotHandleAndGetNext.cbInput   = cbInput;
     
    918935    decltype(NtDeviceIoControlFile) * const pfnOrg = *g_ppfnVidNtDeviceIoControlFile;
    919936
    920     /* VidGetHvPartitionId */
     937    /* VidGetHvPartitionId - must work due to memory. */
    921938    *g_ppfnVidNtDeviceIoControlFile = nemR3WinIoctlDetector_GetHvPartitionId;
    922939    HV_PARTITION_ID idHvPartition = HV_PARTITION_ID_INVALID;
     
    930947            g_IoCtlGetHvPartitionId.uFunction, g_IoCtlGetHvPartitionId.cbInput, g_IoCtlGetHvPartitionId.cbOutput));
    931948
     949    int rcRet = VINF_SUCCESS;
    932950    /* VidStartVirtualProcessor */
    933951    *g_ppfnVidNtDeviceIoControlFile = nemR3WinIoctlDetector_StartVirtualProcessor;
    934952    fRet = g_pfnVidStartVirtualProcessor(NEM_WIN_IOCTL_DETECTOR_FAKE_HANDLE, NEM_WIN_IOCTL_DETECTOR_FAKE_VP_INDEX);
    935953    *g_ppfnVidNtDeviceIoControlFile = pfnOrg;
    936     AssertReturn(fRet && g_IoCtlStartVirtualProcessor.uFunction != 0,
    937                  RTErrInfoSetF(pErrInfo, VERR_NEM_INIT_FAILED,
    938                                "Problem figuring out VidStartVirtualProcessor: fRet=%u dwErr=%u",
    939                                fRet, GetLastError()) );
     954    AssertStmt(fRet && g_IoCtlStartVirtualProcessor.uFunction != 0,
     955               rcRet = RTERRINFO_LOG_REL_SET_F(pErrInfo, VERR_NEM_RING3_ONLY,
     956                                               "Problem figuring out VidStartVirtualProcessor: fRet=%u dwErr=%u",
     957                                               fRet, GetLastError()) );
    940958    LogRel(("NEM: VidStartVirtualProcessor       -> fun:%#x in:%#x out:%#x\n", g_IoCtlStartVirtualProcessor.uFunction,
    941959            g_IoCtlStartVirtualProcessor.cbInput, g_IoCtlStartVirtualProcessor.cbOutput));
     
    945963    fRet = g_pfnVidStopVirtualProcessor(NEM_WIN_IOCTL_DETECTOR_FAKE_HANDLE, NEM_WIN_IOCTL_DETECTOR_FAKE_VP_INDEX);
    946964    *g_ppfnVidNtDeviceIoControlFile = pfnOrg;
    947     AssertReturn(fRet && g_IoCtlStopVirtualProcessor.uFunction != 0,
    948                  RTErrInfoSetF(pErrInfo, VERR_NEM_INIT_FAILED,
    949                                "Problem figuring out VidStopVirtualProcessor: fRet=%u dwErr=%u",
    950                                fRet, GetLastError()) );
     965    AssertStmt(fRet && g_IoCtlStopVirtualProcessor.uFunction != 0,
     966               rcRet = RTERRINFO_LOG_REL_SET_F(pErrInfo, VERR_NEM_RING3_ONLY,
     967                                               "Problem figuring out VidStopVirtualProcessor: fRet=%u dwErr=%u",
     968                                               fRet, GetLastError()) );
    951969    LogRel(("NEM: VidStopVirtualProcessor        -> fun:%#x in:%#x out:%#x\n", g_IoCtlStopVirtualProcessor.uFunction,
    952970            g_IoCtlStopVirtualProcessor.cbInput, g_IoCtlStopVirtualProcessor.cbOutput));
     
    958976                                               NEM_WIN_IOCTL_DETECTOR_FAKE_TIMEOUT);
    959977    *g_ppfnVidNtDeviceIoControlFile = pfnOrg;
    960     AssertReturn(fRet && g_IoCtlMessageSlotHandleAndGetNext.uFunction != 0,
    961                  RTErrInfoSetF(pErrInfo, VERR_NEM_INIT_FAILED,
    962                                "Problem figuring out VidMessageSlotHandleAndGetNext: fRet=%u dwErr=%u",
    963                                fRet, GetLastError()) );
     978    AssertStmt(fRet && g_IoCtlMessageSlotHandleAndGetNext.uFunction != 0,
     979               rcRet = RTERRINFO_LOG_REL_SET_F(pErrInfo, VERR_NEM_RING3_ONLY,
     980                                               "Problem figuring out VidMessageSlotHandleAndGetNext: fRet=%u dwErr=%u",
     981                                               fRet, GetLastError()) );
    964982    LogRel(("NEM: VidMessageSlotHandleAndGetNext -> fun:%#x in:%#x out:%#x\n",
    965983            g_IoCtlMessageSlotHandleAndGetNext.uFunction, g_IoCtlMessageSlotHandleAndGetNext.cbInput,
     
    10141032    pVM->nem.s.IoCtlStopVirtualProcessor        = g_IoCtlStopVirtualProcessor;
    10151033    pVM->nem.s.IoCtlMessageSlotHandleAndGetNext = g_IoCtlMessageSlotHandleAndGetNext;
    1016     return VINF_SUCCESS;
     1034    return rcRet;
    10171035}
    10181036
     
    11981216             */
    11991217            rc = nemR3WinInitDiscoverIoControlProperties(pVM, pErrInfo);
     1218            if (rc == VERR_NEM_RING3_ONLY)
     1219            {
     1220                if (pVM->nem.s.fUseRing0Runloop)
     1221                {
     1222                    LogRel(("NEM: Disabling UseRing0Runloop.\n"));
     1223                    pVM->nem.s.fUseRing0Runloop = false;
     1224                }
     1225                rc = VINF_SUCCESS;
     1226            }
    12001227            if (RT_SUCCESS(rc))
    12011228            {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette