Logo Search packages:      
Sourcecode: virtualbox-ose version File versions  Download package

shflsvc.h

Go to the documentation of this file.
/** @file
 * Shared Folders: Common header for host service and guest clients. (ADD,HSvc)
 */

/*
 * Copyright (C) 2006-2007 Oracle Corporation
 *
 * This file is part of VirtualBox Open Source Edition (OSE), as
 * available from http://www.virtualbox.org. This file is free software;
 * you can redistribute it and/or modify it under the terms of the GNU
 * General Public License (GPL) as published by the Free Software
 * Foundation, in version 2 as it comes in the "COPYING" file of the
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 *
 * The contents of this file may alternatively be used under the terms
 * of the Common Development and Distribution License Version 1.0
 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
 * VirtualBox OSE 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.
 */

#ifndef ___VBox_shflsvc_h
#define ___VBox_shflsvc_h

#include <VBox/types.h>
#include <VBox/VBoxGuest2.h>
#include <VBox/VMMDev.h>
#include <VBox/hgcmsvc.h>
#include <iprt/fs.h>


/** @name Some bit flag manipulation macros.
 * @{  */
#ifndef BIT_FLAG
#define BIT_FLAG(__Field,__Flag)       ((__Field) & (__Flag))
#endif

#ifndef BIT_FLAG_SET
#define BIT_FLAG_SET(__Field,__Flag)   ((__Field) |= (__Flag))
#endif

#ifndef BIT_FLAG_CLEAR
#define BIT_FLAG_CLEAR(__Field,__Flag) ((__Field) &= ~(__Flag))
#endif
/** @} */


/**
 * Structures shared between guest and the service
 * can be relocated and use offsets to point to variable
 * length parts.
 */

/**
 * Shared folders protocol works with handles.
 * Before doing any action on a file system object,
 * one have to obtain the object handle via a SHFL_FN_CREATE
 * request. A handle must be closed with SHFL_FN_CLOSE.
 */

/** Shared Folders service functions. (guest)
 *  @{
 */

/** Query mappings changes. */
00070 #define SHFL_FN_QUERY_MAPPINGS      (1)
/** Query mappings changes. */
00072 #define SHFL_FN_QUERY_MAP_NAME      (2)
/** Open/create object. */
00074 #define SHFL_FN_CREATE              (3)
/** Close object handle. */
00076 #define SHFL_FN_CLOSE               (4)
/** Read object content. */
00078 #define SHFL_FN_READ                (5)
/** Write new object content. */
00080 #define SHFL_FN_WRITE               (6)
/** Lock/unlock a range in the object. */
00082 #define SHFL_FN_LOCK                (7)
/** List object content. */
00084 #define SHFL_FN_LIST                (8)
/** Query/set object information. */
00086 #define SHFL_FN_INFORMATION         (9)
/** Remove object */
00088 #define SHFL_FN_REMOVE              (11)
/** Map folder (legacy) */
00090 #define SHFL_FN_MAP_FOLDER_OLD      (12)
/** Unmap folder */
00092 #define SHFL_FN_UNMAP_FOLDER        (13)
/** Rename object (possibly moving it to another directory) */
00094 #define SHFL_FN_RENAME              (14)
/** Flush file */
00096 #define SHFL_FN_FLUSH               (15)
/** @todo macl, a description, please. */
00098 #define SHFL_FN_SET_UTF8            (16)
/** Map folder */
00100 #define SHFL_FN_MAP_FOLDER          (17)

/** @} */

/** Shared Folders service functions. (host)
 *  @{
 */

/** Add shared folder mapping. */
00109 #define SHFL_FN_ADD_MAPPING         (1)
/** Remove shared folder mapping. */
00111 #define SHFL_FN_REMOVE_MAPPING      (2)
/** Set the led status light address */
00113 #define SHFL_FN_SET_STATUS_LED      (3)

/** @} */

/** Root handle for a mapping. Root handles are unique.
 *  @note
 *  Function parameters structures consider
 *  the root handle as 32 bit value. If the typedef
 *  will be changed, then function parameters must be
 *  changed accordingly. All those parameters are marked
 *  with SHFLROOT in comments.
 */
