VBoxGuestR3LibGuestCtrl.cpp revision 81096b0da0061583a511da27088643aa949a1ec9
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* $Id$ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBoxGuestR3Lib - Ring-3 Support Library for VirtualBox guest additions, guest control.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2010-2013 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
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 *
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 *
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
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*******************************************************************************
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync* Header Files *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync*******************************************************************************/
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/string.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/mem.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/assert.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/cpp/autores.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/stdarg.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/log.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/HostServices/GuestControlSvc.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VBGLR3Internal.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*******************************************************************************
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync* Structures and Typedefs *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync*******************************************************************************/
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncusing namespace guestControl;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync * Connects to the guest control service.
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync *
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.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlConnect(uint32_t *puClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync VBoxGuestHGCMConnectInfo Info;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Info.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Info.Loc.type = VMMDevHGCMLoc_LocalHost_Existing;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RT_ZERO(Info.Loc.u);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync strcpy(Info.Loc.u.host.achName, "VBoxGuestControlSvc");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Info.u32ClientID = UINT32_MAX; /* try make valgrind shut up. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CONNECT, &Info, sizeof(Info));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = Info.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *puClientId = Info.u32ClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Disconnect from the guest control service.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlDisconnect(uint32_t uClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBoxGuestHGCMDisconnectInfo Info;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Info.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Info.u32ClientID = uClientId;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_DISCONNECT, &Info, sizeof(Info));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = Info.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Waits until a new host message arrives.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This will block until a message becomes available.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
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.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlMsgWaitFor(uint32_t uClientId, uint32_t *puMsg, uint32_t *puNumParms)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puMsg, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puNumParms, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgCmdWaitFor Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = uClientId;
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! */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync VbglHGCMParmUInt32Set(&Msg.msg, 0);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync VbglHGCMParmUInt32Set(&Msg.num_parms, 0);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync if (RT_SUCCESS(rc))
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync {
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync rc = VbglHGCMParmUInt32Get(&Msg.msg, puMsg);
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = VbglHGCMParmUInt32Get(&Msg.num_parms, puNumParms);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ok, so now we know what message type and how much parameters there are. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
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 *
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.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlMsgFilterSet(uint32_t uClientId, uint32_t uValue,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uMaskAdd, uint32_t uMaskRemove)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgCmdFilterSet Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = uClientId;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_FILTER_SET; /* Tell the host we want to set a filter. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 4;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.value, uValue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.mask_add, uMaskAdd);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.mask_remove, uMaskRemove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0 /* Flags, unused */);
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Disables a previously set message filter.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return IPRT status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlMsgFilterUnset(uint32_t uClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgCmdFilterUnset Msg;
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = uClientId;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_FILTER_UNSET; /* Tell the host we want to unset the filter. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0 /* Flags, unused */);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Tells the host service to skip the current message returned by
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VbglR3GuestCtrlMsgWaitFor().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return IPRT status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlMsgSkip(uint32_t uClientId)
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync{
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync HGCMMsgCmdSkip Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = uClientId;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_SKIP; /* Tell the host we want to skip
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync the current assigned command. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0 /* Flags, unused */);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Asks the host to cancel (release) all pending waits which were deferred.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param uClientId The client ID returned by VbglR3GuestCtrlConnect().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlCancelPendingWaits(uint32_t uClientId)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgCancelPendingWaits Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = uClientId;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_CANCEL_PENDING_WAITS;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uType, uint32_t uResult)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgSessionNotify Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync Msg.hdr.result = VERR_WRONG_ORDER;
9782b553bdb12385214a3ac596aff1476bcb7cbdvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync Msg.hdr.u32Function = GUEST_SESSION_NOTIFY;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync Msg.hdr.cParms = 3;
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, uType);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.result, uResult);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync rc = rc2;
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Retrieves the request to create a new guest session.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return IPRT status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pCtx Host context.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t *puProtocol,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char *pszUser, uint32_t cbUser,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char *pszPassword, uint32_t cbPassword,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char *pszDomain, uint32_t cbDomain,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t *puFlags, uint32_t *puSessionID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 6, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puProtocol, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pszUser, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pszPassword, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pszDomain, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgSessionOpen Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.protocol, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.username, pszUser, cbUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.password, pszPassword, cbPassword);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.domain, pszDomain, cbDomain);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
e52f819639386db020b2a635b47a415248c7fbf9vboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
e02db9e0d46f862430895b82b10e8ecde075cf11vboxsync rc = rc2;
680ca45722ec7123029ced4f88dfad87b397ef52vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.protocol.GetUInt32(puProtocol);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.flags.GetUInt32(puFlags);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
0e77737b0ba913683e614db11463b31ca67aacbevboxsync if (puSessionID)
0e77737b0ba913683e614db11463b31ca67aacbevboxsync *puSessionID = VBOX_GUESTCTRL_CONTEXTID_GET_SESSION(pCtx->uContextID);
0e77737b0ba913683e614db11463b31ca67aacbevboxsync }
0e77737b0ba913683e614db11463b31ca67aacbevboxsync }
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync
0e77737b0ba913683e614db11463b31ca67aacbevboxsync return rc;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync}
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync/**
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * Retrieves the request to terminate an existing guest session.
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync *
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @return IPRT status code.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @param pCtx Host context.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync ** @todo Docs!
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync */
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puFlags, uint32_t *puSessionID)
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync{
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
0e77737b0ba913683e614db11463b31ca67aacbevboxsync
0e77737b0ba913683e614db11463b31ca67aacbevboxsync AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgSessionClose Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
e98b0df488a9ec7732b1d5c2e735ce707842e975vboxsync int rc2 = Msg.hdr.result;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync Msg.flags.GetUInt32(puFlags);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (puSessionID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *puSessionID = VBOX_GUESTCTRL_CONTEXTID_GET_SESSION(pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Allocates and gets host data, based on the message id.
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This will block until data becomes available.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Move the parameters in an own struct!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char *pszCmd, uint32_t cbCmd,
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync uint32_t *puFlags,
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync char *pszArgs, uint32_t cbArgs, uint32_t *pcArgs,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char *pszEnv, uint32_t *pcbEnv, uint32_t *pcEnvVars,
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync char *pszUser, uint32_t cbUser,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync char *pszPassword, uint32_t cbPassword,
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync uint32_t *puTimeoutMS,
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync uint32_t *puPriority,
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync uint64_t *puAffinity, uint32_t cbAffinity, uint32_t *pcAffinity)
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync{
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync
a6936eab59adc5624216e6e5e5e455fc6a40df7fvboxsync AssertPtrReturn(pszCmd, VERR_INVALID_POINTER);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync AssertPtrReturn(pszArgs, VERR_INVALID_POINTER);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync AssertPtrReturn(pcArgs, VERR_INVALID_POINTER);
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync AssertPtrReturn(pszEnv, VERR_INVALID_POINTER);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync AssertPtrReturn(pcbEnv, VERR_INVALID_POINTER);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync AssertPtrReturn(pcEnvVars, VERR_INVALID_POINTER);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync AssertPtrReturn(puTimeoutMS, VERR_INVALID_POINTER);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync HGCMMsgProcExec Msg;
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync Msg.hdr.cParms = pCtx->uNumParms;
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.cmd, pszCmd, cbCmd);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.num_args, 0);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync VbglHGCMParmPtrSet(&Msg.args, pszArgs, cbArgs);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync VbglHGCMParmUInt32Set(&Msg.num_env, 0);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync VbglHGCMParmUInt32Set(&Msg.cb_env, 0);
440444d68cda7866c59e2e3d3f236608ef1c316fvboxsync VbglHGCMParmPtrSet(&Msg.env, pszEnv, *pcbEnv);
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync if (pCtx->uProtocol < 2)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pszUser, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(cbUser, VERR_INVALID_PARAMETER);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync AssertPtrReturn(pszPassword, VERR_INVALID_POINTER);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync AssertReturn(pszPassword, VERR_INVALID_PARAMETER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync VbglHGCMParmPtrSet(&Msg.u.v1.username, pszUser, cbUser);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync VbglHGCMParmPtrSet(&Msg.u.v1.password, pszPassword, cbPassword);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync VbglHGCMParmUInt32Set(&Msg.u.v1.timeout, 0);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync }
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync else
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync {
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync AssertPtrReturn(puAffinity, VERR_INVALID_POINTER);
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync AssertReturn(cbAffinity, VERR_INVALID_PARAMETER);
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync VbglHGCMParmUInt32Set(&Msg.u.v2.timeout, 0);
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync VbglHGCMParmUInt32Set(&Msg.u.v2.priority, 0);
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync VbglHGCMParmUInt32Set(&Msg.u.v2.num_affinity, 0);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync VbglHGCMParmPtrSet(&Msg.u.v2.affinity, puAffinity, cbAffinity);
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync }
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
8e8844a522f5d335f177a0313b03067d79cce201vboxsync if (RT_SUCCESS(rc))
8e8844a522f5d335f177a0313b03067d79cce201vboxsync {
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync int rc2 = Msg.hdr.result;
8e8844a522f5d335f177a0313b03067d79cce201vboxsync if (RT_FAILURE(rc2))
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync {
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync rc = rc2;
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync }
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync else
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync {
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync Msg.context.GetUInt32(&pCtx->uContextID);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync Msg.flags.GetUInt32(puFlags);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync Msg.num_args.GetUInt32(pcArgs);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync Msg.num_env.GetUInt32(pcEnvVars);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync Msg.cb_env.GetUInt32(pcbEnv);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync if (pCtx->uProtocol < 2)
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync {
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync Msg.u.v1.timeout.GetUInt32(puTimeoutMS);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync }
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync else
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync {
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync Msg.u.v2.timeout.GetUInt32(puTimeoutMS);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync Msg.u.v2.priority.GetUInt32(puPriority);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync Msg.u.v2.num_affinity.GetUInt32(pcAffinity);
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync }
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync }
5e797edc29f96c8367de4fbf5874171c24a89ba7vboxsync }
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync return rc;
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync}
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync
8e8844a522f5d335f177a0313b03067d79cce201vboxsync
8e8844a522f5d335f177a0313b03067d79cce201vboxsync/**
9a12d720d4db6c26d09600ddab781ad8df5e1826vboxsync * Allocates and gets host data, based on the message id.
8e8844a522f5d335f177a0313b03067d79cce201vboxsync *
9a12d720d4db6c26d09600ddab781ad8df5e1826vboxsync * This will block until data becomes available.
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync *
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync * @returns VBox status code.
03319aeaef07ef63a404237f2cb56199131f4a03vboxsync ** @todo Docs!
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync */
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync uint32_t *puPID, uint32_t *puHandle, uint32_t *puFlags)
79b24ef0ab7cd4a03a3571b3954c52ab8b573137vboxsync{
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
7082d29724f6c3788977a51591b0379fd3acbf72vboxsync
7082d29724f6c3788977a51591b0379fd3acbf72vboxsync AssertPtrReturn(puPID, VERR_INVALID_POINTER);
7082d29724f6c3788977a51591b0379fd3acbf72vboxsync AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
7082d29724f6c3788977a51591b0379fd3acbf72vboxsync AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync HGCMMsgProcOutput Msg;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync
f827fea1108b8f8a1a5f63318f6ec3cf4a9e7010vboxsync Msg.hdr.result = VERR_WRONG_ORDER;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync Msg.hdr.cParms = pCtx->uNumParms;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync VbglHGCMParmUInt32Set(&Msg.pid, 0);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync VbglHGCMParmUInt32Set(&Msg.handle, 0);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync if (RT_SUCCESS(rc))
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync {
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync int rc2 = Msg.hdr.result;
f827fea1108b8f8a1a5f63318f6ec3cf4a9e7010vboxsync if (RT_FAILURE(rc2))
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync {
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync rc = rc2;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync }
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync else
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync {
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync Msg.context.GetUInt32(&pCtx->uContextID);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync Msg.pid.GetUInt32(puPID);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync Msg.handle.GetUInt32(puHandle);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync Msg.flags.GetUInt32(puFlags);
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync }
fe49486f3c0fc3c327138e9a8f9ea9911d7c0d64vboxsync }
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync return rc;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync}
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync/**
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync * Retrieves the input data from host which then gets sent to the
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync * started process.
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync *
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync * This will block until data becomes available.
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync *
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync * @returns VBox status code.
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync ** @todo Docs!
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync */
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX pCtx,
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync uint32_t *puPID, uint32_t *puFlags,
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync void *pvData, uint32_t cbData,
8e8844a522f5d335f177a0313b03067d79cce201vboxsync uint32_t *pcbSize)
8e8844a522f5d335f177a0313b03067d79cce201vboxsync{
8e8844a522f5d335f177a0313b03067d79cce201vboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync AssertReturn(pCtx->uNumParms == 5, VERR_INVALID_PARAMETER);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync AssertPtrReturn(puPID, VERR_INVALID_POINTER);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync AssertPtrReturn(pvData, VERR_INVALID_POINTER);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync AssertPtrReturn(pcbSize, VERR_INVALID_POINTER);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync HGCMMsgProcInput Msg;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync Msg.hdr.result = VERR_WRONG_ORDER;
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync Msg.hdr.cParms = pCtx->uNumParms;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync VbglHGCMParmUInt32Set(&Msg.pid, 0);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync VbglHGCMParmPtrSet(&Msg.data, pvData, cbData);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync VbglHGCMParmUInt32Set(&Msg.size, 0);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync if (RT_SUCCESS(rc))
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync {
8e8844a522f5d335f177a0313b03067d79cce201vboxsync int rc2 = Msg.hdr.result;
8e8844a522f5d335f177a0313b03067d79cce201vboxsync if (RT_FAILURE(rc2))
8e8844a522f5d335f177a0313b03067d79cce201vboxsync {
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync rc = rc2;
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync }
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync else
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync {
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync Msg.context.GetUInt32(&pCtx->uContextID);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync Msg.pid.GetUInt32(puPID);
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync Msg.flags.GetUInt32(puFlags);
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync Msg.size.GetUInt32(pcbSize);
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync }
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync }
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync return rc;
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync}
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync char *pszFileName, uint32_t cbFileName,
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync char *pszAccess, uint32_t cbAccess,
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync char *pszDisposition, uint32_t cbDisposition,
50eab0c7ce9efeebd02c186d598f1db900f0c717vboxsync char *pszSharing, uint32_t cbSharing,
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync uint32_t *puCreationMode,
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync uint64_t *puOffset)
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync{
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertReturn(pCtx->uNumParms == 7, VERR_INVALID_PARAMETER);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(pszFileName, VERR_INVALID_POINTER);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync AssertReturn(cbFileName, VERR_INVALID_PARAMETER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(pszAccess, VERR_INVALID_POINTER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertReturn(cbAccess, VERR_INVALID_PARAMETER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(pszDisposition, VERR_INVALID_POINTER);
50eab0c7ce9efeebd02c186d598f1db900f0c717vboxsync AssertReturn(cbDisposition, VERR_INVALID_PARAMETER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(pszSharing, VERR_INVALID_POINTER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertReturn(cbSharing, VERR_INVALID_PARAMETER);
3dde2f85d4cf477621a3128887a2c08a8bca7c01vboxsync AssertPtrReturn(puCreationMode, VERR_INVALID_POINTER);
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync AssertPtrReturn(puOffset, VERR_INVALID_POINTER);
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync HGCMMsgFileOpen Msg;
46df4404c8dbbf3672e7aae8cd0b2770356e5b73vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync Msg.hdr.result = VERR_WRONG_ORDER;
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync Msg.hdr.cParms = pCtx->uNumParms;
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
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 VbglHGCMParmUInt32Set(&Msg.creationmode, 0);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync VbglHGCMParmUInt64Set(&Msg.offset, 0);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync if (RT_SUCCESS(rc))
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync {
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync int rc2 = Msg.hdr.result;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync if (RT_FAILURE(rc2))
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync {
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync rc = rc2;
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync }
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync else
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync {
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync Msg.context.GetUInt32(&pCtx->uContextID);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync Msg.creationmode.GetUInt32(puCreationMode);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync Msg.offset.GetUInt64(puOffset);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync }
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync }
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync return rc;
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync}
65b61798a61dd4c32cce448db1dac70bba8d5cf5vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgFileClose Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.handle, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.handle.GetUInt32(puHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetRead(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t *puHandle, uint32_t *puToRead)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 3, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puToRead, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgFileRead Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.handle, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.size, 0);
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync {
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync Msg.handle.GetUInt32(puHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.size.GetUInt32(puToRead);
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync }
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync }
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync return rc;
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync}
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetReadAt(PVBGLR3GUESTCTRLCMDCTX pCtx,
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync uint32_t *puHandle, uint32_t *puToRead, uint64_t *puOffset)
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync{
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puToRead, VERR_INVALID_POINTER);
49748bb305bd71f672cd083af208f4bb08c5d6abvboxsync
49748bb305bd71f672cd083af208f4bb08c5d6abvboxsync HGCMMsgFileReadAt Msg;
49748bb305bd71f672cd083af208f4bb08c5d6abvboxsync
49748bb305bd71f672cd083af208f4bb08c5d6abvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.handle, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.offset, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.size, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync int rc2 = Msg.hdr.result;
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync if (RT_FAILURE(rc2))
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync {
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync rc = rc2;
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync }
b9ca93dd1ad44cb8b27679dc5624be2f7b7f7af5vboxsync else
7c3417bbf525c03163d54d151a277a981d5d61b6vboxsync {
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync Msg.context.GetUInt32(&pCtx->uContextID);
8b984478b755f4d3091b977d9beac9fb7434279fvboxsync Msg.handle.GetUInt32(puHandle);
8b984478b755f4d3091b977d9beac9fb7434279fvboxsync Msg.offset.GetUInt64(puOffset);
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync Msg.size.GetUInt32(puToRead);
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync }
51d4024e2984de499ecd878341898f71f55cf9e0vboxsync }
51d4024e2984de499ecd878341898f71f55cf9e0vboxsync return rc;
8b984478b755f4d3091b977d9beac9fb7434279fvboxsync}
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void *pvData, uint32_t cbData, uint32_t *pcbSize)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
14e483cf65160fb363043534151245ae4c215766vboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pvData, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(cbData, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pcbSize, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgFileWrite Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.handle, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.data, pvData, cbData);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.size, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.handle.GetUInt32(puHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.size.GetUInt32(pcbSize);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
47b5427d1a541bcd269bc625c35b19d849071edfvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetWriteAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void *pvData, uint32_t cbData, uint32_t *pcbSize, uint64_t *puOffset)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
3964eef78ab9593263a3a982e26216d4d166869cvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
f02b41a7e54fc4e6b714f4e60260d94614d6e2e7vboxsync AssertReturn(pCtx->uNumParms == 5, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pvData, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(cbData, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pcbSize, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgFileWriteAt Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.handle, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.data, pvData, cbData);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.size, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.offset, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.handle.GetUInt32(puHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.size.GetUInt32(pcbSize);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetSeek(PVBGLR3GUESTCTRLCMDCTX pCtx,
e7081fdf0305eaa621e0dd6decf8b28c33febc58vboxsync uint32_t *puHandle, uint32_t *puSeekMethod, uint64_t *puOffset)
3123bb2477edc752585e4bbd8e4cfedaf87997d1vboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puSeekMethod, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puOffset, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgFileSeek Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.handle, 0);
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsync VbglHGCMParmUInt32Set(&Msg.method, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt64Set(&Msg.offset, 0);
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsync int rc2 = Msg.hdr.result;
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
47b5427d1a541bcd269bc625c35b19d849071edfvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.handle.GetUInt32(puHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.method.GetUInt32(puSeekMethod);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.offset.GetUInt64(puOffset);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileGetTell(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgFileTell Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.handle, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.handle.GetUInt32(puHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
47b5427d1a541bcd269bc625c35b19d849071edfvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
3e6d3b0af632bdcd931b5149915c7b8be1a732cdvboxsync
47b5427d1a541bcd269bc625c35b19d849071edfvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetTerminate(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID)
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync{
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(puPID, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgProcTerminate Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.pid, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.pid.GetUInt32(puPID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcGetWaitFor(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t *puPID, uint32_t *puWaitFlags, uint32_t *puTimeoutMS)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pCtx->uNumParms == 5, VERR_INVALID_PARAMETER);
7235946d51c4e7b209b12cefb8a3924660a9d46bvboxsync AssertPtrReturn(puPID, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgProcWaitFor Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_MSG_WAIT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = pCtx->uNumParms;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.pid, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.timeout, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
0f5d1b2abd9e82c7ee46f1327287c44856604bcbvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
e17bd6c32a8dd64f2d42838f9028216465e2caf0vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.context.GetUInt32(&pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.pid.GetUInt32(puPID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.flags.GetUInt32(puWaitFlags);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.timeout.GetUInt32(puTimeoutMS);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uRc, uint32_t uFileHandle)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMReplyFileNotify Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_FILE_NOTIFY;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 4;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_OPEN);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.rc, uRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.u.open.handle, uFileHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
47b5427d1a541bcd269bc625c35b19d849071edfvboxsync }
47b5427d1a541bcd269bc625c35b19d849071edfvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbClose(PVBGLR3GUESTCTRLCMDCTX pCtx,
0f5d1b2abd9e82c7ee46f1327287c44856604bcbvboxsync uint32_t uRc)
c20b837b2c912dd4dcaaa676e15acd2b230108f0vboxsync{
c20b837b2c912dd4dcaaa676e15acd2b230108f0vboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
0f5d1b2abd9e82c7ee46f1327287c44856604bcbvboxsync
0f5d1b2abd9e82c7ee46f1327287c44856604bcbvboxsync HGCMReplyFileNotify Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
0f5d1b2abd9e82c7ee46f1327287c44856604bcbvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
0f5d1b2abd9e82c7ee46f1327287c44856604bcbvboxsync Msg.hdr.u32Function = GUEST_FILE_NOTIFY;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 3;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_CLOSE);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.rc, uRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbError(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc)
96d8c2c77873591a51233b013fc1ec8bc774a096vboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMReplyFileNotify Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_FILE_NOTIFY;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 3;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_ERROR);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.rc, uRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
96d8c2c77873591a51233b013fc1ec8bc774a096vboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbRead(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uRc,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void *pvData, uint32_t cbData)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMReplyFileNotify Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_FILE_NOTIFY;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 4;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_READ);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.rc, uRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.u.read.data, pvData, cbData);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
ee5858e9d955811dae9e6b8ecbb336cc6d0e7197vboxsync
b45d66c0e496e2fd861479202f3d43aad592bd14vboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbWrite(PVBGLR3GUESTCTRLCMDCTX pCtx,
b45d66c0e496e2fd861479202f3d43aad592bd14vboxsync uint32_t uRc, uint32_t uWritten)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMReplyFileNotify Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_FILE_NOTIFY;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 4;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_WRITE);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.rc, uRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.u.write.written, uWritten);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbSeek(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uRc, uint64_t uOffActual)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMReplyFileNotify Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_FILE_NOTIFY;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 4;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_SEEK);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync VbglHGCMParmUInt32Set(&Msg.rc, uRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt64Set(&Msg.u.seek.offset, uOffActual);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
9b45880674da6f82ca27cc28b0272de3dd3cc7dfvboxsync rc = rc2;
9b45880674da6f82ca27cc28b0272de3dd3cc7dfvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlFileCbTell(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uRc, uint64_t uOffActual)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMReplyFileNotify Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_FILE_NOTIFY;
10e1bc06b2908a0af56d92ffdbadd25b36a5ef61vboxsync Msg.hdr.cParms = 4;
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.type, GUEST_FILE_NOTIFYTYPE_TELL);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.rc, uRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
9b45880674da6f82ca27cc28b0272de3dd3cc7dfvboxsync VbglHGCMParmUInt64Set(&Msg.u.tell.offset, uOffActual);
9b45880674da6f82ca27cc28b0272de3dd3cc7dfvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
10e1bc06b2908a0af56d92ffdbadd25b36a5ef61vboxsync
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync/**
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync * Callback for reporting a guest process status (along with some other stuff) to the host.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uPID, uint32_t uStatus, uint32_t uFlags,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void *pvData, uint32_t cbData)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
9b45880674da6f82ca27cc28b0272de3dd3cc7dfvboxsync HGCMMsgProcStatus Msg;
9b45880674da6f82ca27cc28b0272de3dd3cc7dfvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_EXEC_STATUS;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 5;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.pid, uPID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.status, uStatus);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, uFlags);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.data, pvData, cbData);
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync
ec588a4ac8429a8b6c744544818b3ce3b2c75690vboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Sends output (from stdout/stderr) from a running process.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uPID,uint32_t uHandle, uint32_t uFlags,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void *pvData, uint32_t cbData)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgProcOutput Msg;
ee5858e9d955811dae9e6b8ecbb336cc6d0e7197vboxsync
b45d66c0e496e2fd861479202f3d43aad592bd14vboxsync Msg.hdr.result = VERR_WRONG_ORDER;
b45d66c0e496e2fd861479202f3d43aad592bd14vboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_EXEC_OUTPUT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 5;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
96d8c2c77873591a51233b013fc1ec8bc774a096vboxsync VbglHGCMParmUInt32Set(&Msg.pid, uPID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.handle, uHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, uFlags);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmPtrSet(&Msg.data, pvData, cbData);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
96d8c2c77873591a51233b013fc1ec8bc774a096vboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Callback for reporting back the input status of a guest process to the host.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ** @todo Docs!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uPID, uint32_t uStatus,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t uFlags, uint32_t cbWritten)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HGCMMsgProcStatusInput Msg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.result = VERR_WRONG_ORDER;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32ClientID = pCtx->uClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.u32Function = GUEST_EXEC_INPUT_STATUS;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Msg.hdr.cParms = 5;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.pid, uPID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.status, uStatus);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.flags, uFlags);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VbglHGCMParmUInt32Set(&Msg.written, cbWritten);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc2 = Msg.hdr.result;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_FAILURE(rc2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync rc = rc2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return rc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync