VBoxGuestR3LibGuestCtrl.cpp revision 81096b0da0061583a511da27088643aa949a1ec9
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBoxGuestR3Lib - Ring-3 Support Library for VirtualBox guest additions, guest control.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2010-2013 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * The contents of this file may alternatively be used under the terms
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * of the Common Development and Distribution License Version 1.0
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VirtualBox OSE distribution, in which case the provisions of the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * CDDL are applicable instead of those of the GPL.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * You may elect to license modified versions of this file under the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * terms and conditions of either the GPL or the CDDL or both.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*******************************************************************************
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync* Header Files *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync*******************************************************************************/
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*******************************************************************************
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync* Structures and Typedefs *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync*******************************************************************************/
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncusing namespace guestControl;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync * Connects to the guest control service.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param puClientId Where to put The client ID on success. The client ID
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * must be passed to all the other calls to the service.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlConnect(uint32_t *puClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync strcpy(Info.Loc.u.host.achName, "VBoxGuestControlSvc");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Info.u32ClientID = UINT32_MAX; /* try make valgrind shut up. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CONNECT, &Info, sizeof(Info));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Disconnect from the guest control service.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlDisconnect(uint32_t uClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_DISCONNECT, &Info, sizeof(Info));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Waits until a new host message arrives.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This will block until a message becomes available.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param puMsg Where to store the message id.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param puNumParms Where to store the number of parameters which will be received
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * in a second call to the host.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlMsgWaitFor(uint32_t uClientId, uint32_t *puMsg, uint32_t *puNumParms)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT; /* Tell the host we want our next command. */
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync Msg.hdr.cParms = 2; /* Just peek for the next message! */
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = VbglHGCMParmUInt32Get(&Msg.num_parms, puNumParms);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ok, so now we know what message type and how much parameters there are. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Asks the host guest control service to set a command filter to this
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * client so that it only will receive certain commands in the future.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * The filter(s) are a bitmask for the context IDs, served from the host.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return IPRT status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uValue The value to filter messages for.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uMaskAdd Filter mask to add.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uMaskRemove Filter mask to remove.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlMsgFilterSet(uint32_t uClientId, uint32_t uValue,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_FILTER_SET; /* Tell the host we want to set a filter. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.mask_remove, uMaskRemove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0 /* Flags, unused */);
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Disables a previously set message filter.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return IPRT status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlMsgFilterUnset(uint32_t uClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_FILTER_UNSET; /* Tell the host we want to unset the filter. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0 /* Flags, unused */);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Tells the host service to skip the current message returned by
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VbglR3GuestCtrlMsgWaitFor().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return IPRT status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlMsgSkip(uint32_t uClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_SKIP; /* Tell the host we want to skip
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync the current assigned command. */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0 /* Flags, unused */);
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Asks the host to cancel (release) all pending waits which were deferred.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlCancelPendingWaits(uint32_t uClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Retrieves the request to create a new guest session.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return IPRT status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pCtx Host context.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 6, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pszPassword, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.username, pszUser, cbUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.password, pszPassword, cbPassword);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.domain, pszDomain, cbDomain);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
0e77737b0ba913683e614db11463b31ca67aacbevboxsync *puSessionID = VBOX_GUESTCTRL_CONTEXTID_GET_SESSION(pCtx->uContextID);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * Retrieves the request to terminate an existing guest session.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @return IPRT status code.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @param pCtx Host context.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync ** @todo Docs!
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puFlags, uint32_t *puSessionID)
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *puSessionID = VBOX_GUESTCTRL_CONTEXTID_GET_SESSION(pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Allocates and gets host data, based on the message id.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This will block until data becomes available.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Move the parameters in an own struct!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char *pszEnv, uint32_t *pcbEnv, uint32_t *pcEnvVars,
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync uint64_t *puAffinity, uint32_t cbAffinity, uint32_t *pcAffinity)
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync AssertPtrReturn(puTimeoutMS, VERR_INVALID_POINTER);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync AssertPtrReturn(pszPassword, VERR_INVALID_POINTER);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync VbglHGCMParmPtrSet(&Msg.u.v1.username, pszUser, cbUser);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync VbglHGCMParmPtrSet(&Msg.u.v1.password, pszPassword, cbPassword);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync VbglHGCMParmPtrSet(&Msg.u.v2.affinity, puAffinity, cbAffinity);
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
9a12d720d4db6c26d09600ddab781ad8df5e1826vboxsync * Allocates and gets host data, based on the message id.
9a12d720d4db6c26d09600ddab781ad8df5e1826vboxsync * This will block until data becomes available.
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync * @returns VBox status code.
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync ** @todo Docs!
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync uint32_t *puPID, uint32_t *puHandle, uint32_t *puFlags)
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync * Retrieves the input data from host which then gets sent to the
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync * started process.
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync * This will block until data becomes available.
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync * @returns VBox status code.
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync ** @todo Docs!
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX pCtx,
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync AssertReturn(pCtx->uNumParms == 5, VERR_INVALID_PARAMETER);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertReturn(pCtx->uNumParms == 7, VERR_INVALID_PARAMETER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(pszFileName, VERR_INVALID_POINTER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(pszDisposition, VERR_INVALID_POINTER);
50eab0c7ce9efeebd02c186d598f1db900f0c717vboxsync AssertReturn(cbDisposition, VERR_INVALID_PARAMETER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(puCreationMode, VERR_INVALID_POINTER);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync VbglHGCMParmPtrSet(&Msg.filename, pszFileName, cbFileName);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync VbglHGCMParmPtrSet(&Msg.openmode, pszAccess, cbAccess);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync VbglHGCMParmPtrSet(&Msg.disposition, pszDisposition, cbDisposition);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync VbglHGCMParmPtrSet(&Msg.sharing, pszSharing, cbSharing);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetRead(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 3, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetReadAt(PVBGLR3GUESTCTRLCMDCTX pCtx,
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync uint32_t *puHandle, uint32_t *puToRead, uint64_t *puOffset)
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetWriteAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void *pvData, uint32_t cbData, uint32_t *pcbSize, uint64_t *puOffset)
f02b41a7e54fc4e6b714f4e60260d94614d6e2e7vboxsync AssertReturn(pCtx->uNumParms == 5, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetSeek(PVBGLR3GUESTCTRLCMDCTX pCtx,
e7081fdf0305eaa621e0dd6decf8b28c33febc58vboxsync uint32_t *puHandle, uint32_t *puSeekMethod, uint64_t *puOffset)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puSeekMethod, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetTell(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
47b5427d1a541bcd269bc625c35b19d849071edfvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetTerminate(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetWaitFor(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t *puPID, uint32_t *puWaitFlags, uint32_t *puTimeoutMS)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 5, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_OPEN);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.u.open.handle, uFileHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbClose(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_CLOSE);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbError(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_ERROR);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbRead(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_READ);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.u.read.data, pvData, cbData);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
b45d66c0e496e2fd861479202f3d43aad592bd14vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbWrite(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_WRITE);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.u.write.written, uWritten);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbSeek(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_SEEK);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt64Set(&Msg.u.seek.offset, uOffActual);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbTell(PVBGLR3GUESTCTRLCMDCTX pCtx,
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_TELL);
9b45880674da6f82ca27cc28b0272de3dd3cc7dfvboxsync VbglHGCMParmUInt64Set(&Msg.u.tell.offset, uOffActual);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync * Callback for reporting a guest process status (along with some other stuff) to the host.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
ec588a4ac8429a8b6c744544818b3ce3b2c75690vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Sends output (from stdout/stderr) from a running process.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Callback for reporting back the input status of a guest process to the host.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));