00125 typedef uint32_t SHFLROOT;

#define SHFL_ROOT_NIL ((SHFLROOT)~0)


/** A shared folders handle for an opened object. */
00131 typedef uint64_t SHFLHANDLE;

#define SHFL_HANDLE_NIL  ((SHFLHANDLE)~0LL)
#define SHFL_HANDLE_ROOT ((SHFLHANDLE)0LL)

/** Hardcoded maximum number of shared folder mapping available to the guest. */
00137 #define SHFL_MAX_MAPPINGS    (64)

/** @name Shared Folders strings. They can be either UTF-8 or UTF-16.
 * @{
 */

/**
 * Shared folder string buffer structure.
 */
00146 typedef struct _SHFLSTRING
{
    /** Size of the String member in bytes. */
00149     uint16_t u16Size;

    /** Length of string without trailing nul in bytes. */
00152     uint16_t u16Length;

    /** UTF-8 or UTF-16 string. Nul terminated. */
    union
    {
        uint8_t  utf8[1];
        uint16_t ucs2[1];
    } String;
} SHFLSTRING;

/** Pointer to a shared folder string buffer. */
00163 typedef SHFLSTRING *PSHFLSTRING;
/** Pointer to a const shared folder string buffer. */
00165 typedef const SHFLSTRING *PCSHFLSTRING;

/** Calculate size of the string. */
00168 DECLINLINE(uint32_t) ShflStringSizeOfBuffer (PCSHFLSTRING pString)
{
    return pString? sizeof (SHFLSTRING) - sizeof (pString->String) + pString->u16Size: 0;
}

DECLINLINE(uint32_t) ShflStringLength (PCSHFLSTRING pString)
{
    return pString? pString->u16Length: 0;
}

DECLINLINE(PSHFLSTRING) ShflStringInitBuffer(void *pvBuffer, uint32_t u32Size)
{
    PSHFLSTRING pString = NULL;

    uint32_t u32HeaderSize = sizeof (SHFLSTRING) - sizeof (pString->String);

    /* Check that the buffer size is big enough to hold a zero sized string
     * and is not too big to fit into 16 bit variables.
     */
    if (u32Size >= u32HeaderSize && u32Size - u32HeaderSize <= 0xFFFF)
    {
        pString = (PSHFLSTRING)pvBuffer;
        pString->u16Size = u32Size - u32HeaderSize;
        pString->u16Length = 0;
    }

    return pString;
}

/**
 * Validates a HGCM string parameter.
 *
 * @returns true if valid, false if not.
 *
 * @param   pString     The string buffer pointer.
 * @param   cbBuf       The buffer size from the parameter.
 */
DECLINLINE(bool) ShflStringIsValid(PCSHFLSTRING pString, uint32_t cbBuf)
{
    if (RT_UNLIKELY(cbBuf <= RT_UOFFSETOF(SHFLSTRING, String)))
        return false;
    if (RT_UNLIKELY((uint32_t)pString->u16Size + RT_UOFFSETOF(SHFLSTRING, String) > cbBuf))
        return false;
    if (RT_UNLIKELY(pString->u16Length >= pString->u16Size))
        return false;
    return true;
}

/**
 * Validates an optional HGCM string parameter.
 *
 * @returns true if valid, false if not.
 *
 * @param   pString     The string buffer pointer. Can be NULL.
 * @param   cbBuf       The buffer size from the parameter.
 */
DECLINLINE(bool) ShflStringIsValidOrNull(PCSHFLSTRING pString, uint32_t cbBuf)
{
    if (pString)
        return ShflStringIsValid(pString, cbBuf);
    if (RT_UNLIKELY(cbBuf > 0))
        return false;
    return true;
}

/** @} */


/** Result of an open/create request.
 *  Along with handle value the result code
 *  identifies what has happened while
 *  trying to open the object.
 */
