Changeset 74517 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- Sep 28, 2018 11:24:47 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 125382
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/NEMR3Native-win.cpp
r73282 r74517 855 855 AssertLogRelMsgReturn(RT_VALID_PTR(pIos), ("pIos=%p\n", pIos), STATUS_INVALID_PARAMETER_5); 856 856 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 } 868 885 869 886 g_IoCtlMessageSlotHandleAndGetNext.cbInput = cbInput; … … 918 935 decltype(NtDeviceIoControlFile) * const pfnOrg = *g_ppfnVidNtDeviceIoControlFile; 919 936 920 /* VidGetHvPartitionId */937 /* VidGetHvPartitionId - must work due to memory. */ 921 938 *g_ppfnVidNtDeviceIoControlFile = nemR3WinIoctlDetector_GetHvPartitionId; 922 939 HV_PARTITION_ID idHvPartition = HV_PARTITION_ID_INVALID; … … 930 947 g_IoCtlGetHvPartitionId.uFunction, g_IoCtlGetHvPartitionId.cbInput, g_IoCtlGetHvPartitionId.cbOutput)); 931 948 949 int rcRet = VINF_SUCCESS; 932 950 /* VidStartVirtualProcessor */ 933 951 *g_ppfnVidNtDeviceIoControlFile = nemR3WinIoctlDetector_StartVirtualProcessor; 934 952 fRet = g_pfnVidStartVirtualProcessor(NEM_WIN_IOCTL_DETECTOR_FAKE_HANDLE, NEM_WIN_IOCTL_DETECTOR_FAKE_VP_INDEX); 935 953 *g_ppfnVidNtDeviceIoControlFile = pfnOrg; 936 Assert Return(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()) ); 940 958 LogRel(("NEM: VidStartVirtualProcessor -> fun:%#x in:%#x out:%#x\n", g_IoCtlStartVirtualProcessor.uFunction, 941 959 g_IoCtlStartVirtualProcessor.cbInput, g_IoCtlStartVirtualProcessor.cbOutput)); … … 945 963 fRet = g_pfnVidStopVirtualProcessor(NEM_WIN_IOCTL_DETECTOR_FAKE_HANDLE, NEM_WIN_IOCTL_DETECTOR_FAKE_VP_INDEX); 946 964 *g_ppfnVidNtDeviceIoControlFile = pfnOrg; 947 Assert Return(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()) ); 951 969 LogRel(("NEM: VidStopVirtualProcessor -> fun:%#x in:%#x out:%#x\n", g_IoCtlStopVirtualProcessor.uFunction, 952 970 g_IoCtlStopVirtualProcessor.cbInput, g_IoCtlStopVirtualProcessor.cbOutput)); … … 958 976 NEM_WIN_IOCTL_DETECTOR_FAKE_TIMEOUT); 959 977 *g_ppfnVidNtDeviceIoControlFile = pfnOrg; 960 Assert Return(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()) ); 964 982 LogRel(("NEM: VidMessageSlotHandleAndGetNext -> fun:%#x in:%#x out:%#x\n", 965 983 g_IoCtlMessageSlotHandleAndGetNext.uFunction, g_IoCtlMessageSlotHandleAndGetNext.cbInput, … … 1014 1032 pVM->nem.s.IoCtlStopVirtualProcessor = g_IoCtlStopVirtualProcessor; 1015 1033 pVM->nem.s.IoCtlMessageSlotHandleAndGetNext = g_IoCtlMessageSlotHandleAndGetNext; 1016 return VINF_SUCCESS;1034 return rcRet; 1017 1035 } 1018 1036 … … 1198 1216 */ 1199 1217 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 } 1200 1227 if (RT_SUCCESS(rc)) 1201 1228 {
Note:
See TracChangeset
for help on using the changeset viewer.