123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901 |
- /* SPDX-License-Identifier: MIT */
- /*
- * VirtualBox Shared Folders: host interface definition.
- *
- * Copyright (C) 2006-2018 Oracle Corporation
- */
- #ifndef SHFL_HOSTINTF_H
- #define SHFL_HOSTINTF_H
- #include <linux/vbox_vmmdev_types.h>
- /* The max in/out buffer size for a FN_READ or FN_WRITE call */
- #define SHFL_MAX_RW_COUNT (16 * SZ_1M)
- /*
- * 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.
- */
- enum {
- SHFL_FN_QUERY_MAPPINGS = 1, /* Query mappings changes. */
- SHFL_FN_QUERY_MAP_NAME = 2, /* Query map name. */
- SHFL_FN_CREATE = 3, /* Open/create object. */
- SHFL_FN_CLOSE = 4, /* Close object handle. */
- SHFL_FN_READ = 5, /* Read object content. */
- SHFL_FN_WRITE = 6, /* Write new object content. */
- SHFL_FN_LOCK = 7, /* Lock/unlock a range in the object. */
- SHFL_FN_LIST = 8, /* List object content. */
- SHFL_FN_INFORMATION = 9, /* Query/set object information. */
- /* Note function number 10 is not used! */
- SHFL_FN_REMOVE = 11, /* Remove object */
- SHFL_FN_MAP_FOLDER_OLD = 12, /* Map folder (legacy) */
- SHFL_FN_UNMAP_FOLDER = 13, /* Unmap folder */
- SHFL_FN_RENAME = 14, /* Rename object */
- SHFL_FN_FLUSH = 15, /* Flush file */
- SHFL_FN_SET_UTF8 = 16, /* Select UTF8 filename encoding */
- SHFL_FN_MAP_FOLDER = 17, /* Map folder */
- SHFL_FN_READLINK = 18, /* Read symlink dest (as of VBox 4.0) */
- SHFL_FN_SYMLINK = 19, /* Create symlink (as of VBox 4.0) */
- SHFL_FN_SET_SYMLINKS = 20, /* Ask host to show symlinks (4.0+) */
- };
- /* Root handles for a mapping are of type u32, Root handles are unique. */
- #define SHFL_ROOT_NIL UINT_MAX
- /* Shared folders handle for an opened object are of type u64. */
- #define SHFL_HANDLE_NIL ULLONG_MAX
- /* Hardcoded maximum length (in chars) of a shared folder name. */
- #define SHFL_MAX_LEN (256)
- /* Hardcoded maximum number of shared folder mapping available to the guest. */
- #define SHFL_MAX_MAPPINGS (64)
- /** Shared folder string buffer structure. */
- struct shfl_string {
- /** Allocated size of the string member in bytes. */
- u16 size;
- /** Length of string without trailing nul in bytes. */
- u16 length;
- /** UTF-8 or UTF-16 string. Nul terminated. */
- union {
- u8 utf8[2];
- u16 utf16[1];
- u16 ucs2[1]; /* misnomer, use utf16. */
- } string;
- };
- VMMDEV_ASSERT_SIZE(shfl_string, 6);
- /* The size of shfl_string w/o the string part. */
- #define SHFLSTRING_HEADER_SIZE 4
- /* Calculate size of the string. */
- static inline u32 shfl_string_buf_size(const struct shfl_string *string)
- {
- return string ? SHFLSTRING_HEADER_SIZE + string->size : 0;
- }
- /* Set user id on execution (S_ISUID). */
- #define SHFL_UNIX_ISUID 0004000U
- /* Set group id on execution (S_ISGID). */
- #define SHFL_UNIX_ISGID 0002000U
- /* Sticky bit (S_ISVTX / S_ISTXT). */
- #define SHFL_UNIX_ISTXT 0001000U
- /* Owner readable (S_IRUSR). */
- #define SHFL_UNIX_IRUSR 0000400U
- /* Owner writable (S_IWUSR). */
- #define SHFL_UNIX_IWUSR 0000200U
- /* Owner executable (S_IXUSR). */
- #define SHFL_UNIX_IXUSR 0000100U
- /* Group readable (S_IRGRP). */
- #define SHFL_UNIX_IRGRP 0000040U
- /* Group writable (S_IWGRP). */
- #define SHFL_UNIX_IWGRP 0000020U
- /* Group executable (S_IXGRP). */
- #define SHFL_UNIX_IXGRP 0000010U
- /* Other readable (S_IROTH). */
- #define SHFL_UNIX_IROTH 0000004U
- /* Other writable (S_IWOTH). */
- #define SHFL_UNIX_IWOTH 0000002U
- /* Other executable (S_IXOTH). */
- #define SHFL_UNIX_IXOTH 0000001U
- /* Named pipe (fifo) (S_IFIFO). */
- #define SHFL_TYPE_FIFO 0010000U
- /* Character device (S_IFCHR). */
- #define SHFL_TYPE_DEV_CHAR 0020000U
- /* Directory (S_IFDIR). */
- #define SHFL_TYPE_DIRECTORY 0040000U
- /* Block device (S_IFBLK). */
- #define SHFL_TYPE_DEV_BLOCK 0060000U
- /* Regular file (S_IFREG). */
- #define SHFL_TYPE_FILE 0100000U
- /* Symbolic link (S_IFLNK). */
- #define SHFL_TYPE_SYMLINK 0120000U
- /* Socket (S_IFSOCK). */
- #define SHFL_TYPE_SOCKET 0140000U
- /* Whiteout (S_IFWHT). */
- #define SHFL_TYPE_WHITEOUT 0160000U
- /* Type mask (S_IFMT). */
- #define SHFL_TYPE_MASK 0170000U
- /* Checks the mode flags indicate a directory (S_ISDIR). */
- #define SHFL_IS_DIRECTORY(m) (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_DIRECTORY)
- /* Checks the mode flags indicate a symbolic link (S_ISLNK). */
- #define SHFL_IS_SYMLINK(m) (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_SYMLINK)
- /** The available additional information in a shfl_fsobjattr object. */
- enum shfl_fsobjattr_add {
- /** No additional information is available / requested. */
- SHFLFSOBJATTRADD_NOTHING = 1,
- /**
- * The additional unix attributes (shfl_fsobjattr::u::unix_attr) are
- * available / requested.
- */
- SHFLFSOBJATTRADD_UNIX,
- /**
- * The additional extended attribute size (shfl_fsobjattr::u::size) is
- * available / requested.
- */
- SHFLFSOBJATTRADD_EASIZE,
- /**
- * The last valid item (inclusive).
- * The valid range is SHFLFSOBJATTRADD_NOTHING thru
- * SHFLFSOBJATTRADD_LAST.
- */
- SHFLFSOBJATTRADD_LAST = SHFLFSOBJATTRADD_EASIZE,
- /** The usual 32-bit hack. */
- SHFLFSOBJATTRADD_32BIT_SIZE_HACK = 0x7fffffff
- };
- /**
- * Additional unix Attributes, these are available when
- * shfl_fsobjattr.additional == SHFLFSOBJATTRADD_UNIX.
- */
- struct shfl_fsobjattr_unix {
- /**
- * The user owning the filesystem object (st_uid).
- * This field is ~0U if not supported.
- */
- u32 uid;
- /**
- * The group the filesystem object is assigned (st_gid).
- * This field is ~0U if not supported.
- */
- u32 gid;
- /**
- * Number of hard links to this filesystem object (st_nlink).
- * This field is 1 if the filesystem doesn't support hardlinking or
- * the information isn't available.
- */
- u32 hardlinks;
- /**
- * The device number of the device which this filesystem object resides
- * on (st_dev). This field is 0 if this information is not available.
- */
- u32 inode_id_device;
- /**
- * The unique identifier (within the filesystem) of this filesystem
- * object (st_ino). Together with inode_id_device, this field can be
- * used as a OS wide unique id, when both their values are not 0.
- * This field is 0 if the information is not available.
- */
- u64 inode_id;
- /**
- * User flags (st_flags).
- * This field is 0 if this information is not available.
- */
- u32 flags;
- /**
- * The current generation number (st_gen).
- * This field is 0 if this information is not available.
- */
- u32 generation_id;
- /**
- * The device number of a char. or block device type object (st_rdev).
- * This field is 0 if the file isn't a char. or block device or when
- * the OS doesn't use the major+minor device idenfication scheme.
- */
- u32 device;
- } __packed;
- /** Extended attribute size. */
- struct shfl_fsobjattr_easize {
- /** Size of EAs. */
- s64 cb;
- } __packed;
- /** Shared folder filesystem object attributes. */
- struct shfl_fsobjattr {
- /** Mode flags (st_mode). SHFL_UNIX_*, SHFL_TYPE_*, and SHFL_DOS_*. */
- u32 mode;
- /** The additional attributes available. */
- enum shfl_fsobjattr_add additional;
- /**
- * Additional attributes.
- *
- * Unless explicitly specified to an API, the API can provide additional
- * data as it is provided by the underlying OS.
- */
- union {
- struct shfl_fsobjattr_unix unix_attr;
- struct shfl_fsobjattr_easize size;
- } __packed u;
- } __packed;
- VMMDEV_ASSERT_SIZE(shfl_fsobjattr, 44);
- struct shfl_timespec {
- s64 ns_relative_to_unix_epoch;
- };
- /** Filesystem object information structure. */
- struct shfl_fsobjinfo {
- /**
- * Logical size (st_size).
- * For normal files this is the size of the file.
- * For symbolic links, this is the length of the path name contained
- * in the symbolic link.
- * For other objects this fields needs to be specified.
- */
- s64 size;
- /** Disk allocation size (st_blocks * DEV_BSIZE). */
- s64 allocated;
- /** Time of last access (st_atime). */
- struct shfl_timespec access_time;
- /** Time of last data modification (st_mtime). */
- struct shfl_timespec modification_time;
- /**
- * Time of last status change (st_ctime).
- * If not available this is set to modification_time.
- */
- struct shfl_timespec change_time;
- /**
- * Time of file birth (st_birthtime).
- * If not available this is set to change_time.
- */
- struct shfl_timespec birth_time;
- /** Attributes. */
- struct shfl_fsobjattr attr;
- } __packed;
- VMMDEV_ASSERT_SIZE(shfl_fsobjinfo, 92);
- /**
- * result of an open/create request.
- * Along with handle value the result code
- * identifies what has happened while
- * trying to open the object.
- */
- enum shfl_create_result {
- 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
- };
- /* No flags. Initialization value. */
- #define SHFL_CF_NONE (0x00000000)
- /*
- * Only lookup the object, do not return a handle. When this is set all other
- * flags are ignored.
- */
- #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'.
- */
- #define SHFL_CF_OPEN_TARGET_DIRECTORY (0x00000002)
- /* Create/open a directory. */
- #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.
- */
- #define SHFL_CF_ACT_MASK_IF_EXISTS (0x000000f0)
- #define SHFL_CF_ACT_MASK_IF_NEW (0x00000f00)
- /* What to do if object exists. */
- #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. */
- #define SHFL_CF_ACT_CREATE_IF_NEW (0x00000000)
- #define SHFL_CF_ACT_FAIL_IF_NEW (0x00000100)
- /* Read/write requested access for the object. */
- #define SHFL_CF_ACCESS_MASK_RW (0x00003000)
- /* No access requested. */
- #define SHFL_CF_ACCESS_NONE (0x00000000)
- /* Read access requested. */
- #define SHFL_CF_ACCESS_READ (0x00001000)
- /* Write access requested. */
- #define SHFL_CF_ACCESS_WRITE (0x00002000)
- /* Read/Write access requested. */
- #define SHFL_CF_ACCESS_READWRITE (0x00003000)
- /* Requested share access for the object. */
- #define SHFL_CF_ACCESS_MASK_DENY (0x0000c000)
- /* Allow any access. */
- #define SHFL_CF_ACCESS_DENYNONE (0x00000000)
- /* Do not allow read. */
- #define SHFL_CF_ACCESS_DENYREAD (0x00004000)
- /* Do not allow write. */
- #define SHFL_CF_ACCESS_DENYWRITE (0x00008000)
- /* Do not allow access. */
- #define SHFL_CF_ACCESS_DENYALL (0x0000c000)
- /* Requested access to attributes of the object. */
- #define SHFL_CF_ACCESS_MASK_ATTR (0x00030000)
- /* No access requested. */
- #define SHFL_CF_ACCESS_ATTR_NONE (0x00000000)
- /* Read access requested. */
- #define SHFL_CF_ACCESS_ATTR_READ (0x00010000)
- /* Write access requested. */
- #define SHFL_CF_ACCESS_ATTR_WRITE (0x00020000)
- /* Read/Write access requested. */
- #define SHFL_CF_ACCESS_ATTR_READWRITE (0x00030000)
- /*
- * The file is opened in append mode.
- * Ignored if SHFL_CF_ACCESS_WRITE is not set.
- */
- #define SHFL_CF_ACCESS_APPEND (0x00040000)
- /** Create parameters buffer struct for SHFL_FN_CREATE call */
- struct shfl_createparms {
- /** Returned handle of opened object. */
- u64 handle;
- /** Returned result of the operation */
- enum shfl_create_result result;
- /** SHFL_CF_* */
- u32 create_flags;
- /**
- * Attributes of object to create and
- * returned actual attributes of opened/created object.
- */
- struct shfl_fsobjinfo info;
- } __packed;
- /** Shared Folder directory information */
- struct shfl_dirinfo {
- /** Full information about the object. */
- struct shfl_fsobjinfo info;
- /**
- * The length of the short field (number of UTF16 chars).
- * It is 16-bit for reasons of alignment.
- */
- u16 short_name_len;
- /**
- * The short name for 8.3 compatibility.
- * Empty string if not available.
- */
- u16 short_name[14];
- struct shfl_string name;
- };
- /** Shared folder filesystem properties. */
- struct shfl_fsproperties {
- /**
- * The maximum size of a filesystem object name.
- * This does not include the '\\0'.
- */
- u32 max_component_len;
- /**
- * True if the filesystem is remote.
- * False if the filesystem is local.
- */
- bool remote;
- /**
- * True if the filesystem is case sensitive.
- * False if the filesystem is case insensitive.
- */
- bool case_sensitive;
- /**
- * True if the filesystem is mounted read only.
- * False if the filesystem is mounted read write.
- */
- bool read_only;
- /**
- * True if the filesystem can encode unicode object names.
- * False if it can't.
- */
- bool supports_unicode;
- /**
- * True if the filesystem is compresses.
- * False if it isn't or we don't know.
- */
- bool compressed;
- /**
- * True if the filesystem compresses of individual files.
- * False if it doesn't or we don't know.
- */
- bool file_compression;
- };
- VMMDEV_ASSERT_SIZE(shfl_fsproperties, 12);
- struct shfl_volinfo {
- s64 total_allocation_bytes;
- s64 available_allocation_bytes;
- u32 bytes_per_allocation_unit;
- u32 bytes_per_sector;
- u32 serial;
- struct shfl_fsproperties properties;
- };
- /** SHFL_FN_MAP_FOLDER Parameters structure. */
- struct shfl_map_folder {
- /**
- * pointer, in:
- * Points to struct shfl_string buffer.
- */
- struct vmmdev_hgcm_function_parameter path;
- /**
- * pointer, out: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * pointer, in: UTF16
- * Path delimiter
- */
- struct vmmdev_hgcm_function_parameter delimiter;
- /**
- * pointer, in: SHFLROOT (u32)
- * Case senstive flag
- */
- struct vmmdev_hgcm_function_parameter case_sensitive;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_MAP_FOLDER (4)
- /** SHFL_FN_UNMAP_FOLDER Parameters structure. */
- struct shfl_unmap_folder {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_UNMAP_FOLDER (1)
- /** SHFL_FN_CREATE Parameters structure. */
- struct shfl_create {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * pointer, in:
- * Points to struct shfl_string buffer.
- */
- struct vmmdev_hgcm_function_parameter path;
- /**
- * pointer, in/out:
- * Points to struct shfl_createparms buffer.
- */
- struct vmmdev_hgcm_function_parameter parms;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_CREATE (3)
- /** SHFL_FN_CLOSE Parameters structure. */
- struct shfl_close {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * value64, in:
- * SHFLHANDLE (u64) of object to close.
- */
- struct vmmdev_hgcm_function_parameter handle;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_CLOSE (2)
- /** SHFL_FN_READ Parameters structure. */
- struct shfl_read {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * value64, in:
- * SHFLHANDLE (u64) of object to read from.
- */
- struct vmmdev_hgcm_function_parameter handle;
- /**
- * value64, in:
- * Offset to read from.
- */
- struct vmmdev_hgcm_function_parameter offset;
- /**
- * value64, in/out:
- * Bytes to read/How many were read.
- */
- struct vmmdev_hgcm_function_parameter cb;
- /**
- * pointer, out:
- * Buffer to place data to.
- */
- struct vmmdev_hgcm_function_parameter buffer;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_READ (5)
- /** SHFL_FN_WRITE Parameters structure. */
- struct shfl_write {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * value64, in:
- * SHFLHANDLE (u64) of object to write to.
- */
- struct vmmdev_hgcm_function_parameter handle;
- /**
- * value64, in:
- * Offset to write to.
- */
- struct vmmdev_hgcm_function_parameter offset;
- /**
- * value64, in/out:
- * Bytes to write/How many were written.
- */
- struct vmmdev_hgcm_function_parameter cb;
- /**
- * pointer, in:
- * Data to write.
- */
- struct vmmdev_hgcm_function_parameter buffer;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_WRITE (5)
- /*
- * SHFL_FN_LIST
- * Listing information includes variable length RTDIRENTRY[EX] structures.
- */
- #define SHFL_LIST_NONE 0
- #define SHFL_LIST_RETURN_ONE 1
- /** SHFL_FN_LIST Parameters structure. */
- struct shfl_list {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * value64, in:
- * SHFLHANDLE (u64) of object to be listed.
- */
- struct vmmdev_hgcm_function_parameter handle;
- /**
- * value32, in:
- * List flags SHFL_LIST_*.
- */
- struct vmmdev_hgcm_function_parameter flags;
- /**
- * value32, in/out:
- * Bytes to be used for listing information/How many bytes were used.
- */
- struct vmmdev_hgcm_function_parameter cb;
- /**
- * pointer, in/optional
- * Points to struct shfl_string buffer that specifies a search path.
- */
- struct vmmdev_hgcm_function_parameter path;
- /**
- * pointer, out:
- * Buffer to place listing information to. (struct shfl_dirinfo)
- */
- struct vmmdev_hgcm_function_parameter 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.
- */
- struct vmmdev_hgcm_function_parameter resume_point;
- /**
- * pointer, out:
- * Number of files returned
- */
- struct vmmdev_hgcm_function_parameter file_count;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_LIST (8)
- /** SHFL_FN_READLINK Parameters structure. */
- struct shfl_readLink {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * pointer, in:
- * Points to struct shfl_string buffer.
- */
- struct vmmdev_hgcm_function_parameter path;
- /**
- * pointer, out:
- * Buffer to place data to.
- */
- struct vmmdev_hgcm_function_parameter buffer;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_READLINK (3)
- /* SHFL_FN_INFORMATION */
- /* Mask of Set/Get bit. */
- #define SHFL_INFO_MODE_MASK (0x1)
- /* Get information */
- #define SHFL_INFO_GET (0x0)
- /* Set information */
- #define SHFL_INFO_SET (0x1)
- /* Get name of the object. */
- #define SHFL_INFO_NAME (0x2)
- /* Set size of object (extend/trucate); only applies to file objects */
- #define SHFL_INFO_SIZE (0x4)
- /* Get/Set file object info. */
- #define SHFL_INFO_FILE (0x8)
- /* Get volume information. */
- #define SHFL_INFO_VOLUME (0x10)
- /** SHFL_FN_INFORMATION Parameters structure. */
- struct shfl_information {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * value64, in:
- * SHFLHANDLE (u64) of object to be listed.
- */
- struct vmmdev_hgcm_function_parameter handle;
- /**
- * value32, in:
- * SHFL_INFO_*
- */
- struct vmmdev_hgcm_function_parameter flags;
- /**
- * value32, in/out:
- * Bytes to be used for information/How many bytes were used.
- */
- struct vmmdev_hgcm_function_parameter cb;
- /**
- * pointer, in/out:
- * Information to be set/get (shfl_fsobjinfo or shfl_string). Do not
- * forget to set the shfl_fsobjinfo::attr::additional for a get
- * operation as well.
- */
- struct vmmdev_hgcm_function_parameter info;
- };
- /* Number of parameters */
- #define SHFL_CPARMS_INFORMATION (5)
- /* SHFL_FN_REMOVE */
- #define SHFL_REMOVE_FILE (0x1)
- #define SHFL_REMOVE_DIR (0x2)
- #define SHFL_REMOVE_SYMLINK (0x4)
- /** SHFL_FN_REMOVE Parameters structure. */
- struct shfl_remove {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * pointer, in:
- * Points to struct shfl_string buffer.
- */
- struct vmmdev_hgcm_function_parameter path;
- /**
- * value32, in:
- * remove flags (file/directory)
- */
- struct vmmdev_hgcm_function_parameter flags;
- };
- #define SHFL_CPARMS_REMOVE (3)
- /* SHFL_FN_RENAME */
- #define SHFL_RENAME_FILE (0x1)
- #define SHFL_RENAME_DIR (0x2)
- #define SHFL_RENAME_REPLACE_IF_EXISTS (0x4)
- /** SHFL_FN_RENAME Parameters structure. */
- struct shfl_rename {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * pointer, in:
- * Points to struct shfl_string src.
- */
- struct vmmdev_hgcm_function_parameter src;
- /**
- * pointer, in:
- * Points to struct shfl_string dest.
- */
- struct vmmdev_hgcm_function_parameter dest;
- /**
- * value32, in:
- * rename flags (file/directory)
- */
- struct vmmdev_hgcm_function_parameter flags;
- };
- #define SHFL_CPARMS_RENAME (4)
- /** SHFL_FN_SYMLINK Parameters structure. */
- struct shfl_symlink {
- /**
- * pointer, in: SHFLROOT (u32)
- * Root handle of the mapping which name is queried.
- */
- struct vmmdev_hgcm_function_parameter root;
- /**
- * pointer, in:
- * Points to struct shfl_string of path for the new symlink.
- */
- struct vmmdev_hgcm_function_parameter new_path;
- /**
- * pointer, in:
- * Points to struct shfl_string of destination for symlink.
- */
- struct vmmdev_hgcm_function_parameter old_path;
- /**
- * pointer, out:
- * Information about created symlink.
- */
- struct vmmdev_hgcm_function_parameter info;
- };
- #define SHFL_CPARMS_SYMLINK (4)
- #endif
|