typedef enum _SHFLCREATERESULT
{
    SHFL_NO_RESULT,
    /** Specified path does not exist. */
    SHFL_PATH_NOT_FOUND,
    /** Path to file exists, but the last component does not. */
    SHFL_FILE_NOT_FOUND,
    /** File already exists and either has been opened or not. */
    SHFL_FILE_EXISTS,
    /** New file was created. */
    SHFL_FILE_CREATED,
    /** Existing file was replaced or overwritten. */
    SHFL_FILE_REPLACED
} SHFLCREATERESULT;


/** Open/create flags.
 *  @{
 */

/** No flags. Initialization value. */
00262 #define SHFL_CF_NONE                  (0x00000000)

/** Lookup only the object, do not return a handle. All other flags are ignored. */
00265 #define SHFL_CF_LOOKUP                (0x00000001)

/** Open parent directory of specified object.
 *  Useful for the corresponding Windows FSD flag
 *  and for opening paths like \\dir\\*.* to search the 'dir'.
 *  @todo possibly not needed???
 */
00272 #define SHFL_CF_OPEN_TARGET_DIRECTORY (0x00000002)

/** Create/open a directory. */
00275 #define SHFL_CF_DIRECTORY             (0x00000004)

/** Open/create action to do if object exists
 *  and if the object does not exists.
 *  REPLACE file means atomically DELETE and CREATE.
 *  OVERWRITE file means truncating the file to 0 and
 *  setting new size.
 *  When opening an existing directory REPLACE and OVERWRITE
 *  actions are considered invalid, and cause returning
 *  FILE_EXISTS with NIL handle.
 */
00286 #define SHFL_CF_ACT_MASK_IF_EXISTS      (0x000000F0)
#define SHFL_CF_ACT_MASK_IF_NEW         (0x00000F00)

/** What to do if object exists. */
00290 #define SHFL_CF_ACT_OPEN_IF_EXISTS      (0x00000000)
#define SHFL_CF_ACT_FAIL_IF_EXISTS      (0x00000010)
#define SHFL_CF_ACT_REPLACE_IF_EXISTS   (0x00000020)
#define SHFL_CF_ACT_OVERWRITE_IF_EXISTS (0x00000030)

/** What to do if object does not exist. */
00296 #define SHFL_CF_ACT_CREATE_IF_NEW       (0x00000000)
#define SHFL_CF_ACT_FAIL_IF_NEW         (0x00000100)

/** Read/write requested access for the object. */
00300 #define SHFL_CF_ACCESS_MASK_RW          (0x00003000)

/** No access requested. */
00303 #define SHFL_CF_ACCESS_NONE             (0x00000000)
/** Read access requested. */
00305 #define SHFL_CF_ACCESS_READ             (0x00001000)
/** Write access requested. */
00307 #define SHFL_CF_ACCESS_WRITE            (0x00002000)
/** Read/Write access requested. */
00309 #define SHFL_CF_ACCESS_READWRITE        (SHFL_CF_ACCESS_READ | SHFL_CF_ACCESS_WRITE)

/** Requested share access for the object. */
00312 #define SHFL_CF_ACCESS_MASK_DENY        (0x0000C000)

/** Allow any access. */
00315 #define SHFL_CF_ACCESS_DENYNONE         (0x00000000)
/** Do not allow read. */
00317 #define SHFL_CF_ACCESS_DENYREAD         (0x00004000)
/** Do not allow write. */
00319 #define SHFL_CF_ACCESS_DENYWRITE        (0x00008000)
/** Do not allow access. */
00321 #define SHFL_CF_ACCESS_DENYALL          (SHFL_CF_ACCESS_DENYREAD | SHFL_CF_ACCESS_DENYWRITE)

/** Requested access to attributes of the object. */
00324 #define SHFL_CF_ACCESS_MASK_ATTR        (0x00030000)

