1
0
Fork 0
virtualbox/include/VBox/HostServices/VBoxClipboardSvc.h
Daniel Baumann df1bda4fe9
Adding upstream version 7.0.20-dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 09:56:04 +02:00

1220 lines
41 KiB
C

/** @file
* Shared Clipboard - Common header for host service and guest clients.
*
* Protocol history notes (incomplete):
*
* - VirtualBox 6.1.0 betas: Started work on adding support for copying &
* pasting files and directories, refactoring the protocol in the process.
* - Adds guest/host feature flags.
* - Adds context IDs (via guest feature flags).
* - Borrowed the message handling from guest controls.
* - Adds a multitude of functions and messages for dealing with file & dir
* copying, most inte
*
* - VirtualBox x.x.x: Missing a lot of gradual improvements here.
*
* - VirtualBox 1.3.2 (r17182): Initial implementation, supporting text.
*/
/*
* Copyright (C) 2006-2023 Oracle and/or its affiliates.
*
* This file is part of VirtualBox base platform packages, as
* available from https://www.virtualbox.org.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, in version 3 of the
* License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <https://www.gnu.org/licenses>.
*
* The contents of this file may alternatively be used under the terms
* of the Common Development and Distribution License Version 1.0
* (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
* in the VirtualBox distribution, in which case the provisions of the
* CDDL are applicable instead of those of the GPL.
*
* You may elect to license modified versions of this file under the
* terms and conditions of either the GPL or the CDDL or both.
*
* SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
*/
#ifndef VBOX_INCLUDED_HostServices_VBoxClipboardSvc_h
#define VBOX_INCLUDED_HostServices_VBoxClipboardSvc_h
#ifndef RT_WITHOUT_PRAGMA_ONCE
# pragma once
#endif
#include <VBox/VMMDevCoreTypes.h>
#include <VBox/VBoxGuestCoreTypes.h>
#include <VBox/hgcmsvc.h>
/** @name VBOX_SHCL_MODE_XXX - The Shared Clipboard modes of operation.
* @{
*/
/** Shared Clipboard is disabled completely. */
#define VBOX_SHCL_MODE_OFF 0
/** Only transfers from host to the guest are possible. */
#define VBOX_SHCL_MODE_HOST_TO_GUEST 1
/** Only transfers from guest to the host are possible. */
#define VBOX_SHCL_MODE_GUEST_TO_HOST 2
/** Bidirectional transfers between guest and host are possible. */
#define VBOX_SHCL_MODE_BIDIRECTIONAL 3
/** @} */
/** @name VBOX_SHCL_TRANSFER_MODE_XXX - The Shared Clipboard file transfer mode (bit field).
* @{
*/
/** Shared Clipboard file transfers are disabled. */
#define VBOX_SHCL_TRANSFER_MODE_DISABLED UINT32_C(0)
/** Shared Clipboard file transfers are enabled. */
#define VBOX_SHCL_TRANSFER_MODE_ENABLED RT_BIT(0)
/** Shared Clipboard file transfer mode valid mask. */
#define VBOX_SHCL_TRANSFER_MODE_VALID_MASK UINT32_C(0x1)
/** @} */
/** @name VBOX_SHCL_HOST_FN_XXX - The service functions which are callable by host.
* @note These are not sacred and can be modified at will as long as all host
* clients are updated accordingly (probably just Main).
* @{
*/
/** Sets the current Shared Clipboard operation mode. */
#define VBOX_SHCL_HOST_FN_SET_MODE 1
/** Sets the current Shared Clipboard (file) transfers mode.
* Operates on the VBOX_SHCL_TRANSFERS_XXX defines.
* @since 6.1 */
#define VBOX_SHCL_HOST_FN_SET_TRANSFER_MODE 2
/** Run headless on the host, i.e. do not touch the host clipboard. */
#define VBOX_SHCL_HOST_FN_SET_HEADLESS 3
/** Reports cancellation of the current operation to the guest.
* @since 6.1 - still a todo */
#define VBOX_SHCL_HOST_FN_CANCEL 4
/** Reports an error to the guest.
* @since 6.1 - still a todo */
#define VBOX_SHCL_HOST_FN_ERROR 5
/** @} */
/** @name VBOX_SHCL_HOST_MSG_XXX - The host messages for the guest.
* @{
*/
/** Returned only when the HGCM client session is closed (by different thread).
*
* This can require no futher host interaction since the session has been
* closed.
*
* @since 1.3.2
*/
#define VBOX_SHCL_HOST_MSG_QUIT 1
/** Request data for a specific format from the guest.
*
* Two parameters, first the 32-bit message ID followed by a 32-bit format bit
* (VBOX_SHCL_FMT_XXX). The guest will respond by issuing a
* VBOX_SHCL_GUEST_FN_DATA_WRITE.
*
* @note The host may sometimes incorrectly set more than one format bit, in
* which case it's up to the guest to pick which to write back.
* @since 1.3.2
*/
#define VBOX_SHCL_HOST_MSG_READ_DATA 2
/** Reports available clipboard format on the host to the guest.
*
* Two parameters, first the 32-bit message ID followed by a 32-bit format mask
* containing zero or more VBOX_SHCL_FMT_XXX flags. The guest is not require to
* respond to the host when receiving this message.
*
* @since 1.3.2
*/
#define VBOX_SHCL_HOST_MSG_FORMATS_REPORT 3
/** Message PEEK or GET operation was canceled, try again.
*
* This is returned by VBOX_SHCL_GUEST_FN_MSG_PEEK_WAIT and
* VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT in response to the guest calling
* VBOX_SHCL_GUEST_FN_MSG_CANCEL. The 2nd parameter is set to zero (be it
* thought of as a parameter count or a format mask).
*
* @since 6.1.0
*/
#define VBOX_SHCL_HOST_MSG_CANCELED 4
/** Request data for a specific format from the guest with context ID.
*
* This is send instead of the VBOX_SHCL_HOST_MSG_READ_DATA message to guest
* that advertises VBOX_SHCL_GF_0_CONTEXT_ID. The first parameter is a 64-bit
* context ID which is to be used when issuing VBOX_SHCL_GUEST_F_DATA_WRITE, and
* the second parameter is a 32-bit format bit (VBOX_SHCL_FMT_XXX). The guest
* will respond by issuing a VBOX_SHCL_GUEST_F_DATA_WRITE.
*
* @note The host may sometimes incorrectly set more than one format bit, in
* which case it's up to the guest to pick which to write back.
* @since 6.1.2
*/
#define VBOX_SHCL_HOST_MSG_READ_DATA_CID 5
/** Sends a transfer status to the guest side.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_STATUS 50
/** Reads the root list header from the guest.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_ROOT_LIST_HDR_READ 51
/** Writes the root list header to the guest.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_ROOT_LIST_HDR_WRITE 52
/** Reads a root list entry from the guest.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_ROOT_LIST_ENTRY_READ 53
/** Writes a root list entry to the guest.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_ROOT_LIST_ENTRY_WRITE 54
/** Open a transfer list on the guest side.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_LIST_OPEN 55
/** Closes a formerly opened transfer list on the guest side.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_LIST_CLOSE 56
/** Reads a list header from the guest.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_LIST_HDR_READ 57
/** Writes a list header to the guest.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_LIST_HDR_WRITE 58
/** Reads a list entry from the guest.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_LIST_ENTRY_READ 59
/** Writes a list entry to the guest.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_LIST_ENTRY_WRITE 60
/** Open a transfer object on the guest side.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_OPEN 61
/** Closes a formerly opened transfer object on the guest side.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_CLOSE 62
/** Reads from an object on the guest side.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_READ 63
/** Writes to an object on the guest side.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_WRITE 64
/** Indicates that the host has canceled a transfer.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_CANCEL 65
/** Indicates that the an unrecoverable error on the host occurred.
* @since 6.1.?
*/
#define VBOX_SHCL_HOST_MSG_TRANSFER_ERROR 66
/** @} */
/** @name VBOX_SHCL_GUEST_FN_XXX - The service functions which are called by guest.
* @{
*/
/** Calls the host and waits (blocking) for an host event VBOX_SHCL_HOST_MSG_XXX.
*
* @deprecated Replaced by VBOX_SHCL_GUEST_FN_MSG_PEEK_WAIT,
* VBOX_SHCL_GUEST_FN_MSG_GET, VBOX_SHCL_GUEST_FN_MSG_CANCEL.
* @since 1.3.2
*/
#define VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT 1
/** Sends a list of available formats to the host.
*
* This function takes a single parameter, a 32-bit set of formats
* (VBOX_SHCL_FMT_XXX), this can be zero if the clipboard is empty or previously
* reported formats are no longer avaible (logout, shutdown, whatever).
*
* There was a period during 6.1 development where it would take three
* parameters, a 64-bit context ID preceeded the formats and a 32-bit MBZ flags
* parameter was appended. This is still accepted, though deprecated.
*
* @returns May return informational statuses indicating partial success, just
* ignore it.
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @retval VERR_NOT_SUPPORTED if all the formats are unsupported, host
* clipboard will be empty.
* @since 1.3.2
*/
#define VBOX_SHCL_GUEST_FN_REPORT_FORMATS 2
/** Reads data in specified format from the host.
*
* This function takes three parameters, a 32-bit format bit
* (VBOX_SHCL_FMT_XXX), a buffer and 32-bit number of bytes read (output).
*
* There was a period during 6.1 development where it would take five parameters
* when VBOX_SHCL_GF_0_CONTEXT_ID was reported by the guest. A 64-bit context
* ID (ignored as purpose undefined), a 32-bit unused flag (MBZ), then the
* 32-bit format bits, number of bytes read (output), and the buffer. This
* format is still accepted.
*
* @retval VINF_SUCCESS on success.
* @retval VINF_BUFFER_OVERLFLOW (VBox >= 6.1 only) if not enough buffer space
* has been given to retrieve the actual data, no data actually copied.
* The call then must be repeated with a buffer size returned from the
* host in cbData.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 1.3.2
*/
#define VBOX_SHCL_GUEST_FN_DATA_READ 3
/** Writes requested data to the host.
*
* This function takes either 2 or 3 parameters. The last two parameters are a
* 32-bit format bit (VBOX_SHCL_FMT_XXX) and a data buffer holding the related
* data. The three parameter variant have a context ID first, which shall be a
* copy of the ID in the data request message.
*
* There was a period during 6.1 development where there would be a 5 parameter
* version of this, inserting an unused flags parameter between the context ID
* and the format bit, as well as a 32-bit data buffer size repate between the
* format bit and the data buffer. This format is still accepted, though
* deprecated.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @retval VERR_INVALID_CONTEXT if the context ID didn't match up.
* @since 1.3.2
*/
#define VBOX_SHCL_GUEST_FN_DATA_WRITE 4
/** This is a left-over from the 6.1 dev cycle and will always fail.
*
* It used to take three 32-bit parameters, only one of which was actually used.
*
* It was replaced by VBOX_SHCL_GUEST_FN_REPORT_FEATURES and
* VBOX_SHCL_GUEST_FN_NEGOTIATE_CHUNK_SIZE.
*
* @retval VERR_NOT_IMPLEMENTED
* @since 6.1
*/
#define VBOX_SHCL_GUEST_FN_CONNECT 5
/** Report guest side feature flags and retrieve the host ones.
*
* Two 64-bit parameters are passed in from the guest with the guest features
* (VBOX_SHCL_GF_XXX), the host replies by replacing the parameter values with
* the host ones (VBOX_SHCL_HF_XXX).
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.0
*/
#define VBOX_SHCL_GUEST_FN_REPORT_FEATURES 6
/** Query the host ones feature masks.
*
* That way the guest (client) can get hold of the features from the host.
* Again, it is prudent to set the 127 bit and observe it being cleared on
* success, as older hosts might return success without doing anything.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.0
*/
#define VBOX_SHCL_GUEST_FN_QUERY_FEATURES 7
/** Peeks at the next message, returning immediately.
*
* Returns two 32-bit parameters, first is the message ID and the second the
* parameter count. May optionally return additional 32-bit parameters with the
* sizes of respective message parameters. To distinguish buffer sizes from
* integer parameters, the latter gets their sizes inverted (uint32_t is ~4U,
* uint64_t is ~8U).
*
* Does also support the VM restore checking as in VBOX_SHCL_GUEST_FN_MSG_PEEK_WAIT
* (64-bit param \# 0), see documentation there.
*
* @retval VINF_SUCCESS if a message was pending and is being returned.
* @retval VERR_TRY_AGAIN if no message pending.
* @retval VERR_VM_RESTORED if first parameter is a non-zero 64-bit value that
* does not match VbglR3GetSessionId() any more. The new value is
* returned.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.0
*/
#define VBOX_SHCL_GUEST_FN_MSG_PEEK_NOWAIT 8
/** Peeks at the next message, waiting for one to arrive.
*
* Returns two 32-bit parameters, first is the message ID and the second the
* parameter count. May optionally return additional 32-bit parameters with the
* sizes of respective message parameters. To distinguish buffer sizes from
* integer parameters, the latter gets their sizes inverted (uint32_t is ~4U,
* uint64_t is ~8U).
*
* To facilitate VM restore checking, the first parameter can be a 64-bit
* integer holding the VbglR3GetSessionId() value the guest knowns. The
* function will then check this before going to sleep and return
* VERR_VM_RESTORED if it doesn't match, same thing happens when the VM is
* restored.
*
* @retval VINF_SUCCESS if info about an pending message is being returned.
* @retval VINF_TRY_AGAIN and message set to VBOX_SHCL_HOST_MSG_CANCELED if
* cancelled by VBOX_SHCL_GUEST_FN_MSG_CANCEL.
* @retval VERR_RESOURCE_BUSY if another thread already made a waiting call.
* @retval VERR_VM_RESTORED if first parameter is a non-zero 64-bit value that
* does not match VbglR3GetSessionId() any more. The new value is
* returned.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @note This replaces VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT.
* @since 6.1.0
*/
#define VBOX_SHCL_GUEST_FN_MSG_PEEK_WAIT 9
/** Gets the next message, returning immediately.
*
* All parameters are specific to the message being retrieved, however if the
* first one is an integer value it shall be an input parameter holding the
* ID of the message being retrieved. While it would be nice to add a separate
* parameter for this purpose, this is done so because the code was liften from
* Guest Controls which had backwards compatibilities to consider and we just
* kept it like that.
*
* @retval VINF_SUCCESS if message retrieved and removed from the pending queue.
* @retval VERR_TRY_AGAIN if no message pending.
* @retval VERR_MISMATCH if the incoming message ID does not match the pending.
* @retval VERR_BUFFER_OVERFLOW if a parmeter buffer is too small. The buffer
* size was updated to reflect the required size.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @note This replaces VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT.
* @since 6.1.0
*/
#define VBOX_SHCL_GUEST_FN_MSG_GET 10
/** Cancels pending calls for this client session.
*
* This should be used if a VBOX_SHCL_GUEST_FN__MSG_PEEK_WAIT or
* VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT call gets interrupted on the client end,
* so as to prevent being rebuffed with VERR_RESOURCE_BUSY when restarting the
* call.
*
* @retval VINF_SUCCESS if cancelled any calls.
* @retval VWRN_NOT_FOUND if no callers.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @since 6.1.0
*/
#define VBOX_SHCL_GUEST_FN_MSG_CANCEL 26
/** Replies to a function from the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_REPLY 11
/** Gets the root list header from the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_ROOT_LIST_HDR_READ 12
/** Sends the root list header to the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_ROOT_LIST_HDR_WRITE 13
/** Gets a root list root entry from the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_ROOT_LIST_ENTRY_READ 14
/** Sends a root list root entry to the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_ROOT_LIST_ENTRY_WRITE 15
/** Opens / gets a list handle from the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_LIST_OPEN 16
/** Closes a list handle from the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_LIST_CLOSE 17
/** Reads a list header from the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_LIST_HDR_READ 18
/** Writes a list header to the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_LIST_HDR_WRITE 19
/** Reads a list entry from the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_LIST_ENTRY_READ 20
/** Sends a list entry to the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_LIST_ENTRY_WRITE 21
/** Opens an object on the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_OBJ_OPEN 22
/** Closes an object on the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_OBJ_CLOSE 23
/** Reads from an object on the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_OBJ_READ 24
/** Writes to an object on the host.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1.x
*/
#define VBOX_SHCL_GUEST_FN_OBJ_WRITE 25
/** Reports an error to the host.
*
* @todo r=bird: Smells like GUEST_MSG_SKIP
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @since 6.1
*/
#define VBOX_SHCL_GUEST_FN_ERROR 27
/** For negotiating a chunk size between the guest and host.
*
* Takes two 32-bit parameters both being byte counts, the first one gives the
* maximum chunk size the guest can handle and the second the preferred choice
* of the guest. Upon return, the host will have updated both of them to
* reflect the maximum and default chunk sizes this client connect. The guest
* may set the 2nd value to zero and let the host choose.
*
* @retval VINF_SUCCESS on success.
* @retval VERR_INVALID_CLIENT_ID
* @retval VERR_WRONG_PARAMETER_COUNT
* @retval VERR_WRONG_PARAMETER_TYPE
* @retval VERR_INVALID_PARAMETER if the 2nd parameter is larger than the
* first one
* @since 6.1
*/
#define VBOX_SHCL_GUEST_FN_NEGOTIATE_CHUNK_SIZE 28
/** The last function number (used for validation/sanity). */
#define VBOX_SHCL_GUEST_FN_LAST VBOX_SHCL_GUEST_FN_NEGOTIATE_CHUNK_SIZE
/** @} */
/** Maximum chunk size for a single data transfer. */
#define VBOX_SHCL_MAX_CHUNK_SIZE VMMDEV_MAX_HGCM_DATA_SIZE - _4K
/** Default chunk size for a single data transfer. */
#define VBOX_SHCL_DEFAULT_CHUNK_SIZE RT_MIN(_64K, VBOX_SHCL_MAX_CHUNK_SIZE);
/** @name VBOX_SHCL_GF_XXX - Guest features.
* @sa VBOX_SHCL_GUEST_FN_REPORT_FEATURES
* @{ */
/** No flags set. */
#define VBOX_SHCL_GF_NONE 0
/** The guest can handle context IDs where applicable. */
#define VBOX_SHCL_GF_0_CONTEXT_ID RT_BIT_64(0)
/** The guest can copy & paste files and directories.
* @since 6.x */
#define VBOX_SHCL_GF_0_TRANSFERS RT_BIT_64(1)
/** The guest supports a (guest OS-)native frontend for showing and handling file transfers.
* If not set, the host will show a modal progress dialog instead and transferring file to
* a guest-specific temporary location first.
* Currently only supported for Windows guests (integrated into Windows Explorer via IDataObject). */
#define VBOX_SHCL_GF_0_TRANSFERS_FRONTEND RT_BIT_64(2)
/** Bit that must be set in the 2nd parameter, will be cleared if the host reponds
* correctly (old hosts might not). */
#define VBOX_SHCL_GF_1_MUST_BE_ONE RT_BIT_64(63)
/** @} */
/** @name VBOX_GUESTCTRL_HF_XXX - Host features.
* @sa VBOX_SHCL_GUEST_FN_REPORT_FEATURES
* @{ */
/** No flags set. */
#define VBOX_SHCL_HF_NONE 0
/** The host can handle context IDs where applicable as well as the new
* message handling functions. */
#define VBOX_SHCL_HF_0_CONTEXT_ID RT_BIT_64(0)
/** The host can copy & paste files and directories.
* This includes messages like
* @since 6.1.? */
#define VBOX_SHCL_HF_0_TRANSFERS RT_BIT_64(1)
/** @} */
/** @name Context ID related macros and limits
* @{ */
/**
* Creates a context ID out of a client ID, a transfer ID and an event ID (count).
*/
#define VBOX_SHCL_CONTEXTID_MAKE(a_idSession, a_idTransfer, a_idEvent) \
( ((uint64_t)((a_idSession) & 0xffff) << 48) \
| ((uint64_t)((a_idTransfer) & 0xffff) << 32) \
| ((uint32_t) (a_idEvent)) \
)
/** Creates a context ID out of a session ID. */
#define VBOX_SHCL_CONTEXTID_MAKE_SESSION(a_idSession) VBOX_SHCL_CONTEXTID_MAKE(a_idSession, 0, 0)
/** Gets the session ID out of a context ID. */
#define VBOX_SHCL_CONTEXTID_GET_SESSION(a_idContext) ( (uint16_t)(((a_idContext) >> 48) & UINT16_MAX) )
/** Gets the transfer ID out of a context ID. */
#define VBOX_SHCL_CONTEXTID_GET_TRANSFER(a_idContext) ( (uint16_t)(((a_idContext) >> 32) & UINT16_MAX) )
/** Gets the transfer event out of a context ID. */
#define VBOX_SHCL_CONTEXTID_GET_EVENT(a_idContext) ( (uint32_t)( (a_idContext) & UINT32_MAX) )
/** Maximum number of concurrent Shared Clipboard client sessions a VM can have. */
#define VBOX_SHCL_MAX_SESSIONS (UINT16_MAX - 1)
/** Maximum number of concurrent Shared Clipboard transfers a single client can have. */
#define VBOX_SHCL_MAX_TRANSFERS (UINT16_MAX - 1)
/** Maximum number of events a single Shared Clipboard transfer can have. */
#define VBOX_SHCL_MAX_EVENTS (UINT32_MAX - 1)
/** @} */
/*
* HGCM parameter structures.
*/
/** @todo r=bird: These structures are mostly pointless, as they're only
* ever used by the VbglR3 part. The host service does not use these
* structures for decoding guest requests, instead it's all hardcoded. */
#pragma pack(1)
/**
* Waits (blocking) for a new host message to arrive.
* Deprecated; do not use anymore.
* Kept for maintaining compatibility with older Guest Additions.
*/
typedef struct _VBoxShClGetHostMsgOld
{
VBGLIOCHGCMCALL hdr;
/** uint32_t, out: Host message type. */
HGCMFunctionParameter msg;
/** uint32_t, out: VBOX_SHCL_FMT_*, depends on the 'msg'.
* r=andy This actual can have *different* meanings, depending on the host message type. */
HGCMFunctionParameter formats; /* OUT uint32_t */
} VBoxShClGetHostMsgOld;
#define VBOX_SHCL_CPARMS_GET_HOST_MSG_OLD 2
/** @name VBOX_SHCL_GUEST_FN_REPORT_FORMATS
* @{ */
/** VBOX_SHCL_GUEST_FN_REPORT_FORMATS parameters. */
typedef struct VBoxShClParmReportFormats
{
/** uint32_t, int: Zero or more VBOX_SHCL_FMT_XXX bits. */
HGCMFunctionParameter f32Formats;
} VBoxShClParmReportFormats;
#define VBOX_SHCL_CPARMS_REPORT_FORMATS 1 /**< The parameter count for VBOX_SHCL_GUEST_FN_REPORT_FORMATS. */
#define VBOX_SHCL_CPARMS_REPORT_FORMATS_61B 3 /**< The 6.1 dev cycle variant, see VBOX_SHCL_GUEST_FN_REPORT_FORMATS. */
/** @} */
/** @name VBOX_SHCL_GUEST_FN_DATA_READ
* @{ */
/** VBOX_SHCL_GUEST_FN_DATA_READ parameters. */
typedef struct VBoxShClParmDataRead
{
/** uint32_t, in: Requested format (VBOX_SHCL_FMT_XXX). */
HGCMFunctionParameter f32Format;
/** ptr, out: The data buffer to put the data in on success. */
HGCMFunctionParameter pData;
/** uint32_t, out: Size of returned data, if larger than the buffer, then no
* data was actually transferred and the guest must repeat the call. */
HGCMFunctionParameter cb32Needed;
} VBoxShClParmDataRead;
#define VBOX_SHCL_CPARMS_DATA_READ 3 /**< The parameter count for VBOX_SHCL_GUEST_FN_DATA_READ. */
#define VBOX_SHCL_CPARMS_DATA_READ_61B 5 /**< The 6.1 dev cycle variant, see VBOX_SHCL_GUEST_FN_DATA_READ. */
/** @} */
/** @name
* @{ */
/** VBOX_SHCL_GUEST_FN_DATA_WRITE parameters. */
typedef struct VBoxShClParmDataWrite
{
/** uint64_t, in: Context ID from VBOX_SHCL_HOST_MSG_READ_DATA. */
HGCMFunctionParameter id64Context;
/** uint32_t, in: The data format (VBOX_SHCL_FMT_XXX). */
HGCMFunctionParameter f32Format;
/** ptr, in: The data. */
HGCMFunctionParameter pData;
} VBoxShClParmDataWrite;
/** Old VBOX_SHCL_GUEST_FN_DATA_WRITE parameters. */
typedef struct VBoxShClParmDataWriteOld
{
/** uint32_t, in: The data format (VBOX_SHCL_FMT_XXX). */
HGCMFunctionParameter f32Format;
/** ptr, in: The data. */
HGCMFunctionParameter pData;
} VBoxShClParmDataWriteOld;
#define VBOX_SHCL_CPARMS_DATA_WRITE 3 /**< The variant used when VBOX_SHCL_GF_0_CONTEXT_ID is reported. */
#define VBOX_SHCL_CPARMS_DATA_WRITE_OLD 2 /**< The variant used when VBOX_SHCL_GF_0_CONTEXT_ID isn't reported. */
#define VBOX_SHCL_CPARMS_DATA_WRITE_61B 5 /**< The 6.1 dev cycle variant, see VBOX_SHCL_GUEST_FN_DATA_WRITE. */
/** @} */
/**
* Reports a transfer status.
*/
typedef struct _VBoxShClTransferStatusMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, out: Context ID. */
HGCMFunctionParameter uContext;
/** uint32_t, out: Direction of transfer; of type SHCLTRANSFERDIR_. */
HGCMFunctionParameter enmDir;
/** uint32_t, out: Status to report; of type SHCLTRANSFERSTATUS_. */
HGCMFunctionParameter enmStatus;
/** uint32_t, out: Result code to report. Optional. */
HGCMFunctionParameter rc;
/** uint32_t, out: Reporting flags. Currently unused and must be 0. */
HGCMFunctionParameter fFlags;
} VBoxShClTransferStatusMsg;
#define VBOX_SHCL_CPARMS_TRANSFER_STATUS 5
/**
* Asks the host for the next command to process, along
* with the needed amount of parameters and an optional blocking
* flag.
*
* Used by: VBOX_SHCL_GUEST_FN_GET_HOST_MSG
*
*/
typedef struct _VBoxShClGetHostMsg
{
VBGLIOCHGCMCALL hdr;
/** uint32_t, out: Message ID. */
HGCMFunctionParameter uMsg;
/** uint32_t, out: Number of parameters the message needs. */
HGCMFunctionParameter cParms;
/** uint32_t, in: Whether or not to block (wait) for a new message to arrive. */
HGCMFunctionParameter fBlock;
} VBoxShClPeekMsg;
#define VBOX_SHCL_CPARMS_GET_HOST_MSG 3
/** No listing flags specified. */
#define VBOX_SHCL_LIST_FLAG_NONE 0
/** Only returns one entry per read. */
#define VBOX_SHCL_LIST_FLAG_RETURN_ONE RT_BIT(0)
/** Restarts reading a list from the beginning. */
#define VBOX_SHCL_LIST_FLAG_RESTART RT_BIT(1)
#define VBOX_SHCL_LISTHDR_FLAG_NONE 0
/** No additional information provided. */
#define VBOX_SHCL_INFO_FLAG_NONE 0
/** Get object information of type SHCLFSOBJINFO. */
#define VBOX_SHCL_INFO_FLAG_FSOBJINFO RT_BIT(0)
/**
* Status message for lists and objects.
*/
typedef struct _VBoxShClStatusMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, in: Context ID. */
HGCMFunctionParameter uContext;
/** uint32_t, in: Transfer status of type SHCLTRANSFERSTATUS. */
HGCMFunctionParameter uStatus;
/** pointer, in: Optional payload of this status, based on the status type. */
HGCMFunctionParameter pvPayload;
} VBoxShClStatusMsg;
#define VBOX_SHCL_CPARMS_STATUS 3
/** Invalid message type, do not use. */
#define VBOX_SHCL_REPLYMSGTYPE_INVALID 0
/** Replies a transfer status. */
#define VBOX_SHCL_REPLYMSGTYPE_TRANSFER_STATUS 1
/** Replies a list open status. */
#define VBOX_SHCL_REPLYMSGTYPE_LIST_OPEN 2
/** Replies a list close status. */
#define VBOX_SHCL_REPLYMSGTYPE_LIST_CLOSE 3
/** Replies an object open status. */
#define VBOX_SHCL_REPLYMSGTYPE_OBJ_OPEN 4
/** Replies an object close status. */
#define VBOX_SHCL_REPLYMSGTYPE_OBJ_CLOSE 5
/**
* Generic reply message.
*/
typedef struct _VBoxShClReplyMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, out: Context ID. */
HGCMFunctionParameter uContext;
/** uint32_t, out: Message type of type VBOX_SHCL_REPLYMSGTYPE_XXX. */
HGCMFunctionParameter enmType;
/** uint32_t, out: IPRT result of overall operation. */
HGCMFunctionParameter rc;
/** pointer, out: Optional payload of this reply, based on the message type. */
HGCMFunctionParameter pvPayload;
union
{
struct
{
HGCMFunctionParameter enmStatus;
} TransferStatus;
struct
{
HGCMFunctionParameter uHandle;
} ListOpen;
struct
{
HGCMFunctionParameter uHandle;
} ObjOpen;
struct
{
HGCMFunctionParameter uHandle;
} ObjClose;
} u;
} VBoxShClReplyMsg;
/** Minimum parameters (HGCM function parameters minus the union) a reply message must have. */
#define VBOX_SHCL_CPARMS_REPLY_MIN 4
/**
* Structure for keeping root list message parameters.
*/
typedef struct _VBoxShClRootListParms
{
/** uint64_t, in: Context ID. */
HGCMFunctionParameter uContext;
/** uint32_t, in: Roots listing flags; unused at the moment. */
HGCMFunctionParameter fRoots;
} VBoxShClRootListParms;
#define VBOX_SHCL_CPARMS_ROOT_LIST 2
/**
* Requests to read the root list header.
*/
typedef struct _VBoxShClRootListReadReqMsg
{
VBGLIOCHGCMCALL hdr;
VBoxShClRootListParms ReqParms;
} VBoxShClRootListReadReqMsg;
#define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_READ_REQ VBOX_SHCL_CPARMS_ROOT_LIST
/**
* Reads / Writes a root list header.
*/
typedef struct _VBoxShClRootListHdrMsg
{
VBGLIOCHGCMCALL hdr;
VBoxShClRootListParms ReqParms;
/** uint64_t, in/out: Number of total root list entries. */
HGCMFunctionParameter cRoots;
} VBoxShClRootListHdrMsg;
#define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_READ VBOX_SHCL_CPARMS_ROOT_LIST + 1
#define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_WRITE VBOX_SHCL_CPARMS_ROOT_LIST + 1
/**
* Structure for keeping list entry message parameters.
*/
typedef struct _VBoxShClRootListEntryParms
{
/** uint64_t, in: Context ID. */
HGCMFunctionParameter uContext;
/** uint32_t, in: VBOX_SHCL_INFO_FLAG_XXX. */
HGCMFunctionParameter fInfo;
/** uint32_t, in: Index of root list entry to get (zero-based). */
HGCMFunctionParameter uIndex;
} VBoxShClRootListEntryParms;
#define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY 3
/**
* Request to read a list root entry.
*/
typedef struct _VBoxShClRootListEntryReadReqMsg
{
VBGLIOCHGCMCALL hdr;
/** in: Request parameters. */
VBoxShClRootListEntryParms Parms;
} VBoxShClRootListEntryReadReqMsg;
#define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_READ_REQ VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY
/**
* Reads / Writes a root list entry.
*/
typedef struct _VBoxShClRootListEntryMsg
{
VBGLIOCHGCMCALL hdr;
/** in/out: Request parameters. */
VBoxShClRootListEntryParms Parms;
/** pointer, in/out: Entry name. */
HGCMFunctionParameter szName;
/** uint32_t, out: Bytes to be used for information/How many bytes were used. */
HGCMFunctionParameter cbInfo;
/** pointer, in/out: Information to be set/get (SHCLFSOBJINFO only currently).
* Do not forget to set the SHCLFSOBJINFO::Attr::enmAdditional for Get operation as well. */
HGCMFunctionParameter pvInfo;
} VBoxShClRootListEntryMsg;
#define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_READ VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY + 3
#define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_WRITE VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY + 3
/**
* Opens a list.
*/
typedef struct _VBoxShClListOpenMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, in: Context ID. */
HGCMFunctionParameter uContext;
/** uint32_t, in: Listing flags (see VBOX_SHCL_LIST_FLAG_XXX). */
HGCMFunctionParameter fList;
/** pointer, in: Filter string. */
HGCMFunctionParameter pvFilter;
/** pointer, in: Listing poth. If empty or NULL the listing's root path will be opened. */
HGCMFunctionParameter pvPath;
/** uint64_t, out: List handle. */
HGCMFunctionParameter uHandle;
} VBoxShClListOpenMsg;
#define VBOX_SHCL_CPARMS_LIST_OPEN 5
/**
* Closes a list.
*/
typedef struct _VBoxShClListCloseMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, in/out: Context ID. */
HGCMFunctionParameter uContext;
/** uint64_t, in: List handle. */
HGCMFunctionParameter uHandle;
} VBoxShClListCloseMsg;
#define VBOX_SHCL_CPARMS_LIST_CLOSE 2
typedef struct _VBoxShClListHdrReqParms
{
/** uint64_t, in: Context ID. */
HGCMFunctionParameter uContext;
/** uint64_t, in: List handle. */
HGCMFunctionParameter uHandle;
/** uint32_t, in: Flags of type VBOX_SHCL_LISTHDR_FLAG_XXX. */
HGCMFunctionParameter fFlags;
} VBoxShClListHdrReqParms;
#define VBOX_SHCL_CPARMS_LIST_HDR_REQ 3
/**
* Request to read a list header.
*/
typedef struct _VBoxShClListHdrReadReqMsg
{
VBGLIOCHGCMCALL hdr;
VBoxShClListHdrReqParms ReqParms;
} VBoxShClListHdrReadReqMsg;
#define VBOX_SHCL_CPARMS_LIST_HDR_READ_REQ VBOX_SHCL_CPARMS_LIST_HDR_REQ
/**
* Reads / Writes a list header.
*/
typedef struct _VBoxShClListHdrMsg
{
VBGLIOCHGCMCALL hdr;
VBoxShClListHdrReqParms ReqParms;
/** uint32_t, in/out: Feature flags (see VBOX_SHCL_FEATURE_FLAG_XXX). */
HGCMFunctionParameter fFeatures;
/** uint64_t, in/out: Number of total objects to transfer. */
HGCMFunctionParameter cTotalObjects;
/** uint64_t, in/out: Number of total bytes to transfer. */
HGCMFunctionParameter cbTotalSize;
} VBoxShClListHdrMsg;
#define VBOX_SHCL_CPARMS_LIST_HDR VBOX_SHCL_CPARMS_LIST_HDR_REQ + 3
typedef struct _VBoxShClListEntryReqParms
{
/** uint64_t, in: Context ID. */
HGCMFunctionParameter uContext;
/** uint64_t, in: List handle. */
HGCMFunctionParameter uHandle;
/** uint32_t, in: VBOX_SHCL_INFO_FLAG_XXX. */
HGCMFunctionParameter fInfo;
} VBoxShClListEntryReqParms;
#define VBOX_SHCL_CPARMS_LIST_ENTRY_REQ 3
/**
* Request to read a list entry.
*/
typedef struct _VBoxShClListEntryReadReqMsg
{
VBGLIOCHGCMCALL hdr;
VBoxShClListEntryReqParms ReqParms;
} VBoxShClListEntryReadReqMsg;
#define VBOX_SHCL_CPARMS_LIST_ENTRY_READ VBOX_SHCL_CPARMS_LIST_ENTRY_REQ
/**
* Reads / Writes a list entry.
*/
typedef struct _VBoxShClListEntryMsg
{
VBGLIOCHGCMCALL hdr;
/** in/out: Request parameters. */
VBoxShClListEntryReqParms ReqParms;
/** pointer, in/out: Entry name. */
HGCMFunctionParameter szName;
/** uint32_t, out: Bytes to be used for information/How many bytes were used. */
HGCMFunctionParameter cbInfo;
/** pointer, in/out: Information to be set/get (SHCLFSOBJINFO only currently).
* Do not forget to set the SHCLFSOBJINFO::Attr::enmAdditional for Get operation as well. */
HGCMFunctionParameter pvInfo;
} VBoxShClListEntryMsg;
#define VBOX_SHCL_CPARMS_LIST_ENTRY VBOX_SHCL_CPARMS_LIST_ENTRY_REQ + 3
/**
* Opens a Shared Clipboard object.
*/
typedef struct _VBoxShClObjOpenMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, in/out: Context ID. */
HGCMFunctionParameter uContext;
/** uint64_t, out: Object handle. */
HGCMFunctionParameter uHandle;
/** pointer, in: Absoulte path of object to open/create. */
HGCMFunctionParameter szPath;
/** uint32_t in: Open / Create flags of type SHCL_OBJ_CF_. */
HGCMFunctionParameter fCreate;
} VBoxShClObjOpenMsg;
#define VBOX_SHCL_CPARMS_OBJ_OPEN 4
/**
* Closes a Shared Clipboard object.
*/
typedef struct _VBoxShClObjCloseMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, in/out: Context ID. */
HGCMFunctionParameter uContext;
/** uint64_t, in: SHCLOBJHANDLE of object to close. */
HGCMFunctionParameter uHandle;
} VBoxShClObjCloseMsg;
#define VBOX_SHCL_CPARMS_OBJ_CLOSE 2
/**
* Structure for keeping read parameters of a Shared Clipboard object.
*/
typedef struct _VBoxShClObjReadReqParms
{
/** uint64_t, in: Context ID. */
HGCMFunctionParameter uContext;
/** uint64_t, in: SHCLOBJHANDLE of object to write to. */
HGCMFunctionParameter uHandle;
/** uint32_t, in: How many bytes to read. */
HGCMFunctionParameter cbToRead;
/** uint32_t, in: Read flags. Currently unused and must be 0. */
HGCMFunctionParameter fRead;
} VBoxShClObjReadReqParms;
/**
* Reads from a Shared Clipboard object.
*/
typedef struct _VBoxShClObjReadReqMsg
{
VBGLIOCHGCMCALL hdr;
VBoxShClObjReadReqParms ReqParms;
} VBoxShClObjReadReqMsg;
#define VBOX_SHCL_CPARMS_OBJ_READ_REQ 4
/**
* Reads / writes data of / to an object.
*
* Used by:
* VBOX_SHCL_FN_OBJ_READ
* VBOX_SHCL_FN_OBJ_WRITE
*/
typedef struct _VBoxShClObjReadWriteMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, in/out: Context ID. */
HGCMFunctionParameter uContext;
/** uint64_t, in/out: SHCLOBJHANDLE of object to write to. */
HGCMFunctionParameter uHandle;
/** uint32_t, out: Size (in bytes) read/written. */
HGCMFunctionParameter cbData;
/** pointer, in/out: Current data chunk. */
HGCMFunctionParameter pvData;
/** uint32_t, in/out: Size (in bytes) of current data chunk checksum. */
HGCMFunctionParameter cbChecksum;
/** pointer, in/out: Checksum of data block, based on the checksum
* type in the data header. Optional. */
HGCMFunctionParameter pvChecksum;
} VBoxShClObjReadWriteMsg;
#define VBOX_SHCL_CPARMS_OBJ_READ 6
#define VBOX_SHCL_CPARMS_OBJ_WRITE 6
/**
* Sends an error event.
*
* Used by:
* VBOX_SHCL_FN_WRITE_ERROR
*/
typedef struct _VBoxShClErrorMsg
{
VBGLIOCHGCMCALL hdr;
/** uint64_t, in: Context ID. */
HGCMFunctionParameter uContext;
/** uint32_t, in: The error code (IPRT-style). */
HGCMFunctionParameter rc;
} VBoxShClWriteErrorMsg;
#define VBOX_SHCL_CPARMS_ERROR 2
/** @name VBOX_SHCL_GUEST_FN_NEGOTIATE_CHUNK_SIZE
* @{ */
/** VBOX_SHCL_GUEST_FN_NEGOTIATE_CHUNK_SIZE parameters. */
typedef struct _VBoxShClParmNegotiateChunkSize
{
VBGLIOCHGCMCALL hdr;
/** uint32_t, in: Maximum chunk size. */
HGCMFunctionParameter cb32MaxChunkSize;
/** uint32_t, in: Default chunk size. */
HGCMFunctionParameter cb32ChunkSize;
} VBoxShClParmNegotiateChunkSize;
#define VBOX_SHCL_CPARMS_NEGOTIATE_CHUNK_SIZE 2
/** @} */
#pragma pack()
#endif /* !VBOX_INCLUDED_HostServices_VBoxClipboardSvc_h */