shflsvc.h revision ba31bc205e96548d3557ae82087dc020a52b6a0a
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Shared Folders: Common header for host service and guest clients.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Copyright (C) 2006-2010 Oracle Corporation
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * available from http://www.virtualbox.org. This file is free software;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * General Public License (GPL) as published by the Free Software
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * The contents of this file may alternatively be used under the terms
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * of the Common Development and Distribution License Version 1.0
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * VirtualBox OSE distribution, in which case the provisions of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * CDDL are applicable instead of those of the GPL.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * You may elect to license modified versions of this file under the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * terms and conditions of either the GPL or the CDDL or both.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** @name Some bit flag manipulation macros.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#define BIT_FLAG(__Field,__Flag) ((__Field) & (__Flag))
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#define BIT_FLAG_SET(__Field,__Flag) ((__Field) |= (__Flag))
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#define BIT_FLAG_CLEAR(__Field,__Flag) ((__Field) &= ~(__Flag))
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Structures shared between guest and the service
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * can be relocated and use offsets to point to variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * length parts.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Shared folders protocol works with handles.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Before doing any action on a file system object,
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * one have to obtain the object handle via a SHFL_FN_CREATE
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * request. A handle must be closed with SHFL_FN_CLOSE.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Shared Folders service functions. (guest)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Query mappings changes. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Query mappings changes. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Open/create object. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Close object handle. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Read object content. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Write new object content. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Lock/unlock a range in the object. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** List object content. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Query/set object information. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Remove object */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Map folder (legacy) */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Unmap folder */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Rename object (possibly moving it to another directory) */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Flush file */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** @todo macl, a description, please. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Map folder */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Shared Folders service functions. (host)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Add shared folder mapping. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Remove shared folder mapping. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Set the led status light address */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Root handle for a mapping. Root handles are unique.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Function parameters structures consider
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * the root handle as 32 bit value. If the typedef
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * will be changed, then function parameters must be
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * changed accordingly. All those parameters are marked
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * with SHFLROOT in comments.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** A shared folders handle for an opened object. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Hardcoded maximum length (in chars) of a shared folder name. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Hardcoded maximum number of shared folder mapping available to the guest. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** @name Shared Folders strings. They can be either UTF-8 or UTF-16.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Shared folder string buffer structure.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsynctypedef struct _SHFLSTRING
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** Size of the String member in bytes. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** Length of string without trailing nul in bytes. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** UTF-8 or UTF-16 string. Nul terminated. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Pointer to a shared folder string buffer. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Pointer to a const shared folder string buffer. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** Calculate size of the string. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncDECLINLINE(uint32_t) ShflStringSizeOfBuffer(PCSHFLSTRING pString)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync return pString? sizeof (SHFLSTRING) - sizeof (pString->String) + pString->u16Size: 0;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncDECLINLINE(uint32_t) ShflStringLength(PCSHFLSTRING pString)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncDECLINLINE(PSHFLSTRING) ShflStringInitBuffer(void *pvBuffer, uint32_t u32Size)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync uint32_t u32HeaderSize = sizeof (SHFLSTRING) - sizeof (pString->String);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* Check that the buffer size is big enough to hold a zero sized string
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * and is not too big to fit into 16 bit variables.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync if (u32Size >= u32HeaderSize && u32Size - u32HeaderSize <= 0xFFFF)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Validates a HGCM string parameter.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns true if valid, false if not.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param pString The string buffer pointer.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param cbBuf The buffer size from the parameter.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncDECLINLINE(bool) ShflStringIsValid(PCSHFLSTRING pString, uint32_t cbBuf)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync if (RT_UNLIKELY(cbBuf <= RT_UOFFSETOF(SHFLSTRING, String)))
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync return false;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync if (RT_UNLIKELY((uint32_t)pString->u16Size + RT_UOFFSETOF(SHFLSTRING, String) > cbBuf))
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync return false;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync if (RT_UNLIKELY(pString->u16Length >= pString->u16Size))
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync return false;
d85b0881fbf23d90ba93e32becf11d87dbc3f9dbvboxsync return true;
if (pString)
typedef enum _SHFLCREATERESULT
typedef struct _SHFLCREATEPARMS
#pragma pack()
typedef struct _SHFLMAPPING
} SHFLMAPPING;
typedef struct _SHFLDIRINFO
typedef struct _SHFLVOLINFO
typedef struct _VBoxSFQueryMappings
typedef struct _VBoxSFQueryMapName
typedef struct _VBoxSFMapFolder_Old
typedef struct _VBoxSFMapFolder
typedef struct _VBoxSFUnmapFolder
typedef struct _VBoxSFCreate
} VBoxSFCreate;
typedef struct _VBoxSFClose
} VBoxSFClose;
typedef struct _VBoxSFRead
} VBoxSFRead;
typedef struct _VBoxSFWrite
} VBoxSFWrite;
typedef struct _VBoxSFLock
} VBoxSFLock;
typedef struct _VBoxSFFlush
} VBoxSFFlush;
#define SHFL_LIST_NONE 0
typedef struct _VBoxSFList
* Bytes to be used for listing information/How many bytes were used.
} VBoxSFList;
typedef struct _VBoxSFInformation
* Bytes to be used for information/How many bytes were used.
typedef struct _VBoxSFRemove
} VBoxSFRemove;
typedef struct _VBoxSFRename
} VBoxSFRename;