Lines Matching defs:pReq

107 static int                  supdrvIOCtl_LdrOpen(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLDROPEN pReq);
108 static int supdrvIOCtl_LdrLoad(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLDRLOAD pReq);
109 static int supdrvIOCtl_LdrFree(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLDRFREE pReq);
111 static int supdrvIOCtl_LdrGetSymbol(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLDRGETSYMBOL pReq);
112 static int supdrvIDC_LdrGetSymbol(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPDRVIDCREQGETSYM pReq);
119 static int supdrvIOCtl_CallServiceModule(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPCALLSERVICE pReq);
120 static int supdrvIOCtl_LoggerSettings(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLOGGERSETTINGS pReq);
121 static int supdrvIOCtl_MsrProber(PSUPDRVDEVEXT pDevExt, PSUPMSRPROBER pReq);
1497 PSUPCOOKIE pReq = (PSUPCOOKIE)pReqHdr;
1499 if (strncmp(pReq->u.In.szMagic, SUPCOOKIE_MAGIC, sizeof(pReq->u.In.szMagic)))
1501 OSDBGPRINT(("SUP_IOCTL_COOKIE: invalid magic %.16s\n", pReq->u.In.szMagic));
1502 pReq->Hdr.rc = VERR_INVALID_MAGIC;
1513 pReq->u.Out.u32Cookie = 0xffffffff;
1514 pReq->u.Out.u32SessionCookie = 0xffffffff;
1515 pReq->u.Out.u32SessionVersion = 0xffffffff;
1516 pReq->u.Out.u32DriverVersion = SUPDRV_IOC_VERSION;
1517 pReq->u.Out.pSession = NULL;
1518 pReq->u.Out.cFunctions = 0;
1519 pReq->Hdr.rc = VERR_PERMISSION_DENIED;
1528 if ( pReq->u.In.u32MinVersion > SUPDRV_IOC_VERSION
1529 || (pReq->u.In.u32MinVersion & 0xffff0000) != (SUPDRV_IOC_VERSION & 0xffff0000))
1532 pReq->u.In.u32ReqVersion, pReq->u.In.u32MinVersion, SUPDRV_IOC_VERSION));
1533 pReq->u.Out.u32Cookie = 0xffffffff;
1534 pReq->u.Out.u32SessionCookie = 0xffffffff;
1535 pReq->u.Out.u32SessionVersion = 0xffffffff;
1536 pReq->u.Out.u32DriverVersion = SUPDRV_IOC_VERSION;
1537 pReq->u.Out.pSession = NULL;
1538 pReq->u.Out.cFunctions = 0;
1539 pReq->Hdr.rc = VERR_VERSION_MISMATCH;
1549 pReq->u.Out.u32Cookie = pDevExt->u32Cookie;
1550 pReq->u.Out.u32SessionCookie = pSession->u32Cookie;
1551 pReq->u.Out.u32SessionVersion = SUPDRV_IOC_VERSION;
1552 pReq->u.Out.u32DriverVersion = SUPDRV_IOC_VERSION;
1553 pReq->u.Out.pSession = pSession;
1554 pReq->u.Out.cFunctions = sizeof(g_aFunctions) / sizeof(g_aFunctions[0]);
1555 pReq->Hdr.rc = VINF_SUCCESS;
1562 PSUPQUERYFUNCS pReq = (PSUPQUERYFUNCS)pReqHdr;
1566 pReq->u.Out.cFunctions = RT_ELEMENTS(g_aFunctions);
1567 memcpy(&pReq->u.Out.aFunctions[0], g_aFunctions, sizeof(g_aFunctions));
1568 pReq->Hdr.rc = VINF_SUCCESS;
1575 PSUPPAGELOCK pReq = (PSUPPAGELOCK)pReqHdr;
1577 REQ_CHECK_SIZE_OUT(SUP_IOCTL_PAGE_LOCK, SUP_IOCTL_PAGE_LOCK_SIZE_OUT(pReq->u.In.cPages));
1578 REQ_CHECK_EXPR(SUP_IOCTL_PAGE_LOCK, pReq->u.In.cPages > 0);
1579 REQ_CHECK_EXPR(SUP_IOCTL_PAGE_LOCK, pReq->u.In.pvR3 >= PAGE_SIZE);
1582 pReq->Hdr.rc = SUPR0LockMem(pSession, pReq->u.In.pvR3, pReq->u.In.cPages, &pReq->u.Out.aPages[0]);
1583 if (RT_FAILURE(pReq->Hdr.rc))
1584 pReq->Hdr.cbOut = sizeof(pReq->Hdr);
1591 PSUPPAGEUNLOCK pReq = (PSUPPAGEUNLOCK)pReqHdr;
1595 pReq->Hdr.rc = SUPR0UnlockMem(pSession, pReq->u.In.pvR3);
1602 PSUPCONTALLOC pReq = (PSUPCONTALLOC)pReqHdr;
1606 pReq->Hdr.rc = SUPR0ContAlloc(pSession, pReq->u.In.cPages, &pReq->u.Out.pvR0, &pReq->u.Out.pvR3, &pReq->u.Out.HCPhys);
1607 if (RT_FAILURE(pReq->Hdr.rc))
1608 pReq->Hdr.cbOut = sizeof(pReq->Hdr);
1615 PSUPCONTFREE pReq = (PSUPCONTFREE)pReqHdr;
1619 pReq->Hdr.rc = SUPR0ContFree(pSession, (RTHCUINTPTR)pReq->u.In.pvR3);
1626 PSUPLDROPEN pReq = (PSUPLDROPEN)pReqHdr;
1628 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageWithTabs > 0);
1629 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageWithTabs < 16*_1M);
1630 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageBits > 0);
1631 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageBits > 0);
1632 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageBits < pReq->u.In.cbImageWithTabs);
1633 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.szName[0]);
1634 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, RTStrEnd(pReq->u.In.szName, sizeof(pReq->u.In.szName)));
1635 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, supdrvIsLdrModuleNameValid(pReq->u.In.szName));
1636 REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, RTStrEnd(pReq->u.In.szFilename, sizeof(pReq->u.In.szFilename)));
1639 pReq->Hdr.rc = supdrvIOCtl_LdrOpen(pDevExt, pSession, pReq);
1646 PSUPLDRLOAD pReq = (PSUPLDRLOAD)pReqHdr;
1647 REQ_CHECK_EXPR(Name, pReq->Hdr.cbIn >= sizeof(*pReq));
1648 REQ_CHECK_SIZES_EX(SUP_IOCTL_LDR_LOAD, SUP_IOCTL_LDR_LOAD_SIZE_IN(pReq->u.In.cbImageWithTabs), SUP_IOCTL_LDR_LOAD_SIZE_OUT);
1649 REQ_CHECK_EXPR(SUP_IOCTL_LDR_LOAD, pReq->u.In.cSymbols <= 16384);
1650 REQ_CHECK_EXPR_FMT( !pReq->u.In.cSymbols
1651 || ( pReq->u.In.offSymbols < pReq->u.In.cbImageWithTabs
1652 && pReq->u.In.offSymbols + pReq->u.In.cSymbols * sizeof(SUPLDRSYM) <= pReq->u.In.cbImageWithTabs),
1653 ("SUP_IOCTL_LDR_LOAD: offSymbols=%#lx cSymbols=%#lx cbImageWithTabs=%#lx\n", (long)pReq->u.In.offSymbols,
1654 (long)pReq->u.In.cSymbols, (long)pReq->u.In.cbImageWithTabs));
1655 REQ_CHECK_EXPR_FMT( !pReq->u.In.cbStrTab
1656 || ( pReq->u.In.offStrTab < pReq->u.In.cbImageWithTabs
1657 && pReq->u.In.offStrTab + pReq->u.In.cbStrTab <= pReq->u.In.cbImageWithTabs
1658 && pReq->u.In.cbStrTab <= pReq->u.In.cbImageWithTabs),
1659 ("SUP_IOCTL_LDR_LOAD: offStrTab=%#lx cbStrTab=%#lx cbImageWithTabs=%#lx\n", (long)pReq->u.In.offStrTab,
1660 (long)pReq->u.In.cbStrTab, (long)pReq->u.In.cbImageWithTabs));
1662 if (pReq->u.In.cSymbols)
1665 PSUPLDRSYM paSyms = (PSUPLDRSYM)&pReq->u.In.abImage[pReq->u.In.offSymbols];
1666 for (i = 0; i < pReq->u.In.cSymbols; i++)
1668 REQ_CHECK_EXPR_FMT(paSyms[i].offSymbol < pReq->u.In.cbImageWithTabs,
1669 ("SUP_IOCTL_LDR_LOAD: sym #%ld: symb off %#lx (max=%#lx)\n", (long)i, (long)paSyms[i].offSymbol, (long)pReq->u.In.cbImageWithTabs));
1670 REQ_CHECK_EXPR_FMT(paSyms[i].offName < pReq->u.In.cbStrTab,
1671 ("SUP_IOCTL_LDR_LOAD: sym #%ld: name off %#lx (max=%#lx)\n", (long)i, (long)paSyms[i].offName, (long)pReq->u.In.cbImageWithTabs));
1672 REQ_CHECK_EXPR_FMT(RTStrEnd((char const *)&pReq->u.In.abImage[pReq->u.In.offStrTab + paSyms[i].offName],
1673 pReq->u.In.cbStrTab - paSyms[i].offName),
1674 ("SUP_IOCTL_LDR_LOAD: sym #%ld: unterminated name! (%#lx / %#lx)\n", (long)i, (long)paSyms[i].offName, (long)pReq->u.In.cbImageWithTabs));
1679 pReq->Hdr.rc = supdrvIOCtl_LdrLoad(pDevExt, pSession, pReq);
1686 PSUPLDRFREE pReq = (PSUPLDRFREE)pReqHdr;
1690 pReq->Hdr.rc = supdrvIOCtl_LdrFree(pDevExt, pSession, pReq);
1707 PSUPLDRGETSYMBOL pReq = (PSUPLDRGETSYMBOL)pReqHdr;
1709 REQ_CHECK_EXPR(SUP_IOCTL_LDR_GET_SYMBOL, RTStrEnd(pReq->u.In.szSymbol, sizeof(pReq->u.In.szSymbol)));
1712 pReq->Hdr.rc = supdrvIOCtl_LdrGetSymbol(pDevExt, pSession, pReq);
1719 PSUPCALLVMMR0 pReq = (PSUPCALLVMMR0)pReqHdr;
1721 pReq->u.In.uOperation, pReq->Hdr.cbIn, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
1723 if (pReq->Hdr.cbIn == SUP_IOCTL_CALL_VMMR0_SIZE(0))
1729 pReq->Hdr.rc = pDevExt->pfnVMMR0EntryEx(pReq->u.In.pVMR0, pReq->u.In.idCpu, pReq->u.In.uOperation, NULL, pReq->u.In.u64Arg, pSession);
1731 pReq->Hdr.rc = VERR_WRONG_ORDER;
1735 PSUPVMMR0REQHDR pVMMReq = (PSUPVMMR0REQHDR)&pReq->abReqPkt[0];
1736 REQ_CHECK_EXPR_FMT(pReq->Hdr.cbIn >= SUP_IOCTL_CALL_VMMR0_SIZE(sizeof(SUPVMMR0REQHDR)),
1737 ("SUP_IOCTL_CALL_VMMR0: cbIn=%#x < %#lx\n", pReq->Hdr.cbIn, SUP_IOCTL_CALL_VMMR0_SIZE(sizeof(SUPVMMR0REQHDR))));
1743 pReq->Hdr.rc = pDevExt->pfnVMMR0EntryEx(pReq->u.In.pVMR0, pReq->u.In.idCpu, pReq->u.In.uOperation, pVMMReq, pReq->u.In.u64Arg, pSession);
1745 pReq->Hdr.rc = VERR_WRONG_ORDER;
1748 if ( RT_FAILURE(pReq->Hdr.rc)
1749 && pReq->Hdr.rc != VERR_INTERRUPTED
1750 && pReq->Hdr.rc != VERR_TIMEOUT)
1752 pReq->Hdr.rc, pReq->u.In.uOperation, pReq->Hdr.cbOut, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
1755 pReq->Hdr.rc, pReq->u.In.uOperation, pReq->Hdr.cbOut, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
1762 PSUPCALLVMMR0 pReq = (PSUPCALLVMMR0)pReqHdr;
1765 pReq->u.In.uOperation, pReq->Hdr.cbIn, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
1767 pVMMReq = (PSUPVMMR0REQHDR)&pReq->abReqPkt[0];
1768 REQ_CHECK_EXPR_FMT(pReq->Hdr.cbIn >= SUP_IOCTL_CALL_VMMR0_BIG_SIZE(sizeof(SUPVMMR0REQHDR)),
1769 ("SUP_IOCTL_CALL_VMMR0_BIG: cbIn=%#x < %#lx\n", pReq->Hdr.cbIn, SUP_IOCTL_CALL_VMMR0_BIG_SIZE(sizeof(SUPVMMR0REQHDR))));
1775 pReq->Hdr.rc = pDevExt->pfnVMMR0EntryEx(pReq->u.In.pVMR0, pReq->u.In.idCpu, pReq->u.In.uOperation, pVMMReq, pReq->u.In.u64Arg, pSession);
1777 pReq->Hdr.rc = VERR_WRONG_ORDER;
1779 if ( RT_FAILURE(pReq->Hdr.rc)
1780 && pReq->Hdr.rc != VERR_INTERRUPTED
1781 && pReq->Hdr.rc != VERR_TIMEOUT)
1783 pReq->Hdr.rc, pReq->u.In.uOperation, pReq->Hdr.cbOut, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
1786 pReq->Hdr.rc, pReq->u.In.uOperation, pReq->Hdr.cbOut, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
1793 PSUPGETPAGINGMODE pReq = (PSUPGETPAGINGMODE)pReqHdr;
1797 pReq->Hdr.rc = VINF_SUCCESS;
1798 pReq->u.Out.enmMode = SUPR0GetPagingMode();
1805 PSUPLOWALLOC pReq = (PSUPLOWALLOC)pReqHdr;
1806 REQ_CHECK_EXPR(SUP_IOCTL_LOW_ALLOC, pReq->Hdr.cbIn <= SUP_IOCTL_LOW_ALLOC_SIZE_IN);
1807 REQ_CHECK_SIZES_EX(SUP_IOCTL_LOW_ALLOC, SUP_IOCTL_LOW_ALLOC_SIZE_IN, SUP_IOCTL_LOW_ALLOC_SIZE_OUT(pReq->u.In.cPages));
1810 pReq->Hdr.rc = SUPR0LowAlloc(pSession, pReq->u.In.cPages, &pReq->u.Out.pvR0, &pReq->u.Out.pvR3, &pReq->u.Out.aPages[0]);
1811 if (RT_FAILURE(pReq->Hdr.rc))
1812 pReq->Hdr.cbOut = sizeof(pReq->Hdr);
1819 PSUPLOWFREE pReq = (PSUPLOWFREE)pReqHdr;
1823 pReq->Hdr.rc = SUPR0LowFree(pSession, (RTHCUINTPTR)pReq->u.In.pvR3);
1830 PSUPGIPMAP pReq = (PSUPGIPMAP)pReqHdr;
1834 pReq->Hdr.rc = SUPR0GipMap(pSession, &pReq->u.Out.pGipR3, &pReq->u.Out.HCPhysGip);
1835 if (RT_SUCCESS(pReq->Hdr.rc))
1836 pReq->u.Out.pGipR0 = pDevExt->pGip;
1843 PSUPGIPUNMAP pReq = (PSUPGIPUNMAP)pReqHdr;
1847 pReq->Hdr.rc = SUPR0GipUnmap(pSession);
1854 PSUPSETVMFORFAST pReq = (PSUPSETVMFORFAST)pReqHdr;
1856 REQ_CHECK_EXPR_FMT( !pReq->u.In.pVMR0
1857 || ( VALID_PTR(pReq->u.In.pVMR0)
1858 && !((uintptr_t)pReq->u.In.pVMR0 & (PAGE_SIZE - 1))),
1859 ("SUP_IOCTL_SET_VM_FOR_FAST: pVMR0=%p!\n", pReq->u.In.pVMR0));
1861 pSession->pVM = pReq->u.In.pVMR0;
1862 pReq->Hdr.rc = VINF_SUCCESS;
1869 PSUPPAGEALLOCEX pReq = (PSUPPAGEALLOCEX)pReqHdr;
1870 REQ_CHECK_EXPR(SUP_IOCTL_PAGE_ALLOC_EX, pReq->Hdr.cbIn <= SUP_IOCTL_PAGE_ALLOC_EX_SIZE_IN);
1871 REQ_CHECK_SIZES_EX(SUP_IOCTL_PAGE_ALLOC_EX, SUP_IOCTL_PAGE_ALLOC_EX_SIZE_IN, SUP_IOCTL_PAGE_ALLOC_EX_SIZE_OUT(pReq->u.In.cPages));
1872 REQ_CHECK_EXPR_FMT(pReq->u.In.fKernelMapping || pReq->u.In.fUserMapping,
1874 REQ_CHECK_EXPR_FMT(pReq->u.In.fUserMapping,
1876 REQ_CHECK_EXPR_FMT(!pReq->u.In.fReserved0 && !pReq->u.In.fReserved1,
1877 ("SUP_IOCTL_PAGE_ALLOC_EX: fReserved0=%d fReserved1=%d\n", pReq->u.In.fReserved0, pReq->u.In.fReserved1));
1880 pReq->Hdr.rc = SUPR0PageAllocEx(pSession, pReq->u.In.cPages, 0 /* fFlags */,
1881 pReq->u.In.fUserMapping ? &pReq->u.Out.pvR3 : NULL,
1882 pReq->u.In.fKernelMapping ? &pReq->u.Out.pvR0 : NULL,
1883 &pReq->u.Out.aPages[0]);
1884 if (RT_FAILURE(pReq->Hdr.rc))
1885 pReq->Hdr.cbOut = sizeof(pReq->Hdr);
1892 PSUPPAGEMAPKERNEL pReq = (PSUPPAGEMAPKERNEL)pReqHdr;
1894 REQ_CHECK_EXPR_FMT(!pReq->u.In.fFlags, ("SUP_IOCTL_PAGE_MAP_KERNEL: fFlags=%#x! MBZ\n", pReq->u.In.fFlags));
1895 REQ_CHECK_EXPR_FMT(!(pReq->u.In.offSub & PAGE_OFFSET_MASK), ("SUP_IOCTL_PAGE_MAP_KERNEL: offSub=%#x\n", pReq->u.In.offSub));
1896 REQ_CHECK_EXPR_FMT(pReq->u.In.cbSub && !(pReq->u.In.cbSub & PAGE_OFFSET_MASK),
1897 ("SUP_IOCTL_PAGE_MAP_KERNEL: cbSub=%#x\n", pReq->u.In.cbSub));
1900 pReq->Hdr.rc = SUPR0PageMapKernel(pSession, pReq->u.In.pvR3, pReq->u.In.offSub, pReq->u.In.cbSub,
1901 pReq->u.In.fFlags, &pReq->u.Out.pvR0);
1902 if (RT_FAILURE(pReq->Hdr.rc))
1903 pReq->Hdr.cbOut = sizeof(pReq->Hdr);
1910 PSUPPAGEPROTECT pReq = (PSUPPAGEPROTECT)pReqHdr;
1912 REQ_CHECK_EXPR_FMT(!(pReq->u.In.fProt & ~(RTMEM_PROT_READ | RTMEM_PROT_WRITE | RTMEM_PROT_EXEC | RTMEM_PROT_NONE)),
1913 ("SUP_IOCTL_PAGE_PROTECT: fProt=%#x!\n", pReq->u.In.fProt));
1914 REQ_CHECK_EXPR_FMT(!(pReq->u.In.offSub & PAGE_OFFSET_MASK), ("SUP_IOCTL_PAGE_PROTECT: offSub=%#x\n", pReq->u.In.offSub));
1915 REQ_CHECK_EXPR_FMT(pReq->u.In.cbSub && !(pReq->u.In.cbSub & PAGE_OFFSET_MASK),
1916 ("SUP_IOCTL_PAGE_PROTECT: cbSub=%#x\n", pReq->u.In.cbSub));
1919 pReq->Hdr.rc = SUPR0PageProtect(pSession, pReq->u.In.pvR3, pReq->u.In.pvR0, pReq->u.In.offSub, pReq->u.In.cbSub, pReq->u.In.fProt);
1926 PSUPPAGEFREE pReq = (PSUPPAGEFREE)pReqHdr;
1930 pReq->Hdr.rc = SUPR0PageFree(pSession, pReq->u.In.pvR3);
1937 PSUPCALLSERVICE pReq = (PSUPCALLSERVICE)pReqHdr;
1939 pReq->u.In.uOperation, pReq->Hdr.cbIn, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
1941 if (pReq->Hdr.cbIn == SUP_IOCTL_CALL_SERVICE_SIZE(0))
1945 PSUPR0SERVICEREQHDR pSrvReq = (PSUPR0SERVICEREQHDR)&pReq->abReqPkt[0];
1946 REQ_CHECK_EXPR_FMT(pReq->Hdr.cbIn >= SUP_IOCTL_CALL_SERVICE_SIZE(sizeof(SUPR0SERVICEREQHDR)),
1947 ("SUP_IOCTL_CALL_SERVICE: cbIn=%#x < %#lx\n", pReq->Hdr.cbIn, SUP_IOCTL_CALL_SERVICE_SIZE(sizeof(SUPR0SERVICEREQHDR))));
1951 REQ_CHECK_EXPR(SUP_IOCTL_CALL_SERVICE, RTStrEnd(pReq->u.In.szName, sizeof(pReq->u.In.szName)));
1954 pReq->Hdr.rc = supdrvIOCtl_CallServiceModule(pDevExt, pSession, pReq);
1961 PSUPLOGGERSETTINGS pReq = (PSUPLOGGERSETTINGS)pReqHdr;
1964 REQ_CHECK_EXPR(SUP_IOCTL_LOGGER_SETTINGS, pReq->Hdr.cbIn >= SUP_IOCTL_LOGGER_SETTINGS_SIZE_IN(1));
1965 cbStrTab = pReq->Hdr.cbIn - SUP_IOCTL_LOGGER_SETTINGS_SIZE_IN(0);
1966 REQ_CHECK_EXPR(SUP_IOCTL_LOGGER_SETTINGS, pReq->u.In.offGroups < cbStrTab);
1967 REQ_CHECK_EXPR(SUP_IOCTL_LOGGER_SETTINGS, pReq->u.In.offFlags < cbStrTab);
1968 REQ_CHECK_EXPR(SUP_IOCTL_LOGGER_SETTINGS, pReq->u.In.offDestination < cbStrTab);
1969 REQ_CHECK_EXPR_FMT(pReq->u.In.szStrings[cbStrTab - 1] == '\0',
1971 pReq->Hdr.cbIn, cbStrTab, pReq->u.In.szStrings[cbStrTab - 1]));
1972 REQ_CHECK_EXPR(SUP_IOCTL_LOGGER_SETTINGS, pReq->u.In.fWhich <= SUPLOGGERSETTINGS_WHICH_RELEASE);
1973 REQ_CHECK_EXPR(SUP_IOCTL_LOGGER_SETTINGS, pReq->u.In.fWhat <= SUPLOGGERSETTINGS_WHAT_DESTROY);
1976 pReq->Hdr.rc = supdrvIOCtl_LoggerSettings(pDevExt, pSession, pReq);
1983 PSUPSEMOP2 pReq = (PSUPSEMOP2)pReqHdr;
1985 REQ_CHECK_EXPR(SUP_IOCTL_SEM_OP2, pReq->u.In.uReserved == 0);
1988 switch (pReq->u.In.uType)
1992 SUPSEMEVENT hEvent = (SUPSEMEVENT)(uintptr_t)pReq->u.In.hSem;
1993 switch (pReq->u.In.uOp)
1996 pReq->Hdr.rc = SUPSemEventWaitNoResume(pSession, hEvent, pReq->u.In.uArg.cRelMsTimeout);
1999 pReq->Hdr.rc = SUPSemEventWaitNsAbsIntr(pSession, hEvent, pReq->u.In.uArg.uAbsNsTimeout);
2002 pReq->Hdr.rc = SUPSemEventWaitNsRelIntr(pSession, hEvent, pReq->u.In.uArg.cRelNsTimeout);
2005 pReq->Hdr.rc = SUPSemEventSignal(pSession, hEvent);
2008 pReq->Hdr.rc = SUPSemEventClose(pSession, hEvent);
2012 pReq->Hdr.rc = VERR_INVALID_FUNCTION;
2020 SUPSEMEVENTMULTI hEventMulti = (SUPSEMEVENTMULTI)(uintptr_t)pReq->u.In.hSem;
2021 switch (pReq->u.In.uOp)
2024 pReq->Hdr.rc = SUPSemEventMultiWaitNoResume(pSession, hEventMulti, pReq->u.In.uArg.cRelMsTimeout);
2027 pReq->Hdr.rc = SUPSemEventMultiWaitNsAbsIntr(pSession, hEventMulti, pReq->u.In.uArg.uAbsNsTimeout);
2030 pReq->Hdr.rc = SUPSemEventMultiWaitNsRelIntr(pSession, hEventMulti, pReq->u.In.uArg.cRelNsTimeout);
2033 pReq->Hdr.rc = SUPSemEventMultiSignal(pSession, hEventMulti);
2036 pReq->Hdr.rc = SUPSemEventMultiClose(pSession, hEventMulti);
2039 pReq->Hdr.rc = SUPSemEventMultiReset(pSession, hEventMulti);
2042 pReq->Hdr.rc = VERR_INVALID_FUNCTION;
2049 pReq->Hdr.rc = VERR_INVALID_PARAMETER;
2058 PSUPSEMOP3 pReq = (PSUPSEMOP3)pReqHdr;
2060 REQ_CHECK_EXPR(SUP_IOCTL_SEM_OP3, pReq->u.In.u32Reserved == 0 && pReq->u.In.u64Reserved == 0);
2063 switch (pReq->u.In.uType)
2067 SUPSEMEVENT hEvent = (SUPSEMEVENT)(uintptr_t)pReq->u.In.hSem;
2068 switch (pReq->u.In.uOp)
2072 pReq->Hdr.rc = SUPSemEventCreate(pSession, &hEvent);
2073 pReq->u.Out.hSem = (uint32_t)(uintptr_t)hEvent;
2077 pReq->Hdr.rc = VINF_SUCCESS;
2078 pReq->Hdr.cbOut = sizeof(*pReq);
2079 pReq->u.Out.cNsResolution = SUPSemEventGetResolution(pSession);
2082 pReq->Hdr.rc = VERR_INVALID_FUNCTION;
2090 SUPSEMEVENTMULTI hEventMulti = (SUPSEMEVENTMULTI)(uintptr_t)pReq->u.In.hSem;
2091 switch (pReq->u.In.uOp)
2095 pReq->Hdr.rc = SUPSemEventMultiCreate(pSession, &hEventMulti);
2096 pReq->u.Out.hSem = (uint32_t)(uintptr_t)hEventMulti;
2100 pReq->Hdr.rc = VINF_SUCCESS;
2101 pReq->u.Out.cNsResolution = SUPSemEventMultiGetResolution(pSession);
2104 pReq->Hdr.rc = VERR_INVALID_FUNCTION;
2111 pReq->Hdr.rc = VERR_INVALID_PARAMETER;
2120 PSUPVTCAPS pReq = (PSUPVTCAPS)pReqHdr;
2124 pReq->Hdr.rc = SUPR0QueryVTCaps(pSession, &pReq->u.Out.Caps);
2125 if (RT_FAILURE(pReq->Hdr.rc))
2126 pReq->Hdr.cbOut = sizeof(pReq->Hdr);
2133 PSUPTRACEROPEN pReq = (PSUPTRACEROPEN)pReqHdr;
2137 pReq->Hdr.rc = supdrvIOCtl_TracerOpen(pDevExt, pSession, pReq->u.In.uCookie, pReq->u.In.uArg);
2154 PSUPTRACERIOCTL pReq = (PSUPTRACERIOCTL)pReqHdr;
2158 pReqHdr->rc = supdrvIOCtl_TracerIOCtl(pDevExt, pSession, pReq->u.In.uCmd, pReq->u.In.uArg, &pReq->u.Out.iRetVal);
2165 PSUPTRACERUMODREG pReq = (PSUPTRACERUMODREG)pReqHdr;
2167 if (!RTStrEnd(pReq->u.In.szName, sizeof(pReq->u.In.szName)))
2172 pReq->u.In.R3PtrVtgHdr, pReq->u.In.uVtgHdrAddr,
2173 pReq->u.In.R3PtrStrTab, pReq->u.In.cbStrTab,
2174 pReq->u.In.szName, pReq->u.In.fFlags);
2181 PSUPTRACERUMODDEREG pReq = (PSUPTRACERUMODDEREG)pReqHdr;
2185 pReqHdr->rc = supdrvIOCtl_TracerUmodDeregister(pDevExt, pSession, pReq->u.In.pVtgHdr);
2192 PSUPTRACERUMODFIREPROBE pReq = (PSUPTRACERUMODFIREPROBE)pReqHdr;
2195 supdrvIOCtl_TracerUmodProbeFire(pDevExt, pSession, &pReq->u.In);
2203 PSUPMSRPROBER pReq = (PSUPMSRPROBER)pReqHdr;
2206 pReq->u.In.enmOp > SUPMSRPROBEROP_INVALID && pReq->u.In.enmOp < SUPMSRPROBEROP_END);
2208 pReqHdr->rc = supdrvIOCtl_MsrProber(pDevExt, pReq);
2224 PSUPTSCDELTAMEASURE pReq = (PSUPTSCDELTAMEASURE)pReqHdr;
2227 pReqHdr->rc = supdrvIOCtl_TscDeltaMeasure(pDevExt, pSession, pReq);
2234 PSUPTSCREAD pReq = (PSUPTSCREAD)pReqHdr;
2237 pReqHdr->rc = supdrvIOCtl_TscRead(pDevExt, pSession, pReq);
2269 PSUPCOOKIE pReq = (PSUPCOOKIE)pReqHdr;
2271 if (strncmp(pReq->u.In.szMagic, SUPCOOKIE_MAGIC, sizeof(pReq->u.In.szMagic)))
2273 OSDBGPRINT(("SUP_IOCTL_COOKIE: invalid magic %.16s\n", pReq->u.In.szMagic));
2274 pReq->Hdr.rc = VERR_INVALID_MAGIC;
2282 if ( pReq->u.In.u32MinVersion > SUPDRV_IOC_VERSION
2283 || (pReq->u.In.u32MinVersion & 0xffff0000) != (SUPDRV_IOC_VERSION & 0xffff0000))
2286 pReq->u.In.u32ReqVersion, pReq->u.In.u32MinVersion, SUPDRV_IOC_VERSION));
2287 pReq->u.Out.u32Cookie = 0xffffffff;
2288 pReq->u.Out.u32SessionCookie = 0xffffffff;
2289 pReq->u.Out.u32SessionVersion = 0xffffffff;
2290 pReq->u.Out.u32DriverVersion = SUPDRV_IOC_VERSION;
2291 pReq->u.Out.pSession = NULL;
2292 pReq->u.Out.cFunctions = 0;
2293 pReq->Hdr.rc = VERR_VERSION_MISMATCH;
2303 pReq->u.Out.u32Cookie = pDevExt->u32Cookie;
2304 pReq->u.Out.u32SessionCookie = pSession->u32Cookie;
2305 pReq->u.Out.u32SessionVersion = SUPDRV_IOC_VERSION;
2306 pReq->u.Out.u32DriverVersion = SUPDRV_IOC_VERSION;
2307 pReq->u.Out.pSession = pSession;
2308 pReq->u.Out.cFunctions = 0;
2309 pReq->Hdr.rc = VINF_SUCCESS;
2316 PSUPVTCAPS pReq = (PSUPVTCAPS)pReqHdr;
2320 pReq->Hdr.rc = SUPR0QueryVTCaps(pSession, &pReq->u.Out.Caps);
2321 if (RT_FAILURE(pReq->Hdr.rc))
2322 pReq->Hdr.cbOut = sizeof(pReq->Hdr);
2449 PSUPDRVIDCREQCONNECT pReq = (PSUPDRVIDCREQCONNECT)pReqHdr;
2450 REQ_CHECK_IDC_SIZE(SUPDRV_IDC_REQ_CONNECT, sizeof(*pReq));
2455 if (pReq->Hdr.pSession != NULL)
2457 OSDBGPRINT(("SUPDRV_IDC_REQ_CONNECT: Hdr.pSession=%p expected NULL!\n", pReq->Hdr.pSession));
2460 if (pReq->u.In.u32MagicCookie != SUPDRVIDCREQ_CONNECT_MAGIC_COOKIE)
2463 (unsigned)pReq->u.In.u32MagicCookie, (unsigned)SUPDRVIDCREQ_CONNECT_MAGIC_COOKIE));
2466 if ( pReq->u.In.uMinVersion > pReq->u.In.uReqVersion
2467 || (pReq->u.In.uMinVersion & UINT32_C(0xffff0000)) != (pReq->u.In.uReqVersion & UINT32_C(0xffff0000)))
2470 pReq->u.In.uMinVersion, pReq->u.In.uReqVersion));
2483 if ( pReq->u.In.uMinVersion > SUPDRV_IDC_VERSION
2484 || (pReq->u.In.uMinVersion & 0xffff0000) != (SUPDRV_IDC_VERSION & 0xffff0000))
2487 pReq->u.In.uReqVersion, pReq->u.In.uMinVersion, (unsigned)SUPDRV_IDC_VERSION));
2488 pReq->u.Out.pSession = NULL;
2489 pReq->u.Out.uSessionVersion = 0xffffffff;
2490 pReq->u.Out.uDriverVersion = SUPDRV_IDC_VERSION;
2491 pReq->u.Out.uDriverRevision = VBOX_SVN_REV;
2492 pReq->Hdr.rc = VERR_VERSION_MISMATCH;
2496 pReq->u.Out.pSession = NULL;
2497 pReq->u.Out.uSessionVersion = SUPDRV_IDC_VERSION;
2498 pReq->u.Out.uDriverVersion = SUPDRV_IDC_VERSION;
2499 pReq->u.Out.uDriverRevision = VBOX_SVN_REV;
2501 pReq->Hdr.rc = supdrvCreateSession(pDevExt, false /* fUser */, true /*fUnrestricted*/, &pSession);
2502 if (RT_FAILURE(pReq->Hdr.rc))
2504 OSDBGPRINT(("SUPDRV_IDC_REQ_CONNECT: failed to create session, rc=%d\n", pReq->Hdr.rc));
2508 pReq->u.Out.pSession = pSession;
2509 pReq->Hdr.pSession = pSession;
2524 PSUPDRVIDCREQGETSYM pReq = (PSUPDRVIDCREQGETSYM)pReqHdr;
2525 REQ_CHECK_IDC_SIZE(SUPDRV_IDC_REQ_GET_SYMBOL, sizeof(*pReq));
2527 pReq->Hdr.rc = supdrvIDC_LdrGetSymbol(pDevExt, pSession, pReq);
2533 PSUPDRVIDCREQCOMPREGFACTORY pReq = (PSUPDRVIDCREQCOMPREGFACTORY)pReqHdr;
2534 REQ_CHECK_IDC_SIZE(SUPDRV_IDC_REQ_COMPONENT_REGISTER_FACTORY, sizeof(*pReq));
2536 pReq->Hdr.rc = SUPR0ComponentRegisterFactory(pSession, pReq->u.In.pFactory);
2542 PSUPDRVIDCREQCOMPDEREGFACTORY pReq = (PSUPDRVIDCREQCOMPDEREGFACTORY)pReqHdr;
2543 REQ_CHECK_IDC_SIZE(SUPDRV_IDC_REQ_COMPONENT_DEREGISTER_FACTORY, sizeof(*pReq));
2545 pReq->Hdr.rc = SUPR0ComponentDeregisterFactory(pSession, pReq->u.In.pFactory);
4343 * @param pReq The open request.
4345 static int supdrvIOCtl_LdrOpen(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLDROPEN pReq)
4350 size_t cchName = strlen(pReq->u.In.szName); /* (caller checked < 32). */
4351 LogFlow(("supdrvIOCtl_LdrOpen: szName=%s cbImageWithTabs=%d\n", pReq->u.In.szName, pReq->u.In.cbImageWithTabs));
4360 && !memcmp(pImage->szName, pReq->u.In.szName, cchName))
4366 pReq->u.Out.pvImageBase = pImage->pvImage;
4367 pReq->u.Out.fNeedsLoading = pImage->uState == SUP_IOCTL_LDR_OPEN;
4368 pReq->u.Out.fNativeLoader = pImage->fNative;
4374 Log(("supdrvIOCtl_LdrOpen: To many existing references to '%s'!\n", pReq->u.In.szName));
4384 Log(("supdrvIOCtl_LdrOpen: Not adding '%s' to image list, loader interface is locked down!\n", pReq->u.In.szName));
4406 pImage->cbImageWithTabs = pReq->u.In.cbImageWithTabs;
4407 pImage->cbImageBits = pReq->u.In.cbImageBits;
4418 memcpy(pImage->szName, pReq->u.In.szName, cchName + 1);
4425 rc = supdrvOSLdrOpen(pDevExt, pImage, pReq->u.In.szFilename);
4437 Log(("supdrvIOCtl_LdrOpen(%s): failed - %Rrc\n", pReq->u.In.szName, rc));
4450 pReq->u.Out.pvImageBase = pImage->pvImage;
4451 pReq->u.Out.fNeedsLoading = true;
4452 pReq->u.Out.fNativeLoader = pImage->fNative;
4508 * @param pReq The request.
4510 static int supdrvIOCtl_LdrLoad(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLDRLOAD pReq)
4515 LogFlow(("supdrvIOCtl_LdrLoad: pvImageBase=%p cbImageWithBits=%d\n", pReq->u.In.pvImageBase, pReq->u.In.cbImageWithTabs));
4522 while (pUsage && pUsage->pImage->pvImage != pReq->u.In.pvImageBase)
4535 if ( pImage->cbImageWithTabs != pReq->u.In.cbImageWithTabs
4536 || pImage->cbImageBits != pReq->u.In.cbImageBits)
4540 pImage->cbImageWithTabs, pReq->u.In.cbImageWithTabs, pImage->cbImageBits, pReq->u.In.cbImageBits));
4561 switch (pReq->u.In.eEPType)
4567 rc = supdrvLdrValidatePointer( pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0, false, pReq->u.In.abImage, "pvVMMR0");
4569 rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0EntryInt, false, pReq->u.In.abImage, "pvVMMR0EntryInt");
4571 rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0EntryFast, false, pReq->u.In.abImage, "pvVMMR0EntryFast");
4573 rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0EntryEx, false, pReq->u.In.abImage, "pvVMMR0EntryEx");
4579 rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.Service.pfnServiceReq, false, pReq->u.In.abImage, "pfnServiceReq");
4582 if ( pReq->u.In.EP.Service.apvReserved[0] != NIL_RTR0PTR
4583 || pReq->u.In.EP.Service.apvReserved[1] != NIL_RTR0PTR
4584 || pReq->u.In.EP.Service.apvReserved[2] != NIL_RTR0PTR)
4588 pImage->pvImage, pReq->u.In.cbImageWithTabs,
4589 pReq->u.In.EP.Service.apvReserved[0],
4590 pReq->u.In.EP.Service.apvReserved[1],
4591 pReq->u.In.EP.Service.apvReserved[2]));
4598 Log(("Invalid eEPType=%d\n", pReq->u.In.eEPType));
4602 rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.pfnModuleInit, true, pReq->u.In.abImage, "pfnModuleInit");
4605 rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.pfnModuleTerm, true, pReq->u.In.abImage, "pfnModuleTerm");
4613 pImage->cbStrTab = pReq->u.In.cbStrTab;
4618 memcpy(pImage->pachStrTab, &pReq->u.In.abImage[pReq->u.In.offStrTab], pImage->cbStrTab);
4623 pImage->cSymbols = pReq->u.In.cSymbols;
4629 memcpy(pImage->paSymbols, &pReq->u.In.abImage[pReq->u.In.offSymbols], cbSymbols);
4640 pImage->pfnModuleInit = (PFNR0MODULEINIT)pReq->u.In.pfnModuleInit;
4641 pImage->pfnModuleTerm = (PFNR0MODULETERM)pReq->u.In.pfnModuleTerm;
4644 rc = supdrvOSLdrLoad(pDevExt, pImage, pReq->u.In.abImage, pReq);
4647 memcpy(pImage->pvImage, &pReq->u.In.abImage[0], pImage->cbImageBits);
4657 switch (pReq->u.In.eEPType)
4664 rc = supdrvLdrSetVMMR0EPs(pDevExt, pReq->u.In.EP.VMMR0.pvVMMR0, pReq->u.In.EP.VMMR0.pvVMMR0EntryInt,
4665 pReq->u.In.EP.VMMR0.pvVMMR0EntryFast, pReq->u.In.EP.VMMR0.pvVMMR0EntryEx);
4668 pImage->pfnServiceReqHandler = (PFNSUPR0SERVICEREQHANDLER)pReq->u.In.EP.Service.pfnServiceReq;
4719 * @param pReq The request.
4721 static int supdrvIOCtl_LdrFree(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLDRFREE pReq)
4727 LogFlow(("supdrvIOCtl_LdrFree: pvImageBase=%p\n", pReq->u.In.pvImageBase));
4735 while (pUsage && pUsage->pImage->pvImage != pReq->u.In.pvImageBase)
4850 * @param pReq The request buffer.
4852 static int supdrvIOCtl_LdrGetSymbol(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLDRGETSYMBOL pReq)
4859 const size_t cbSymbol = strlen(pReq->u.In.szSymbol) + 1;
4862 Log3(("supdrvIOCtl_LdrGetSymbol: pvImageBase=%p szSymbol=\"%s\"\n", pReq->u.In.pvImageBase, pReq->u.In.szSymbol));
4869 while (pUsage && pUsage->pImage->pvImage != pReq->u.In.pvImageBase)
4897 && !memcmp(pchStrings + paSyms[i].offName, pReq->u.In.szSymbol, cbSymbol))
4905 pReq->u.Out.pvSymbol = pvSymbol;
4917 * @param pReq The request buffer.
4919 static int supdrvIDC_LdrGetSymbol(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPDRVIDCREQGETSYM pReq)
4922 const char *pszSymbol = pReq->u.In.pszSymbol;
4923 const char *pszModule = pReq->u.In.pszModule;
4954 pReq->u.Out.pfnSymbol = (PFNRT)g_aFunctions[i].pfn;
4985 pReq->u.Out.pfnSymbol = (PFNRT)((uint8_t *)pImage->pvImage + (int32_t)paSyms[i].offSymbol);
5230 * @param pReq The request packet, valid.
5232 static int supdrvIOCtl_CallServiceModule(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPCALLSERVICE pReq)
5248 && !strcmp(pUsage->pImage->szName, pReq->u.In.szName))
5260 if (pReq->Hdr.cbIn == SUP_IOCTL_CALL_SERVICE_SIZE(0))
5261 rc = pfnServiceReqHandler(pSession, pReq->u.In.uOperation, pReq->u.In.u64Arg, NULL);
5263 rc = pfnServiceReqHandler(pSession, pReq->u.In.uOperation, pReq->u.In.u64Arg, (PSUPR0SERVICEREQHDR)&pReq->abReqPkt[0]);
5274 rc, pReq->u.In.uOperation, pReq->Hdr.cbOut, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
5277 rc, pReq->u.In.uOperation, pReq->Hdr.cbOut, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
5291 * @param pReq The request.
5293 static int supdrvIOCtl_LoggerSettings(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPLOGGERSETTINGS pReq)
5295 const char *pszGroup = &pReq->u.In.szStrings[pReq->u.In.offGroups];
5296 const char *pszFlags = &pReq->u.In.szStrings[pReq->u.In.offFlags];
5297 const char *pszDest = &pReq->u.In.szStrings[pReq->u.In.offDestination];
5304 switch (pReq->u.In.fWhat)
5313 if (pReq->u.In.fWhich == SUPLOGGERSETTINGS_WHICH_RELEASE)
5324 switch (pReq->u.In.fWhich)
5341 switch (pReq->u.In.fWhat)
5366 pReq->u.In.fWhich == SUPLOGGERSETTINGS_WHICH_DEBUG
5379 switch (pReq->u.In.fWhich)
5396 switch (pReq->u.In.fWhich)
5424 * @param pReq The request.
5426 static int supdrvIOCtl_MsrProber(PSUPDRVDEVEXT pDevExt, PSUPMSRPROBER pReq)
5429 RTCPUID const idCpu = pReq->u.In.idCpu == UINT32_MAX ? NIL_RTCPUID : pReq->u.In.idCpu;
5432 switch (pReq->u.In.enmOp)
5437 rc = supdrvOSMsrProberRead(pReq->u.In.uMsr, idCpu, &uValue);
5440 pReq->u.Out.uResults.Read.uValue = uValue;
5441 pReq->u.Out.uResults.Read.fGp = false;
5445 pReq->u.Out.uResults.Read.uValue = 0;
5446 pReq->u.Out.uResults.Read.fGp = true;
5453 rc = supdrvOSMsrProberWrite(pReq->u.In.uMsr, idCpu, pReq->u.In.uArgs.Write.uToWrite);
5455 pReq->u.Out.uResults.Write.fGp = false;
5458 pReq->u.Out.uResults.Write.fGp = true;
5465 rc = supdrvOSMsrProberModify(idCpu, pReq);