VirtualBox

source: vbox/trunk/include/VBox/shflsvc.h@ 27084

Last change on this file since 27084 was 24351, checked in by vboxsync, 15 years ago

APPEND mode for shared folders (SHFL_CF_ACCESS_APPEND), missed header.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 23.5 KB
Line 
1/** @file
2 * Shared Folders: Common header for host service and guest clients. (ADD,HSvc)
3 */
4
5/*
6 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 *
25 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
26 * Clara, CA 95054 USA or visit http://www.sun.com if you need
27 * additional information or have any questions.
28 */
29
30#ifndef ___VBox_shflsvc_h
31#define ___VBox_shflsvc_h
32
33#include <VBox/types.h>
34#include <VBox/VBoxGuest2.h>
35#include <VBox/VMMDev.h>
36#include <VBox/hgcmsvc.h>
37#include <iprt/fs.h>
38
39
40/** @name Some bit flag manipulation macros.
41 * @{ */
42#ifndef BIT_FLAG
43#define BIT_FLAG(__Field,__Flag) ((__Field) & (__Flag))
44#endif
45
46#ifndef BIT_FLAG_SET
47#define BIT_FLAG_SET(__Field,__Flag) ((__Field) |= (__Flag))
48#endif
49
50#ifndef BIT_FLAG_CLEAR
51#define BIT_FLAG_CLEAR(__Field,__Flag) ((__Field) &= ~(__Flag))
52#endif
53/** @} */
54
55
56/**
57 * Structures shared between guest and the service
58 * can be relocated and use offsets to point to variable
59 * length parts.
60 */
61
62/**
63 * Shared folders protocol works with handles.
64 * Before doing any action on a file system object,
65 * one have to obtain the object handle via a SHFL_FN_CREATE
66 * request. A handle must be closed with SHFL_FN_CLOSE.
67 */
68
69/** Shared Folders service functions. (guest)
70 * @{
71 */
72
73/** Query mappings changes. */
74#define SHFL_FN_QUERY_MAPPINGS (1)
75/** Query mappings changes. */
76#define SHFL_FN_QUERY_MAP_NAME (2)
77/** Open/create object. */
78#define SHFL_FN_CREATE (3)
79/** Close object handle. */
80#define SHFL_FN_CLOSE (4)
81/** Read object content. */
82#define SHFL_FN_READ (5)
83/** Write new object content. */
84#define SHFL_FN_WRITE (6)
85/** Lock/unlock a range in the object. */
86#define SHFL_FN_LOCK (7)
87/** List object content. */
88#define SHFL_FN_LIST (8)
89/** Query/set object information. */
90#define SHFL_FN_INFORMATION (9)
91/** Remove object */
92#define SHFL_FN_REMOVE (11)
93/** Map folder (legacy) */
94#define SHFL_FN_MAP_FOLDER_OLD (12)
95/** Unmap folder */
96#define SHFL_FN_UNMAP_FOLDER (13)
97/** Rename object (possibly moving it to another directory) */
98#define SHFL_FN_RENAME (14)
99/** Flush file */
100#define SHFL_FN_FLUSH (15)
101/** @todo macl, a description, please. */
102#define SHFL_FN_SET_UTF8 (16)
103/** Map folder */
104#define SHFL_FN_MAP_FOLDER (17)
105
106/** @} */
107
108/** Shared Folders service functions. (host)
109 * @{
110 */
111
112/** Add shared folder mapping. */
113#define SHFL_FN_ADD_MAPPING (1)
114/** Remove shared folder mapping. */
115#define SHFL_FN_REMOVE_MAPPING (2)
116/** Set the led status light address */
117#define SHFL_FN_SET_STATUS_LED (3)
118
119/** @} */
120
121/** Root handle for a mapping. Root handles are unique.
122 * @note
123 * Function parameters structures consider
124 * the root handle as 32 bit value. If the typedef
125 * will be changed, then function parameters must be
126 * changed accordingly. All those parameters are marked
127 * with SHFLROOT in comments.
128 */
129typedef uint32_t SHFLROOT;
130
131#define SHFL_ROOT_NIL ((SHFLROOT)~0)
132
133
134/** A shared folders handle for an opened object. */
135typedef uint64_t SHFLHANDLE;
136
137#define SHFL_HANDLE_NIL ((SHFLHANDLE)~0LL)
138#define SHFL_HANDLE_ROOT ((SHFLHANDLE)0LL)
139
140/** Hardcoded maximum number of shared folder mapping available to the guest. */
141#define SHFL_MAX_MAPPINGS (64)
142
143/** @name Shared Folders strings. They can be either UTF-8 or UTF-16.
144 * @{
145 */
146
147/**
148 * Shared folder string buffer structure.
149 */
150typedef struct _SHFLSTRING
151{
152 /** Size of the String member in bytes. */
153 uint16_t u16Size;
154
155 /** Length of string without trailing nul in bytes. */
156 uint16_t u16Length;
157
158 /** UTF-8 or UTF-16 string. Nul terminated. */
159 union
160 {
161 uint8_t utf8[1];
162 uint16_t ucs2[1];
163 } String;
164} SHFLSTRING;
165
166/** Pointer to a shared folder string buffer. */
167typedef SHFLSTRING *PSHFLSTRING;
168/** Pointer to a const shared folder string buffer. */
169typedef const SHFLSTRING *PCSHFLSTRING;
170
171/** Calculate size of the string. */
172DECLINLINE(uint32_t) ShflStringSizeOfBuffer (PCSHFLSTRING pString)
173{
174 return pString? sizeof (SHFLSTRING) - sizeof (pString->String) + pString->u16Size: 0;
175}
176
177DECLINLINE(uint32_t) ShflStringLength (PCSHFLSTRING pString)
178{
179 return pString? pString->u16Length: 0;
180}
181
182DECLINLINE(PSHFLSTRING) ShflStringInitBuffer(void *pvBuffer, uint32_t u32Size)
183{
184 PSHFLSTRING pString = NULL;
185
186 uint32_t u32HeaderSize = sizeof (SHFLSTRING) - sizeof (pString->String);
187
188 /* Check that the buffer size is big enough to hold a zero sized string
189 * and is not too big to fit into 16 bit variables.
190 */
191 if (u32Size >= u32HeaderSize && u32Size - u32HeaderSize <= 0xFFFF)
192 {
193 pString = (PSHFLSTRING)pvBuffer;
194 pString->u16Size = u32Size - u32HeaderSize;
195 pString->u16Length = 0;
196 }
197
198 return pString;
199}
200
201/**
202 * Validates a HGCM string parameter.
203 *
204 * @returns true if valid, false if not.
205 *
206 * @param pString The string buffer pointer.
207 * @param cbBuf The buffer size from the parameter.
208 */
209DECLINLINE(bool) ShflStringIsValid(PCSHFLSTRING pString, uint32_t cbBuf)
210{
211 if (RT_UNLIKELY(cbBuf <= RT_UOFFSETOF(SHFLSTRING, String)))
212 return false;
213 if (RT_UNLIKELY((uint32_t)pString->u16Size + RT_UOFFSETOF(SHFLSTRING, String) > cbBuf))
214 return false;
215 if (RT_UNLIKELY(pString->u16Length >= pString->u16Size))
216 return false;
217 return true;
218}
219
220/**
221 * Validates an optional HGCM string parameter.
222 *
223 * @returns true if valid, false if not.
224 *
225 * @param pString The string buffer pointer. Can be NULL.
226 * @param cbBuf The buffer size from the parameter.
227 */
228DECLINLINE(bool) ShflStringIsValidOrNull(PCSHFLSTRING pString, uint32_t cbBuf)
229{
230 if (pString)
231 return ShflStringIsValid(pString, cbBuf);
232 if (RT_UNLIKELY(cbBuf > 0))
233 return false;
234 return true;
235}
236
237/** @} */
238
239
240/** Result of an open/create request.
241 * Along with handle value the result code
242 * identifies what has happened while
243 * trying to open the object.
244 */
245typedef enum _SHFLCREATERESULT
246{
247 SHFL_NO_RESULT,
248 /** Specified path does not exist. */
249 SHFL_PATH_NOT_FOUND,
250 /** Path to file exists, but the last component does not. */
251 SHFL_FILE_NOT_FOUND,
252 /** File already exists and either has been opened or not. */
253 SHFL_FILE_EXISTS,
254 /** New file was created. */
255 SHFL_FILE_CREATED,
256 /** Existing file was replaced or overwritten. */
257 SHFL_FILE_REPLACED
258} SHFLCREATERESULT;
259
260
261/** Open/create flags.
262 * @{
263 */
264
265/** No flags. Initialization value. */
266#define SHFL_CF_NONE (0x00000000)
267
268/** Lookup only the object, do not return a handle. All other flags are ignored. */
269#define SHFL_CF_LOOKUP (0x00000001)
270
271/** Open parent directory of specified object.
272 * Useful for the corresponding Windows FSD flag
273 * and for opening paths like \\dir\\*.* to search the 'dir'.
274 * @todo possibly not needed???
275 */
276#define SHFL_CF_OPEN_TARGET_DIRECTORY (0x00000002)
277
278/** Create/open a directory. */
279#define SHFL_CF_DIRECTORY (0x00000004)
280
281/** Open/create action to do if object exists
282 * and if the object does not exists.
283 * REPLACE file means atomically DELETE and CREATE.
284 * OVERWRITE file means truncating the file to 0 and
285 * setting new size.
286 * When opening an existing directory REPLACE and OVERWRITE
287 * actions are considered invalid, and cause returning
288 * FILE_EXISTS with NIL handle.
289 */
290#define SHFL_CF_ACT_MASK_IF_EXISTS (0x000000F0)
291#define SHFL_CF_ACT_MASK_IF_NEW (0x00000F00)
292
293/** What to do if object exists. */
294#define SHFL_CF_ACT_OPEN_IF_EXISTS (0x00000000)
295#define SHFL_CF_ACT_FAIL_IF_EXISTS (0x00000010)
296#define SHFL_CF_ACT_REPLACE_IF_EXISTS (0x00000020)
297#define SHFL_CF_ACT_OVERWRITE_IF_EXISTS (0x00000030)
298
299/** What to do if object does not exist. */
300#define SHFL_CF_ACT_CREATE_IF_NEW (0x00000000)
301#define SHFL_CF_ACT_FAIL_IF_NEW (0x00000100)
302
303/** Read/write requested access for the object. */
304#define SHFL_CF_ACCESS_MASK_RW (0x00003000)
305
306/** No access requested. */
307#define SHFL_CF_ACCESS_NONE (0x00000000)
308/** Read access requested. */
309#define SHFL_CF_ACCESS_READ (0x00001000)
310/** Write access requested. */
311#define SHFL_CF_ACCESS_WRITE (0x00002000)
312/** Read/Write access requested. */
313#define SHFL_CF_ACCESS_READWRITE (SHFL_CF_ACCESS_READ | SHFL_CF_ACCESS_WRITE)
314
315/** Requested share access for the object. */
316#define SHFL_CF_ACCESS_MASK_DENY (0x0000C000)
317
318/** Allow any access. */
319#define SHFL_CF_ACCESS_DENYNONE (0x00000000)
320/** Do not allow read. */
321#define SHFL_CF_ACCESS_DENYREAD (0x00004000)
322/** Do not allow write. */
323#define SHFL_CF_ACCESS_DENYWRITE (0x00008000)
324/** Do not allow access. */
325#define SHFL_CF_ACCESS_DENYALL (SHFL_CF_ACCESS_DENYREAD | SHFL_CF_ACCESS_DENYWRITE)
326
327/** Requested access to attributes of the object. */
328#define SHFL_CF_ACCESS_MASK_ATTR (0x00030000)
329
330/** No access requested. */
331#define SHFL_CF_ACCESS_ATTR_NONE (0x00000000)
332/** Read access requested. */
333#define SHFL_CF_ACCESS_ATTR_READ (0x00010000)
334/** Write access requested. */
335#define SHFL_CF_ACCESS_ATTR_WRITE (0x00020000)
336/** Read/Write access requested. */
337#define SHFL_CF_ACCESS_ATTR_READWRITE (SHFL_CF_ACCESS_READ | SHFL_CF_ACCESS_WRITE)
338
339/** The file is opened in append mode. Ignored if SHFL_CF_ACCESS_WRITE is not set. */
340#define SHFL_CF_ACCESS_APPEND (0x00040000)
341
342/** @} */
343
344#pragma pack(1)
345typedef struct _SHFLCREATEPARMS
346{
347 /* Returned handle of opened object. */
348 SHFLHANDLE Handle;
349
350 /* Returned result of the operation */
351 SHFLCREATERESULT Result;
352
353 /* SHFL_CF_* */
354 uint32_t CreateFlags;
355
356 /* Attributes of object to create and
357 * returned actual attributes of opened/created object.
358 */
359 RTFSOBJINFO Info;
360
361} SHFLCREATEPARMS;
362#pragma pack()
363
364typedef SHFLCREATEPARMS *PSHFLCREATEPARMS;
365
366
367/** Shared Folders mappings.
368 * @{
369 */
370
371/** The mapping has been added since last query. */
372#define SHFL_MS_NEW (1)
373/** The mapping has been deleted since last query. */
374#define SHFL_MS_DELETED (2)
375
376typedef struct _SHFLMAPPING
377{
378 /** Mapping status. */
379 uint32_t u32Status;
380 /** Root handle. */
381 SHFLROOT root;
382} SHFLMAPPING;
383
384typedef SHFLMAPPING *PSHFLMAPPING;
385
386/** @} */
387
388/** Shared Folder directory information
389 * @{
390 */
391
392typedef struct _SHFLDIRINFO
393{
394 /** Full information about the object. */
395 RTFSOBJINFO Info;
396 /** The length of the short field (number of RTUTF16 chars).
397 * It is 16-bit for reasons of alignment. */
398 uint16_t cucShortName;
399 /** The short name for 8.3 compatability.
400 * Empty string if not available.
401 */
402 RTUTF16 uszShortName[14];
403 /** @todo malc, a description, please. */
404 SHFLSTRING name;
405} SHFLDIRINFO, *PSHFLDIRINFO;
406
407typedef struct _SHFLVOLINFO
408{
409 RTFOFF ullTotalAllocationBytes;
410 RTFOFF ullAvailableAllocationBytes;
411 uint32_t ulBytesPerAllocationUnit;
412 uint32_t ulBytesPerSector;
413 uint32_t ulSerial;
414 RTFSPROPERTIES fsProperties;
415} SHFLVOLINFO, *PSHFLVOLINFO;
416
417/** @} */
418
419/** Function parameter structures.
420 * @{
421 */
422
423/**
424 * SHFL_FN_QUERY_MAPPINGS
425 */
426
427#define SHFL_MF_UCS2 (0x00000000)
428/** Guest uses UTF8 strings, if not set then the strings are unicode (UCS2). */
429#define SHFL_MF_UTF8 (0x00000001)
430
431/** Type of guest system. For future system dependent features. */
432#define SHFL_MF_SYSTEM_MASK (0x0000FF00)
433#define SHFL_MF_SYSTEM_NONE (0x00000000)
434#define SHFL_MF_SYSTEM_WINDOWS (0x00000100)
435#define SHFL_MF_SYSTEM_LINUX (0x00000200)
436
437/** Parameters structure. */
438typedef struct _VBoxSFQueryMappings
439{
440 VBoxGuestHGCMCallInfo callInfo;
441
442 /** 32bit, in:
443 * Flags describing various client needs.
444 */
445 HGCMFunctionParameter flags;
446
447 /** 32bit, in/out:
448 * Number of mappings the client expects.
449 * This is the number of elements in the
450 * mappings array.
451 */
452 HGCMFunctionParameter numberOfMappings;
453
454 /** pointer, in/out:
455 * Points to array of SHFLMAPPING structures.
456 */
457 HGCMFunctionParameter mappings;
458
459} VBoxSFQueryMappings;
460
461/** Number of parameters */
462#define SHFL_CPARMS_QUERY_MAPPINGS (3)
463
464
465
466/**
467 * SHFL_FN_QUERY_MAP_NAME
468 */
469
470/** Parameters structure. */
471typedef struct _VBoxSFQueryMapName
472{
473 VBoxGuestHGCMCallInfo callInfo;
474
475 /** 32bit, in: SHFLROOT
476 * Root handle of the mapping which name is queried.
477 */
478 HGCMFunctionParameter root;
479
480 /** pointer, in/out:
481 * Points to SHFLSTRING buffer.
482 */
483 HGCMFunctionParameter name;
484
485} VBoxSFQueryMapName;
486
487/** Number of parameters */
488#define SHFL_CPARMS_QUERY_MAP_NAME (2)
489
490/**
491 * SHFL_FN_MAP_FOLDER_OLD
492 */
493
494/** Parameters structure. */
495typedef struct _VBoxSFMapFolder_Old
496{
497 VBoxGuestHGCMCallInfo callInfo;
498
499 /** pointer, in:
500 * Points to SHFLSTRING buffer.
501 */
502 HGCMFunctionParameter path;
503
504 /** pointer, out: SHFLROOT
505 * Root handle of the mapping which name is queried.
506 */
507 HGCMFunctionParameter root;
508
509 /** pointer, in: RTUTF16
510 * Path delimiter
511 */
512 HGCMFunctionParameter delimiter;
513
514} VBoxSFMapFolder_Old;
515
516/** Number of parameters */
517#define SHFL_CPARMS_MAP_FOLDER_OLD (3)
518
519/**
520 * SHFL_FN_MAP_FOLDER
521 */
522
523/** Parameters structure. */
524typedef struct _VBoxSFMapFolder
525{
526 VBoxGuestHGCMCallInfo callInfo;
527
528 /** pointer, in:
529 * Points to SHFLSTRING buffer.
530 */
531 HGCMFunctionParameter path;
532
533 /** pointer, out: SHFLROOT
534 * Root handle of the mapping which name is queried.
535 */
536 HGCMFunctionParameter root;
537
538 /** pointer, in: RTUTF16
539 * Path delimiter
540 */
541 HGCMFunctionParameter delimiter;
542
543 /** pointer, in: SHFLROOT
544 * Case senstive flag
545 */
546 HGCMFunctionParameter fCaseSensitive;
547
548} VBoxSFMapFolder;
549
550/** Number of parameters */
551#define SHFL_CPARMS_MAP_FOLDER (4)
552
553/**
554 * SHFL_FN_UNMAP_FOLDER
555 */
556
557/** Parameters structure. */
558typedef struct _VBoxSFUnmapFolder
559{
560 VBoxGuestHGCMCallInfo callInfo;
561
562 /** pointer, in: SHFLROOT
563 * Root handle of the mapping which name is queried.
564 */
565 HGCMFunctionParameter root;
566
567} VBoxSFUnmapFolder;
568
569/** Number of parameters */
570#define SHFL_CPARMS_UNMAP_FOLDER (1)
571
572
573/**
574 * SHFL_FN_CREATE
575 */
576
577/** Parameters structure. */
578typedef struct _VBoxSFCreate
579{
580 VBoxGuestHGCMCallInfo callInfo;
581
582 /** pointer, in: SHFLROOT
583 * Root handle of the mapping which name is queried.
584 */
585 HGCMFunctionParameter root;
586
587 /** pointer, in:
588 * Points to SHFLSTRING buffer.
589 */
590 HGCMFunctionParameter path;
591
592 /** pointer, in/out:
593 * Points to SHFLCREATEPARMS buffer.
594 */
595 HGCMFunctionParameter parms;
596
597} VBoxSFCreate;
598
599/** Number of parameters */
600#define SHFL_CPARMS_CREATE (3)
601
602
603/**
604 * SHFL_FN_CLOSE
605 */
606
607/** Parameters structure. */
608typedef struct _VBoxSFClose
609{
610 VBoxGuestHGCMCallInfo callInfo;
611
612 /** pointer, in: SHFLROOT
613 * Root handle of the mapping which name is queried.
614 */
615 HGCMFunctionParameter root;
616
617
618 /** value64, in:
619 * SHFLHANDLE of object to close.
620 */
621 HGCMFunctionParameter handle;
622
623} VBoxSFClose;
624
625/** Number of parameters */
626#define SHFL_CPARMS_CLOSE (2)
627
628
629/**
630 * SHFL_FN_READ
631 */
632
633/** Parameters structure. */
634typedef struct _VBoxSFRead
635{
636 VBoxGuestHGCMCallInfo callInfo;
637
638 /** pointer, in: SHFLROOT
639 * Root handle of the mapping which name is queried.
640 */
641 HGCMFunctionParameter root;
642
643 /** value64, in:
644 * SHFLHANDLE of object to read from.
645 */
646 HGCMFunctionParameter handle;
647
648 /** value64, in:
649 * Offset to read from.
650 */
651 HGCMFunctionParameter offset;
652
653 /** value64, in/out:
654 * Bytes to read/How many were read.
655 */
656 HGCMFunctionParameter cb;
657
658 /** pointer, out:
659 * Buffer to place data to.
660 */
661 HGCMFunctionParameter buffer;
662
663} VBoxSFRead;
664
665/** Number of parameters */
666#define SHFL_CPARMS_READ (5)
667
668
669
670/**
671 * SHFL_FN_WRITE
672 */
673
674/** Parameters structure. */
675typedef struct _VBoxSFWrite
676{
677 VBoxGuestHGCMCallInfo callInfo;
678
679 /** pointer, in: SHFLROOT
680 * Root handle of the mapping which name is queried.
681 */
682 HGCMFunctionParameter root;
683
684 /** value64, in:
685 * SHFLHANDLE of object to write to.
686 */
687 HGCMFunctionParameter handle;
688
689 /** value64, in:
690 * Offset to write to.
691 */
692 HGCMFunctionParameter offset;
693
694 /** value64, in/out:
695 * Bytes to write/How many were written.
696 */
697 HGCMFunctionParameter cb;
698
699 /** pointer, in:
700 * Data to write.
701 */
702 HGCMFunctionParameter buffer;
703
704} VBoxSFWrite;
705
706/** Number of parameters */
707#define SHFL_CPARMS_WRITE (5)
708
709
710
711/**
712 * SHFL_FN_LOCK
713 */
714
715/** Lock owner is the HGCM client. */
716
717/** Lock mode bit mask. */
718#define SHFL_LOCK_MODE_MASK (0x3)
719/** Cancel lock on the given range. */
720#define SHFL_LOCK_CANCEL (0x0)
721/** Aquire read only lock. Prevent write to the range. */
722#define SHFL_LOCK_SHARED (0x1)
723/** Aquire write lock. Prevent both write and read to the range. */
724#define SHFL_LOCK_EXCLUSIVE (0x2)
725
726/** Do not wait for lock if it can not be acquired at the time. */
727#define SHFL_LOCK_NOWAIT (0x0)
728/** Wait and acquire lock. */
729#define SHFL_LOCK_WAIT (0x4)
730
731/** Lock the specified range. */
732#define SHFL_LOCK_PARTIAL (0x0)
733/** Lock entire object. */
734#define SHFL_LOCK_ENTIRE (0x8)
735
736/** Parameters structure. */
737typedef struct _VBoxSFLock
738{
739 VBoxGuestHGCMCallInfo callInfo;
740
741 /** pointer, in: SHFLROOT
742 * Root handle of the mapping which name is queried.
743 */
744 HGCMFunctionParameter root;
745
746 /** value64, in:
747 * SHFLHANDLE of object to be locked.
748 */
749 HGCMFunctionParameter handle;
750
751 /** value64, in:
752 * Starting offset of lock range.
753 */
754 HGCMFunctionParameter offset;
755
756 /** value64, in:
757 * Length of range.
758 */
759 HGCMFunctionParameter length;
760
761 /** value32, in:
762 * Lock flags SHFL_LOCK_*.
763 */
764 HGCMFunctionParameter flags;
765
766} VBoxSFLock;
767
768/** Number of parameters */
769#define SHFL_CPARMS_LOCK (5)
770
771
772
773/**
774 * SHFL_FN_FLUSH
775 */
776
777/** Parameters structure. */
778typedef struct _VBoxSFFlush
779{
780 VBoxGuestHGCMCallInfo callInfo;
781
782 /** pointer, in: SHFLROOT
783 * Root handle of the mapping which name is queried.
784 */
785 HGCMFunctionParameter root;
786
787 /** value64, in:
788 * SHFLHANDLE of object to be locked.
789 */
790 HGCMFunctionParameter handle;
791
792} VBoxSFFlush;
793
794/** Number of parameters */
795#define SHFL_CPARMS_FLUSH (2)
796
797/**
798 * SHFL_FN_LIST
799 */
800
801/** Listing information includes variable length RTDIRENTRY[EX] structures. */
802
803/** @todo might be necessary for future. */
804#define SHFL_LIST_NONE 0
805#define SHFL_LIST_RETURN_ONE 1
806
807/** Parameters structure. */
808typedef struct _VBoxSFList
809{
810 VBoxGuestHGCMCallInfo callInfo;
811
812 /** pointer, in: SHFLROOT
813 * Root handle of the mapping which name is queried.
814 */
815 HGCMFunctionParameter root;
816
817 /** value64, in:
818 * SHFLHANDLE of object to be listed.
819 */
820 HGCMFunctionParameter handle;
821
822 /** value32, in:
823 * List flags SHFL_LIST_*.
824 */
825 HGCMFunctionParameter flags;
826
827 /** value32, in/out:
828 * Bytes to be used for listing information/How many bytes were used.
829 */
830 HGCMFunctionParameter cb;
831
832 /** pointer, in/optional
833 * Points to SHFLSTRING buffer that specifies a search path.
834 */
835 HGCMFunctionParameter path;
836
837 /** pointer, out:
838 * Buffer to place listing information to. (SHFLDIRINFO)
839 */
840 HGCMFunctionParameter buffer;
841
842 /** value32, in/out:
843 * Indicates a key where the listing must be resumed.
844 * in: 0 means start from begin of object.
845 * out: 0 means listing completed.
846 */
847 HGCMFunctionParameter resumePoint;
848
849 /** pointer, out:
850 * Number of files returned
851 */
852 HGCMFunctionParameter cFiles;
853
854} VBoxSFList;
855
856/** Number of parameters */
857#define SHFL_CPARMS_LIST (8)
858
859
860
861/**
862 * SHFL_FN_INFORMATION
863 */
864
865/** Mask of Set/Get bit. */
866#define SHFL_INFO_MODE_MASK (0x1)
867/** Get information */
868#define SHFL_INFO_GET (0x0)
869/** Set information */
870#define SHFL_INFO_SET (0x1)
871
872/** Get name of the object. */
873#define SHFL_INFO_NAME (0x2)
874/** Set size of object (extend/trucate); only applies to file objects */
875#define SHFL_INFO_SIZE (0x4)
876/** Get/Set file object info. */
877#define SHFL_INFO_FILE (0x8)
878/** Get volume information. */
879#define SHFL_INFO_VOLUME (0x10)
880
881/** @todo different file info structures */
882
883
884/** Parameters structure. */
885typedef struct _VBoxSFInformation
886{
887 VBoxGuestHGCMCallInfo callInfo;
888
889 /** pointer, in: SHFLROOT
890 * Root handle of the mapping which name is queried.
891 */
892 HGCMFunctionParameter root;
893
894 /** value64, in:
895 * SHFLHANDLE of object to be listed.
896 */
897 HGCMFunctionParameter handle;
898
899 /** value32, in:
900 * SHFL_INFO_*
901 */
902 HGCMFunctionParameter flags;
903
904 /** value32, in/out:
905 * Bytes to be used for information/How many bytes were used.
906 */
907 HGCMFunctionParameter cb;
908
909 /** pointer, in/out:
910 * Information to be set/get (RTFSOBJINFO or SHFLSTRING).
911 * Do not forget to set the RTFSOBJINFO::Attr::enmAdditional for Get operation as well.
912 */
913 HGCMFunctionParameter info;
914
915} VBoxSFInformation;
916
917/** Number of parameters */
918#define SHFL_CPARMS_INFORMATION (5)
919
920
921/**
922 * SHFL_FN_REMOVE
923 */
924
925#define SHFL_REMOVE_FILE (0x1)
926#define SHFL_REMOVE_DIR (0x2)
927
928/** Parameters structure. */
929typedef struct _VBoxSFRemove
930{
931 VBoxGuestHGCMCallInfo callInfo;
932
933 /** pointer, in: SHFLROOT
934 * Root handle of the mapping which name is queried.
935 */
936 HGCMFunctionParameter root;
937
938 /** pointer, in:
939 * Points to SHFLSTRING buffer.
940 */
941 HGCMFunctionParameter path;
942
943 /** value32, in:
944 * remove flags (file/directory)
945 */
946 HGCMFunctionParameter flags;
947
948} VBoxSFRemove;
949
950#define SHFL_CPARMS_REMOVE (3)
951
952
953/**
954 * SHFL_FN_RENAME
955 */
956
957#define SHFL_RENAME_FILE (0x1)
958#define SHFL_RENAME_DIR (0x2)
959#define SHFL_RENAME_REPLACE_IF_EXISTS (0x4)
960
961/** Parameters structure. */
962typedef struct _VBoxSFRename
963{
964 VBoxGuestHGCMCallInfo callInfo;
965
966 /** pointer, in: SHFLROOT
967 * Root handle of the mapping which name is queried.
968 */
969 HGCMFunctionParameter root;
970
971 /** pointer, in:
972 * Points to SHFLSTRING src.
973 */
974 HGCMFunctionParameter src;
975
976 /** pointer, in:
977 * Points to SHFLSTRING dest.
978 */
979 HGCMFunctionParameter dest;
980
981 /** value32, in:
982 * rename flags (file/directory)
983 */
984 HGCMFunctionParameter flags;
985
986} VBoxSFRename;
987
988#define SHFL_CPARMS_RENAME (4)
989
990/**
991 * SHFL_FN_ADD_MAPPING
992 * Host call, no guest structure is used.
993 */
994
995#define SHFL_CPARMS_ADD_MAPPING (3)
996
997/**
998 * SHFL_FN_REMOVE_MAPPING
999 * Host call, no guest structure is used.
1000 */
1001
1002#define SHFL_CPARMS_REMOVE_MAPPING (1)
1003
1004
1005/**
1006 * SHFL_FN_SET_STATUS_LED
1007 * Host call, no guest structure is used.
1008 */
1009
1010#define SHFL_CPARMS_SET_STATUS_LED (1)
1011
1012/** @} */
1013
1014#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette