summaryrefslogtreecommitdiff
path: root/src/VBox/Main/src-client/VMMDevInterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Main/src-client/VMMDevInterface.cpp')
-rw-r--r--src/VBox/Main/src-client/VMMDevInterface.cpp120
1 files changed, 70 insertions, 50 deletions
diff --git a/src/VBox/Main/src-client/VMMDevInterface.cpp b/src/VBox/Main/src-client/VMMDevInterface.cpp
index 5c3809fe..b4f4da47 100644
--- a/src/VBox/Main/src-client/VMMDevInterface.cpp
+++ b/src/VBox/Main/src-client/VMMDevInterface.cpp
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2006-2010 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -178,6 +178,30 @@ DECLCALLBACK(void) vmmdevUpdateGuestStatus(PPDMIVMMDEVCONNECTOR pInterface, uint
/**
+ * @interface_method_impl{PDMIVMMDEVCONNECTOR,pfnUpdateGuestUserState}
+ */
+DECLCALLBACK(void) vmmdevUpdateGuestUserState(PPDMIVMMDEVCONNECTOR pInterface,
+ const char *pszUser, const char *pszDomain,
+ uint32_t uState,
+ const uint8_t *puDetails, uint32_t cbDetails)
+{
+ PDRVMAINVMMDEV pDrv = PDMIVMMDEVCONNECTOR_2_MAINVMMDEV(pInterface);
+ AssertPtr(pDrv);
+ Console *pConsole = pDrv->pVMMDev->getParent();
+ AssertPtr(pConsole);
+
+ /* Store that information in IGuest. */
+ Guest* pGuest = pConsole->getGuest();
+ AssertPtr(pGuest);
+ if (!pGuest)
+ return;
+
+ pGuest->onUserStateChange(Bstr(pszUser), Bstr(pszDomain), (VBoxGuestUserState)uState,
+ puDetails, cbDetails);
+}
+
+
+/**
* Reports Guest Additions API and OS version.
*
* Called whenever the Additions issue a guest version report request or the VM
@@ -745,44 +769,39 @@ DECLCALLBACK(void *) VMMDev::drvQueryInterface(PPDMIBASE pInterface, const char
}
/**
- * Destruct a VMMDev driver instance.
- *
- * @returns VBox status.
- * @param pDrvIns The driver instance data.
+ * @interface_method_impl{PDMDRVREG,pfnReset}
*/
-DECLCALLBACK(void) VMMDev::drvDestruct(PPDMDRVINS pDrvIns)
+DECLCALLBACK(void) VMMDev::drvReset(PPDMDRVINS pDrvIns)
{
- PDRVMAINVMMDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINVMMDEV);
- LogFlow(("VMMDev::drvDestruct: iInstance=%d\n", pDrvIns->iInstance));
+ LogFlow(("VMMDev::drvReset: iInstance=%d\n", pDrvIns->iInstance));
#ifdef VBOX_WITH_HGCM
- /* HGCM is shut down on the VMMDev destructor. */
+ HGCMHostReset ();
#endif /* VBOX_WITH_HGCM */
- if (pData->pVMMDev)
- pData->pVMMDev->mpDrv = NULL;
}
/**
- * Reset notification.
- *
- * @returns VBox status.
- * @param pDrvIns The driver instance data.
+ * @interface_method_impl{PDMDRVREG,pfnDestruct}
*/
-DECLCALLBACK(void) VMMDev::drvReset(PPDMDRVINS pDrvIns)
+DECLCALLBACK(void) VMMDev::drvDestruct(PPDMDRVINS pDrvIns)
{
- LogFlow(("VMMDev::drvReset: iInstance=%d\n", pDrvIns->iInstance));
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
+ PDRVMAINVMMDEV pThis = PDMINS_2_DATA(pDrvIns, PDRVMAINVMMDEV);
+ LogFlow(("VMMDev::drvDestruct: iInstance=%d\n", pDrvIns->iInstance));
+
#ifdef VBOX_WITH_HGCM
- HGCMHostReset ();
+ /* HGCM is shut down on the VMMDev destructor. */
#endif /* VBOX_WITH_HGCM */
+ if (pThis->pVMMDev)
+ pThis->pVMMDev->mpDrv = NULL;
}
/**
- * Construct a VMMDev driver instance.
- *
- * @copydoc FNPDMDRVCONSTRUCT
+ * @interface_method_impl{PDMDRVREG,pfnConstruct}
*/
DECLCALLBACK(int) VMMDev::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle, uint32_t fFlags)
{
- PDRVMAINVMMDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINVMMDEV);
+ PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
+ PDRVMAINVMMDEV pThis = PDMINS_2_DATA(pDrvIns, PDRVMAINVMMDEV);
LogFlow(("Keyboard::drvConstruct: iInstance=%d\n", pDrvIns->iInstance));
/*
@@ -799,39 +818,40 @@ DECLCALLBACK(int) VMMDev::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle,
*/
pDrvIns->IBase.pfnQueryInterface = VMMDev::drvQueryInterface;
- pData->Connector.pfnUpdateGuestStatus = vmmdevUpdateGuestStatus;
- pData->Connector.pfnUpdateGuestInfo = vmmdevUpdateGuestInfo;
- pData->Connector.pfnUpdateGuestInfo2 = vmmdevUpdateGuestInfo2;
- pData->Connector.pfnUpdateGuestCapabilities = vmmdevUpdateGuestCapabilities;
- pData->Connector.pfnUpdateMouseCapabilities = vmmdevUpdateMouseCapabilities;
- pData->Connector.pfnUpdatePointerShape = vmmdevUpdatePointerShape;
- pData->Connector.pfnVideoAccelEnable = iface_VideoAccelEnable;
- pData->Connector.pfnVideoAccelFlush = iface_VideoAccelFlush;
- pData->Connector.pfnVideoModeSupported = vmmdevVideoModeSupported;
- pData->Connector.pfnGetHeightReduction = vmmdevGetHeightReduction;
- pData->Connector.pfnSetCredentialsJudgementResult = vmmdevSetCredentialsJudgementResult;
- pData->Connector.pfnSetVisibleRegion = vmmdevSetVisibleRegion;
- pData->Connector.pfnQueryVisibleRegion = vmmdevQueryVisibleRegion;
- pData->Connector.pfnReportStatistics = vmmdevReportStatistics;
- pData->Connector.pfnQueryStatisticsInterval = vmmdevQueryStatisticsInterval;
- pData->Connector.pfnQueryBalloonSize = vmmdevQueryBalloonSize;
- pData->Connector.pfnIsPageFusionEnabled = vmmdevIsPageFusionEnabled;
+ pThis->Connector.pfnUpdateGuestStatus = vmmdevUpdateGuestStatus;
+ pThis->Connector.pfnUpdateGuestUserState = vmmdevUpdateGuestUserState;
+ pThis->Connector.pfnUpdateGuestInfo = vmmdevUpdateGuestInfo;
+ pThis->Connector.pfnUpdateGuestInfo2 = vmmdevUpdateGuestInfo2;
+ pThis->Connector.pfnUpdateGuestCapabilities = vmmdevUpdateGuestCapabilities;
+ pThis->Connector.pfnUpdateMouseCapabilities = vmmdevUpdateMouseCapabilities;
+ pThis->Connector.pfnUpdatePointerShape = vmmdevUpdatePointerShape;
+ pThis->Connector.pfnVideoAccelEnable = iface_VideoAccelEnable;
+ pThis->Connector.pfnVideoAccelFlush = iface_VideoAccelFlush;
+ pThis->Connector.pfnVideoModeSupported = vmmdevVideoModeSupported;
+ pThis->Connector.pfnGetHeightReduction = vmmdevGetHeightReduction;
+ pThis->Connector.pfnSetCredentialsJudgementResult = vmmdevSetCredentialsJudgementResult;
+ pThis->Connector.pfnSetVisibleRegion = vmmdevSetVisibleRegion;
+ pThis->Connector.pfnQueryVisibleRegion = vmmdevQueryVisibleRegion;
+ pThis->Connector.pfnReportStatistics = vmmdevReportStatistics;
+ pThis->Connector.pfnQueryStatisticsInterval = vmmdevQueryStatisticsInterval;
+ pThis->Connector.pfnQueryBalloonSize = vmmdevQueryBalloonSize;
+ pThis->Connector.pfnIsPageFusionEnabled = vmmdevIsPageFusionEnabled;
#ifdef VBOX_WITH_HGCM
- pData->HGCMConnector.pfnConnect = iface_hgcmConnect;
- pData->HGCMConnector.pfnDisconnect = iface_hgcmDisconnect;
- pData->HGCMConnector.pfnCall = iface_hgcmCall;
+ pThis->HGCMConnector.pfnConnect = iface_hgcmConnect;
+ pThis->HGCMConnector.pfnDisconnect = iface_hgcmDisconnect;
+ pThis->HGCMConnector.pfnCall = iface_hgcmCall;
#endif
/*
* Get the IVMMDevPort interface of the above driver/device.
*/
- pData->pUpPort = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIVMMDEVPORT);
- AssertMsgReturn(pData->pUpPort, ("Configuration error: No VMMDev port interface above!\n"), VERR_PDM_MISSING_INTERFACE_ABOVE);
+ pThis->pUpPort = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIVMMDEVPORT);
+ AssertMsgReturn(pThis->pUpPort, ("Configuration error: No VMMDev port interface above!\n"), VERR_PDM_MISSING_INTERFACE_ABOVE);
#ifdef VBOX_WITH_HGCM
- pData->pHGCMPort = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIHGCMPORT);
- AssertMsgReturn(pData->pHGCMPort, ("Configuration error: No HGCM port interface above!\n"), VERR_PDM_MISSING_INTERFACE_ABOVE);
+ pThis->pHGCMPort = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIHGCMPORT);
+ AssertMsgReturn(pThis->pHGCMPort, ("Configuration error: No HGCM port interface above!\n"), VERR_PDM_MISSING_INTERFACE_ABOVE);
#endif
/*
@@ -845,13 +865,13 @@ DECLCALLBACK(int) VMMDev::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle,
return rc;
}
- pData->pVMMDev = (VMMDev*)pv; /** @todo Check this cast! */
- pData->pVMMDev->mpDrv = pData;
+ pThis->pVMMDev = (VMMDev*)pv; /** @todo Check this cast! */
+ pThis->pVMMDev->mpDrv = pThis;
#ifdef VBOX_WITH_HGCM
- rc = pData->pVMMDev->hgcmLoadService(VBOXSHAREDFOLDERS_DLL,
+ rc = pThis->pVMMDev->hgcmLoadService(VBOXSHAREDFOLDERS_DLL,
"VBoxSharedFolders");
- pData->pVMMDev->fSharedFolderActive = RT_SUCCESS(rc);
+ pThis->pVMMDev->fSharedFolderActive = RT_SUCCESS(rc);
if (RT_SUCCESS(rc))
{
PPDMLED pLed;