/** * Resolves a symbol. * * @returns Pointer to the symbol on success, NULL on failure. * * @param pHandle The IDC handle. * @param pszName The name of the symbol. */ static void supR0IdcGetSymbol(PSUPDRVIDCHANDLE pHandle, PFNRT *ppfn, const char *pszName) { SUPDRVIDCREQGETSYM Req; int rc; /* * Create and send a get symbol request. */ Req.Hdr.cb = sizeof(Req); Req.Hdr.rc = VERR_WRONG_ORDER; Req.Hdr.pSession = pHandle->s.pSession; Req.u.In.pszSymbol = pszName; Req.u.In.pszModule = NULL; rc = supR0IdcNativeCall(pHandle, SUPDRV_IDC_REQ_GET_SYMBOL, &Req.Hdr); if (RT_SUCCESS(rc)) ASMAtomicWritePtr((void * volatile *)ppfn, Req.u.Out.pfnSymbol); }
/** * Deregisters a component factory with SUPDRV. * * @returns VBox status code. * @param pHandle The IDC handle. * @param pFactory The factory to register. */ SUPR0DECL(int) SUPR0IdcComponentDeregisterFactory(PSUPDRVIDCHANDLE pHandle, PCSUPDRVFACTORY pFactory) { SUPDRVIDCREQCOMPDEREGFACTORY Req; /* * Validate the handle before we access it. */ AssertPtrReturn(pHandle, VERR_INVALID_HANDLE); AssertPtrReturn(pHandle->s.pSession, VERR_INVALID_HANDLE); /* * Construct and fire off the request. */ Req.Hdr.cb = sizeof(Req); Req.Hdr.rc = VERR_WRONG_ORDER; Req.Hdr.pSession = pHandle->s.pSession; Req.u.In.pFactory = pFactory; return supR0IdcNativeCall(pHandle, SUPDRV_IDC_REQ_COMPONENT_DEREGISTER_FACTORY, &Req.Hdr); }
int VBOXCALL supR0IdcNativeClose(PSUPDRVIDCHANDLE pHandle, PSUPDRVIDCREQHDR pReq) { return supR0IdcNativeCall(pHandle, SUPDRV_IDC_REQ_DISCONNECT, pReq); }
int VBOXCALL supR0IdcNativeOpen(PSUPDRVIDCHANDLE pHandle, PSUPDRVIDCREQCONNECT pReq) { return supR0IdcNativeCall(pHandle, SUPDRV_IDC_REQ_CONNECT, &pReq->Hdr); }