DECLVBGL(int) VbglHGCMConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData) { int rc; struct VBGLHGCMHANDLEDATA *pHandleData; if (!pHandle || !pData) return VERR_INVALID_PARAMETER; pHandleData = vbglHGCMHandleAlloc(); if (!pHandleData) rc = VERR_NO_MEMORY; else { rc = vbglDriverOpen (&pHandleData->driver); if (RT_SUCCESS(rc)) { rc = vbglDriverIOCtl (&pHandleData->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, pData, sizeof (*pData)); if (RT_SUCCESS(rc)) rc = pData->result; if (RT_SUCCESS(rc)) { *pHandle = pHandleData; return rc; } vbglDriverClose (&pHandleData->driver); } vbglHGCMHandleFree (pHandleData); } return rc; }
DECLVBGL(int) VbglR0CrCtlCreate(VBGLCRCTLHANDLE *phCtl) { int rc; if (phCtl) { struct VBGLHGCMHANDLEDATA *pHandleData = vbglHGCMHandleAlloc(); if (pHandleData) { rc = vbglDriverOpen(&pHandleData->driver); if (RT_SUCCESS(rc)) { *phCtl = pHandleData; return VINF_SUCCESS; } vbglHGCMHandleFree(pHandleData); } else rc = VERR_NO_MEMORY; *phCtl = NULL; } else rc = VERR_INVALID_PARAMETER; return rc; }
DECLVBGL(int) vboxCrCtlCreate(HVBOXCRCTL *phCtl) { int rc; struct VBGLHGCMHANDLEDATA *pHandleData; if (!phCtl) return VERR_INVALID_PARAMETER; pHandleData = vbglHGCMHandleAlloc (); rc = VINF_SUCCESS; if (!pHandleData) { rc = VERR_NO_MEMORY; } else { rc = vbglDriverOpen (&pHandleData->driver); if (RT_SUCCESS(rc)) { *phCtl = pHandleData; return VINF_SUCCESS; } vbglHGCMHandleFree (pHandleData); } *phCtl = NULL; return rc; }
DECLVBGL(int) VbglR0CrCtlDestroy(VBGLCRCTLHANDLE hCtl) { vbglDriverClose(&hCtl->driver); vbglHGCMHandleFree(hCtl); return VINF_SUCCESS; }
DECLVBGL(int) vboxCrCtlDestroy(HVBOXCRCTL hCtl) { vbglDriverClose(&hCtl->driver); vbglHGCMHandleFree(hCtl); return VINF_SUCCESS; }
DECLVBGL(int) VbglHGCMDisconnect (VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData) { int rc = VINF_SUCCESS; rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, pData, sizeof (*pData)); vbglDriverClose (&handle->driver); vbglHGCMHandleFree (handle); return rc; }