/** No access requested. */
00327 #define SHFL_CF_ACCESS_ATTR_NONE        (0x00000000)
/** Read access requested. */
00329 #define SHFL_CF_ACCESS_ATTR_READ        (0x00010000)
/** Write access requested. */
00331 #define SHFL_CF_ACCESS_ATTR_WRITE       (0x00020000)
/** Read/Write access requested. */
00333 #define SHFL_CF_ACCESS_ATTR_READWRITE   (SHFL_CF_ACCESS_READ | SHFL_CF_ACCESS_WRITE)

/** The file is opened in append mode. Ignored if SHFL_CF_ACCESS_WRITE is not set. */
00336 #define SHFL_CF_ACCESS_APPEND           (0x00040000)

/** @} */

#pragma pack(1)
typedef struct _SHFLCREATEPARMS
{
    /* Returned handle of opened object. */
    SHFLHANDLE Handle;

    /* Returned result of the operation */
    SHFLCREATERESULT Result;

    /* SHFL_CF_* */
    uint32_t CreateFlags;

    /* Attributes of object to create and
     * returned actual attributes of opened/created object.
     */
    RTFSOBJINFO Info;

} SHFLCREATEPARMS;
#pragma pack()

typedef SHFLCREATEPARMS *PSHFLCREATEPARMS;


/** Shared Folders mappings.
 *  @{
 */

/** The mapping has been added since last query. */
00368 #define SHFL_MS_NEW        (1)
/** The mapping has been deleted since last query. */
00370 #define SHFL_MS_DELETED    (2)

typedef struct _SHFLMAPPING
{
    /** Mapping status. */
    uint32_t u32Status;
    /** Root handle. */
    SHFLROOT root;
} SHFLMAPPING;

typedef SHFLMAPPING *PSHFLMAPPING;

/** @} */

/** Shared Folder directory information
 *  @{
 */

00388 typedef struct _SHFLDIRINFO
{
    /** Full information about the object. */
00391     RTFSOBJINFO     Info;
    /** The length of the short field (number of RTUTF16 chars).
     * It is 16-bit for reasons of alignment. */
00394     uint16_t        cucShortName;
    /** The short name for 8.3 compatability.
     * Empty string if not available.
     */
00398     RTUTF16         uszShortName[14];
    /** @todo malc, a description, please. */
00400     SHFLSTRING      name;
} SHFLDIRINFO, *PSHFLDIRINFO;

typedef struct _SHFLVOLINFO
{
    RTFOFF         ullTotalAllocationBytes;
    RTFOFF         ullAvailableAllocationBytes;
    uint32_t       ulBytesPerAllocationUnit;
    uint32_t       ulBytesPerSector;
    uint32_t       ulSerial;
    RTFSPROPERTIES fsProperties;
} SHFLVOLINFO, *PSHFLVOLINFO;

/** @} */

/** Function parameter structures.
 *  @{
 */

/**
 * SHFL_FN_QUERY_MAPPINGS
 */

00423 #define SHFL_MF_UCS2 (0x00000000)
/** Guest uses UTF8 strings, if not set then the strings are unicode (UCS2). */
00425 #define SHFL_MF_UTF8 (0x00000001)

/** Type of guest system. For future system dependent features. */
00428 #define SHFL_MF_SYSTEM_MASK    (0x0000FF00)
#define SHFL_MF_SYSTEM_NONE    (0x00000000)
#define SHFL_MF_SYSTEM_WINDOWS (0x00000100)
#define SHFL_MF_SYSTEM_LINUX   (0x00000200)

/** Parameters structure. */
00434 typedef struct _VBoxSFQueryMappings
{
    VBoxGuestHGCMCallInfo callInfo;

    /** 32bit, in:
     * Flags describing various client needs.
     */
00441     HGCMFunctionParameter flags;

    /** 32bit, in/out:
     * Number of mappings the client expects.
     * This is the number of elements in the
     * mappings array.
     */
00448     HGCMFunctionParameter numberOfMappings;

    /** pointer, in/out:
     * Points to array of SHFLMAPPING structures.
     */
00453     HGCMFunctionParameter mappings;

} VBoxSFQueryMappings;

/** Number of parameters */
00458 #define SHFL_CPARMS_QUERY_MAPPINGS (3)



/**
 * SHFL_FN_QUERY_MAP_NAME
 */

/** Parameters structure. */
00467 typedef struct _VBoxSFQueryMapName
{
    VBoxGuestHGCMCallInfo callInfo;

    /** 32bit, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00474     HGCMFunctionParameter root;

    /** pointer, in/out:
     * Points to SHFLSTRING buffer.
     */
00479     HGCMFunctionParameter name;

} VBoxSFQueryMapName;

/** Number of parameters */
00484 #define SHFL_CPARMS_QUERY_MAP_NAME (2)

/**
 * SHFL_FN_MAP_FOLDER_OLD
 */

/** Parameters structure. */
00491 typedef struct _VBoxSFMapFolder_Old
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in:
     * Points to SHFLSTRING buffer.
     */
00498     HGCMFunctionParameter path;

    /** pointer, out: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00503     HGCMFunctionParameter root;

    /** pointer, in: RTUTF16
     * Path delimiter
     */
00508     HGCMFunctionParameter delimiter;

} VBoxSFMapFolder_Old;

/** Number of parameters */
00513 #define SHFL_CPARMS_MAP_FOLDER_OLD (3)

/**
 * SHFL_FN_MAP_FOLDER
 */

/** Parameters structure. */
00520 typedef struct _VBoxSFMapFolder
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in:
     * Points to SHFLSTRING buffer.
     */
00527     HGCMFunctionParameter path;

    /** pointer, out: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00532     HGCMFunctionParameter root;

    /** pointer, in: RTUTF16
     * Path delimiter
     */
00537     HGCMFunctionParameter delimiter;

    /** pointer, in: SHFLROOT
     * Case senstive flag
     */
00542     HGCMFunctionParameter fCaseSensitive;

} VBoxSFMapFolder;

/** Number of parameters */
00547 #define SHFL_CPARMS_MAP_FOLDER (4)

/**
 * SHFL_FN_UNMAP_FOLDER
 */

/** Parameters structure. */
00554 typedef struct _VBoxSFUnmapFolder
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00561     HGCMFunctionParameter root;

} VBoxSFUnmapFolder;

/** Number of parameters */
00566 #define SHFL_CPARMS_UNMAP_FOLDER (1)


/**
 * SHFL_FN_CREATE
 */

/** Parameters structure. */
00574 typedef struct _VBoxSFCreate
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00581     HGCMFunctionParameter root;

    /** pointer, in:
     * Points to SHFLSTRING buffer.
     */
00586     HGCMFunctionParameter path;

    /** pointer, in/out:
     * Points to SHFLCREATEPARMS buffer.
     */
00591     HGCMFunctionParameter parms;

} VBoxSFCreate;

/** Number of parameters */
00596 #define SHFL_CPARMS_CREATE (3)


/**
 * SHFL_FN_CLOSE
 */

/** Parameters structure. */
00604 typedef struct _VBoxSFClose
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00611     HGCMFunctionParameter root;


    /** value64, in:
     * SHFLHANDLE of object to close.
     */
00617     HGCMFunctionParameter handle;

} VBoxSFClose;

/** Number of parameters */
00622 #define SHFL_CPARMS_CLOSE (2)


/**
 * SHFL_FN_READ
 */

/** Parameters structure. */
00630 typedef struct _VBoxSFRead
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00637     HGCMFunctionParameter root;

    /** value64, in:
     * SHFLHANDLE of object to read from.
     */
00642     HGCMFunctionParameter handle;

    /** value64, in:
     * Offset to read from.
     */
00647     HGCMFunctionParameter offset;

    /** value64, in/out:
     * Bytes to read/How many were read.
     */
00652     HGCMFunctionParameter cb;

    /** pointer, out:
     * Buffer to place data to.
     */
00657     HGCMFunctionParameter buffer;

} VBoxSFRead;

/** Number of parameters */
00662 #define SHFL_CPARMS_READ (5)



/**
 * SHFL_FN_WRITE
 */

/** Parameters structure. */
00671 typedef struct _VBoxSFWrite
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00678     HGCMFunctionParameter root;

    /** value64, in:
     * SHFLHANDLE of object to write to.
     */
00683     HGCMFunctionParameter handle;

    /** value64, in:
     * Offset to write to.
     */
00688     HGCMFunctionParameter offset;

    /** value64, in/out:
     * Bytes to write/How many were written.
     */
00693     HGCMFunctionParameter cb;

    /** pointer, in:
     * Data to write.
     */
00698     HGCMFunctionParameter buffer;

} VBoxSFWrite;

/** Number of parameters */
00703 #define SHFL_CPARMS_WRITE (5)



/**
 * SHFL_FN_LOCK
 */

/** Lock owner is the HGCM client. */

/** Lock mode bit mask. */
00714 #define SHFL_LOCK_MODE_MASK  (0x3)
/** Cancel lock on the given range. */
00716 #define SHFL_LOCK_CANCEL     (0x0)
/** Aquire read only lock. Prevent write to the range. */
00718 #define SHFL_LOCK_SHARED     (0x1)
/** Aquire write lock. Prevent both write and read to the range. */
00720 #define SHFL_LOCK_EXCLUSIVE  (0x2)

/** Do not wait for lock if it can not be acquired at the time. */
00723 #define SHFL_LOCK_NOWAIT     (0x0)
/** Wait and acquire lock. */
00725 #define SHFL_LOCK_WAIT       (0x4)

/** Lock the specified range. */
00728 #define SHFL_LOCK_PARTIAL    (0x0)
/** Lock entire object. */
00730 #define SHFL_LOCK_ENTIRE     (0x8)

/** Parameters structure. */
00733 typedef struct _VBoxSFLock
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00740     HGCMFunctionParameter root;

    /** value64, in:
     * SHFLHANDLE of object to be locked.
     */
00745     HGCMFunctionParameter handle;

    /** value64, in:
     * Starting offset of lock range.
     */
00750     HGCMFunctionParameter offset;

    /** value64, in:
     * Length of range.
     */
00755     HGCMFunctionParameter length;

    /** value32, in:
     * Lock flags SHFL_LOCK_*.
     */
00760     HGCMFunctionParameter flags;

} VBoxSFLock;

/** Number of parameters */
00765 #define SHFL_CPARMS_LOCK (5)



/**
 * SHFL_FN_FLUSH
 */

/** Parameters structure. */
00774 typedef struct _VBoxSFFlush
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00781     HGCMFunctionParameter root;

    /** value64, in:
     * SHFLHANDLE of object to be locked.
     */
00786     HGCMFunctionParameter handle;

} VBoxSFFlush;

/** Number of parameters */
00791 #define SHFL_CPARMS_FLUSH (2)

/**
 * SHFL_FN_LIST
 */

/** Listing information includes variable length RTDIRENTRY[EX] structures. */

/** @todo might be necessary for future. */
00800 #define SHFL_LIST_NONE          0
#define SHFL_LIST_RETURN_ONE        1

/** Parameters structure. */
00804 typedef struct _VBoxSFList
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00811     HGCMFunctionParameter root;

    /** value64, in:
     * SHFLHANDLE of object to be listed.
     */
00816     HGCMFunctionParameter handle;

    /** value32, in:
     * List flags SHFL_LIST_*.
     */
00821     HGCMFunctionParameter flags;

    /** value32, in/out:
     * Bytes to be used for listing information/How many bytes were used.
     */
00826     HGCMFunctionParameter cb;

    /** pointer, in/optional
     * Points to SHFLSTRING buffer that specifies a search path.
     */
00831     HGCMFunctionParameter path;

    /** pointer, out:
     * Buffer to place listing information to. (SHFLDIRINFO)
     */
00836     HGCMFunctionParameter buffer;

    /** value32, in/out:
     * Indicates a key where the listing must be resumed.
     * in: 0 means start from begin of object.
     * out: 0 means listing completed.
     */
00843     HGCMFunctionParameter resumePoint;

    /** pointer, out:
     * Number of files returned
     */
00848     HGCMFunctionParameter cFiles;

} VBoxSFList;

/** Number of parameters */
00853 #define SHFL_CPARMS_LIST (8)



/**
 * SHFL_FN_INFORMATION
 */

/** Mask of Set/Get bit. */
00862 #define SHFL_INFO_MODE_MASK    (0x1)
/** Get information */
00864 #define SHFL_INFO_GET          (0x0)
/** Set information */
00866 #define SHFL_INFO_SET          (0x1)

/** Get name of the object. */
00869 #define SHFL_INFO_NAME         (0x2)
/** Set size of object (extend/trucate); only applies to file objects */
00871 #define SHFL_INFO_SIZE         (0x4)
/** Get/Set file object info. */
00873 #define SHFL_INFO_FILE         (0x8)
/** Get volume information. */
00875 #define SHFL_INFO_VOLUME       (0x10)

/** @todo different file info structures */


/** Parameters structure. */
00881 typedef struct _VBoxSFInformation
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00888     HGCMFunctionParameter root;

    /** value64, in:
     * SHFLHANDLE of object to be listed.
     */
00893     HGCMFunctionParameter handle;

    /** value32, in:
     * SHFL_INFO_*
     */
00898     HGCMFunctionParameter flags;

    /** value32, in/out:
     * Bytes to be used for information/How many bytes were used.
     */
00903     HGCMFunctionParameter cb;

    /** pointer, in/out:
     * Information to be set/get (RTFSOBJINFO or SHFLSTRING).
     * Do not forget to set the RTFSOBJINFO::Attr::enmAdditional for Get operation as well.
     */
00909     HGCMFunctionParameter info;

} VBoxSFInformation;

/** Number of parameters */
00914 #define SHFL_CPARMS_INFORMATION (5)


/**
 * SHFL_FN_REMOVE
 */

00921 #define SHFL_REMOVE_FILE        (0x1)
#define SHFL_REMOVE_DIR         (0x2)

/** Parameters structure. */
00925 typedef struct _VBoxSFRemove
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00932     HGCMFunctionParameter root;

    /** pointer, in:
     * Points to SHFLSTRING buffer.
     */
00937     HGCMFunctionParameter path;

    /** value32, in:
     * remove flags (file/directory)
     */
00942     HGCMFunctionParameter flags;

} VBoxSFRemove;

#define SHFL_CPARMS_REMOVE  (3)


/**
 * SHFL_FN_RENAME
 */

00953 #define SHFL_RENAME_FILE                (0x1)
#define SHFL_RENAME_DIR                 (0x2)
#define SHFL_RENAME_REPLACE_IF_EXISTS   (0x4)

/** Parameters structure. */
00958 typedef struct _VBoxSFRename
{
    VBoxGuestHGCMCallInfo callInfo;

    /** pointer, in: SHFLROOT
     * Root handle of the mapping which name is queried.
     */
00965     HGCMFunctionParameter root;

    /** pointer, in:
     * Points to SHFLSTRING src.
     */
00970     HGCMFunctionParameter src;

    /** pointer, in:
     * Points to SHFLSTRING dest.
     */
00975     HGCMFunctionParameter dest;

    /** value32, in:
     * rename flags (file/directory)
     */
00980     HGCMFunctionParameter flags;

} VBoxSFRename;

#define SHFL_CPARMS_RENAME  (4)

/**
 * SHFL_FN_ADD_MAPPING
 * Host call, no guest structure is used.
 */

00991 #define SHFL_CPARMS_ADD_MAPPING  (3)

/**
 * SHFL_FN_REMOVE_MAPPING
 * Host call, no guest structure is used.
 */

00998 #define SHFL_CPARMS_REMOVE_MAPPING (1)


/**
 * SHFL_FN_SET_STATUS_LED
 * Host call, no guest structure is used.
 */

01006 #define SHFL_CPARMS_SET_STATUS_LED (1)

/** @} */

#endif

Generated by  Doxygen 1.6.0   Back to index