VirtualBox

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

Last change on this file since 22650 was 21485, checked in by vboxsync, 15 years ago

sf: parameter validation.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 23.4 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/** @} */
340
341#pragma pack(1)
342typedef struct _SHFLCREATEPARMS
343{
344 /* Returned handle of opened object. */
345 SHFLHANDLE Handle;
346
347 /* Returned result of the operation */
348 SHFLCREATERESULT Result;
349
350 /* SHFL_CF_* */
351 uint32_t CreateFlags;
352
353 /* Attributes of object to create and
354 * returned actual attributes of opened/created object.
355 */
356 RTFSOBJINFO Info;
357
358} SHFLCREATEPARMS;
359#pragma pack()
360
361typedef SHFLCREATEPARMS *PSHFLCREATEPARMS;
362
363
364/** Shared Folders mappings.
365 * @{
366 */
367
368/** The mapping has been added since last query. */
369#define SHFL_MS_NEW (1)
370/** The mapping has been deleted since last query. */
371#define SHFL_MS_DELETED (2)
372
373typedef struct _SHFLMAPPING
374{
375 /** Mapping status. */
376 uint32_t u32Status;
377 /** Root handle. */
378 SHFLROOT root;
379} SHFLMAPPING;
380
381typedef SHFLMAPPING *PSHFLMAPPING;
382
383/** @} */
384
385/** Shared Folder directory information
386 * @{
387 */
388
389typedef struct _SHFLDIRINFO
390{
391 /** Full information about the object. */
392 RTFSOBJINFO Info;
393 /** The length of the short field (number of RTUTF16 chars).
394 * It is 16-bit for reasons of alignment. */
395 uint16_t cucShortName;
396 /** The short name for 8.3 compatability.
397 * Empty string if not available.
398 */
399 RTUTF16 uszShortName[14];
400 /** @todo malc, a description, please. */
401 SHFLSTRING name;
402} SHFLDIRINFO, *PSHFLDIRINFO;
403
404typedef struct _SHFLVOLINFO
405{
406 RTFOFF ullTotalAllocationBytes;
407 RTFOFF ullAvailableAllocationBytes;
408 uint32_t ulBytesPerAllocationUnit;
409 uint32_t ulBytesPerSector;
410 uint32_t ulSerial;
411 RTFSPROPERTIES fsProperties;
412} SHFLVOLINFO, *PSHFLVOLINFO;
413
414/** @} */
415
416/** Function parameter structures.
417 * @{
418 */
419
420/**
421 * SHFL_FN_QUERY_MAPPINGS
422 */
423
424#define SHFL_MF_UCS2 (0x00000000)
425/** Guest uses UTF8 strings, if not set then the strings are unicode (UCS2). */
426#define SHFL_MF_UTF8 (0x00000001)
427
428/** Type of guest system. For future system dependent features. */
429#define SHFL_MF_SYSTEM_MASK (0x0000FF00)
430#define SHFL_MF_SYSTEM_NONE (0x00000000)
431#define SHFL_MF_SYSTEM_WINDOWS (0x00000100)
432#define SHFL_MF_SYSTEM_LINUX (0x00000200)
433
434/** Parameters structure. */
435typedef struct _VBoxSFQueryMappings
436{
437 VBoxGuestHGCMCallInfo callInfo;
438
439 /** 32bit, in:
440 * Flags describing various client needs.
441 */
442 HGCMFunctionParameter flags;
443
444 /** 32bit, in/out:
445 * Number of mappings the client expects.
446 * This is the number of elements in the
447 * mappings array.
448 */
449 HGCMFunctionParameter numberOfMappings;
450
451 /** pointer, in/out:
452 * Points to array of SHFLMAPPING structures.
453 */
454 HGCMFunctionParameter mappings;
455
456} VBoxSFQueryMappings;
457
458/** Number of parameters */
459#define SHFL_CPARMS_QUERY_MAPPINGS (3)
460
461
462
463/**
464 * SHFL_FN_QUERY_MAP_NAME
465 */
466
467/** Parameters structure. */
468typedef struct _VBoxSFQueryMapName
469{
470 VBoxGuestHGCMCallInfo callInfo;
471
472 /** 32bit, in: SHFLROOT
473 * Root handle of the mapping which name is queried.
474 */
475 HGCMFunctionParameter root;
476
477 /** pointer, in/out:
478 * Points to SHFLSTRING buffer.
479 */
480 HGCMFunctionParameter name;
481
482} VBoxSFQueryMapName;
483
484/** Number of parameters */
485#define SHFL_CPARMS_QUERY_MAP_NAME (2)
486
487/**
488 * SHFL_FN_MAP_FOLDER_OLD
489 */
490
491/** Parameters structure. */
492typedef struct _VBoxSFMapFolder_Old
493{
494 VBoxGuestHGCMCallInfo callInfo;
495
496 /** pointer, in:
497 * Points to SHFLSTRING buffer.
498 */
499 HGCMFunctionParameter path;
500
501 /** pointer, out: SHFLROOT
502 * Root handle of the mapping which name is queried.
503 */
504 HGCMFunctionParameter root;
505
506 /** pointer, in: RTUTF16
507 * Path delimiter
508 */
509 HGCMFunctionParameter delimiter;
510
511} VBoxSFMapFolder_Old;
512
513/** Number of parameters */
514#define SHFL_CPARMS_MAP_FOLDER_OLD (3)
515
516/**
517 * SHFL_FN_MAP_FOLDER
518 */
519
520/** Parameters structure. */
521typedef struct _VBoxSFMapFolder
522{
523 VBoxGuestHGCMCallInfo callInfo;
524
525 /** pointer, in:
526 * Points to SHFLSTRING buffer.
527 */
528 HGCMFunctionParameter path;
529
530 /** pointer, out: SHFLROOT
531 * Root handle of the mapping which name is queried.
532 */
533 HGCMFunctionParameter root;
534
535 /** pointer, in: RTUTF16
536 * Path delimiter
537 */
538 HGCMFunctionParameter delimiter;
539
540 /** pointer, in: SHFLROOT
541 * Case senstive flag
542 */
543 HGCMFunctionParameter fCaseSensitive;
544
545} VBoxSFMapFolder;
546
547/** Number of parameters */
548#define SHFL_CPARMS_MAP_FOLDER (4)
549
550/**
551 * SHFL_FN_UNMAP_FOLDER
552 */
553
554/** Parameters structure. */
555typedef struct _VBoxSFUnmapFolder
556{
557 VBoxGuestHGCMCallInfo callInfo;
558
559 /** pointer, in: SHFLROOT
560 * Root handle of the mapping which name is queried.
561 */
562 HGCMFunctionParameter root;
563
564} VBoxSFUnmapFolder;
565
566/** Number of parameters */
567#define SHFL_CPARMS_UNMAP_FOLDER (1)
568
569
570/**
571 * SHFL_FN_CREATE
572 */
573
574/** Parameters structure. */
575typedef struct _VBoxSFCreate
576{
577 VBoxGuestHGCMCallInfo callInfo;
578
579 /** pointer, in: SHFLROOT
580 * Root handle of the mapping which name is queried.
581 */
582 HGCMFunctionParameter root;
583
584 /** pointer, in:
585 * Points to SHFLSTRING buffer.
586 */
587 HGCMFunctionParameter path;
588
589 /** pointer, in/out:
590 * Points to SHFLCREATEPARMS buffer.
591 */
592 HGCMFunctionParameter parms;
593
594} VBoxSFCreate;
595
596/** Number of parameters */
597#define SHFL_CPARMS_CREATE (3)
598
599
600/**
601 * SHFL_FN_CLOSE
602 */
603
604/** Parameters structure. */
605typedef struct _VBoxSFClose
606{
607 VBoxGuestHGCMCallInfo callInfo;
608
609 /** pointer, in: SHFLROOT
610 * Root handle of the mapping which name is queried.
611 */
612 HGCMFunctionParameter root;
613
614
615 /** value64, in:
616 * SHFLHANDLE of object to close.
617 */
618 HGCMFunctionParameter handle;
619
620} VBoxSFClose;
621
622/** Number of parameters */
623#define SHFL_CPARMS_CLOSE (2)
624
625
626/**
627 * SHFL_FN_READ
628 */
629
630/** Parameters structure. */
631typedef struct _VBoxSFRead
632{
633 VBoxGuestHGCMCallInfo callInfo;
634
635 /** pointer, in: SHFLROOT
636 * Root handle of the mapping which name is queried.
637 */
638 HGCMFunctionParameter root;
639
640 /** value64, in:
641 * SHFLHANDLE of object to read from.
642 */
643 HGCMFunctionParameter handle;
644
645 /** value64, in:
646 * Offset to read from.
647 */
648 HGCMFunctionParameter offset;
649
650 /** value64, in/out:
651 * Bytes to read/How many were read.
652 */
653 HGCMFunctionParameter cb;
654
655 /** pointer, out:
656 * Buffer to place data to.
657 */
658 HGCMFunctionParameter buffer;
659
660} VBoxSFRead;
661
662/** Number of parameters */
663#define SHFL_CPARMS_READ (5)
664
665
666
667/**
668 * SHFL_FN_WRITE
669 */
670
671/** Parameters structure. */
672typedef struct _VBoxSFWrite
673{
674 VBoxGuestHGCMCallInfo callInfo;
675
676 /** pointer, in: SHFLROOT
677 * Root handle of the mapping which name is queried.
678 */
679 HGCMFunctionParameter root;
680
681 /** value64, in:
682 * SHFLHANDLE of object to write to.
683 */
684 HGCMFunctionParameter handle;
685
686 /** value64, in:
687 * Offset to write to.
688 */
689 HGCMFunctionParameter offset;
690
691 /** value64, in/out:
692 * Bytes to write/How many were written.
693 */
694 HGCMFunctionParameter cb;
695
696 /** pointer, in:
697 * Data to write.
698 */
699 HGCMFunctionParameter buffer;
700
701} VBoxSFWrite;
702
703/** Number of parameters */
704#define SHFL_CPARMS_WRITE (5)
705
706
707
708/**
709 * SHFL_FN_LOCK
710 */
711
712/** Lock owner is the HGCM client. */
713
714/** Lock mode bit mask. */
715#define SHFL_LOCK_MODE_MASK (0x3)
716/** Cancel lock on the given range. */
717#define SHFL_LOCK_CANCEL (0x0)
718/** Aquire read only lock. Prevent write to the range. */
719#define SHFL_LOCK_SHARED (0x1)
720/** Aquire write lock. Prevent both write and read to the range. */
721#define SHFL_LOCK_EXCLUSIVE (0x2)
722
723/** Do not wait for lock if it can not be acquired at the time. */
724#define SHFL_LOCK_NOWAIT (0x0)
725/** Wait and acquire lock. */
726#define SHFL_LOCK_WAIT (0x4)
727
728/** Lock the specified range. */
729#define SHFL_LOCK_PARTIAL (0x0)
730/** Lock entire object. */
731#define SHFL_LOCK_ENTIRE (0x8)
732
733/** Parameters structure. */
734typedef struct _VBoxSFLock
735{
736 VBoxGuestHGCMCallInfo callInfo;
737
738 /** pointer, in: SHFLROOT
739 * Root handle of the mapping which name is queried.
740 */
741 HGCMFunctionParameter root;
742
743 /** value64, in:
744 * SHFLHANDLE of object to be locked.
745 */
746 HGCMFunctionParameter handle;
747
748 /** value64, in:
749 * Starting offset of lock range.
750 */
751 HGCMFunctionParameter offset;
752
753 /** value64, in:
754 * Length of range.
755 */
756 HGCMFunctionParameter length;
757
758 /** value32, in:
759 * Lock flags SHFL_LOCK_*.
760 */
761 HGCMFunctionParameter flags;
762
763} VBoxSFLock;
764
765/** Number of parameters */
766#define SHFL_CPARMS_LOCK (5)
767
768
769
770/**
771 * SHFL_FN_FLUSH
772 */
773
774/** Parameters structure. */
775typedef struct _VBoxSFFlush
776{
777 VBoxGuestHGCMCallInfo callInfo;
778
779 /** pointer, in: SHFLROOT
780 * Root handle of the mapping which name is queried.
781 */
782 HGCMFunctionParameter root;
783
784 /** value64, in:
785 * SHFLHANDLE of object to be locked.
786 */
787 HGCMFunctionParameter handle;
788
789} VBoxSFFlush;
790
791/** Number of parameters */
792#define SHFL_CPARMS_FLUSH (2)
793
794/**
795 * SHFL_FN_LIST
796 */
797
798/** Listing information includes variable length RTDIRENTRY[EX] structures. */
799
800/** @todo might be necessary for future. */
801#define SHFL_LIST_NONE 0
802#define SHFL_LIST_RETURN_ONE 1
803
804/** Parameters structure. */
805typedef struct _VBoxSFList
806{
807 VBoxGuestHGCMCallInfo callInfo;
808
809 /** pointer, in: SHFLROOT
810 * Root handle of the mapping which name is queried.
811 */
812 HGCMFunctionParameter root;
813
814 /** value64, in:
815 * SHFLHANDLE of object to be listed.
816 */
817 HGCMFunctionParameter handle;
818
819 /** value32, in:
820 * List flags SHFL_LIST_*.
821 */
822 HGCMFunctionParameter flags;
823
824 /** value32, in/out:
825 * Bytes to be used for listing information/How many bytes were used.
826 */
827 HGCMFunctionParameter cb;
828
829 /** pointer, in/optional
830 * Points to SHFLSTRING buffer that specifies a search path.
831 */
832 HGCMFunctionParameter path;
833
834 /** pointer, out:
835 * Buffer to place listing information to. (SHFLDIRINFO)
836 */
837 HGCMFunctionParameter buffer;
838
839 /** value32, in/out:
840 * Indicates a key where the listing must be resumed.
841 * in: 0 means start from begin of object.
842 * out: 0 means listing completed.
843 */
844 HGCMFunctionParameter resumePoint;
845
846 /** pointer, out:
847 * Number of files returned
848 */
849 HGCMFunctionParameter cFiles;
850
851} VBoxSFList;
852
853/** Number of parameters */
854#define SHFL_CPARMS_LIST (8)
855
856
857
858/**
859 * SHFL_FN_INFORMATION
860 */
861
862/** Mask of Set/Get bit. */
863#define SHFL_INFO_MODE_MASK (0x1)
864/** Get information */
865#define SHFL_INFO_GET (0x0)
866/** Set information */
867#define SHFL_INFO_SET (0x1)
868
869/** Get name of the object. */
870#define SHFL_INFO_NAME (0x2)
871/** Set size of object (extend/trucate); only applies to file objects */
872#define SHFL_INFO_SIZE (0x4)
873/** Get/Set file object info. */
874#define SHFL_INFO_FILE (0x8)
875/** Get volume information. */
876#define SHFL_INFO_VOLUME (0x10)
877
878/** @todo different file info structures */
879
880
881/** Parameters structure. */
882typedef struct _VBoxSFInformation
883{
884 VBoxGuestHGCMCallInfo callInfo;
885
886 /** pointer, in: SHFLROOT
887 * Root handle of the mapping which name is queried.
888 */
889 HGCMFunctionParameter root;
890
891 /** value64, in:
892 * SHFLHANDLE of object to be listed.
893 */
894 HGCMFunctionParameter handle;
895
896 /** value32, in:
897 * SHFL_INFO_*
898 */
899 HGCMFunctionParameter flags;
900
901 /** value32, in/out:
902 * Bytes to be used for information/How many bytes were used.
903 */
904 HGCMFunctionParameter cb;
905
906 /** pointer, in/out:
907 * Information to be set/get (RTFSOBJINFO or SHFLSTRING).
908 * Do not forget to set the RTFSOBJINFO::Attr::enmAdditional for Get operation as well.
909 */
910 HGCMFunctionParameter info;
911
912} VBoxSFInformation;
913
914/** Number of parameters */
915#define SHFL_CPARMS_INFORMATION (5)
916
917
918/**
919 * SHFL_FN_REMOVE
920 */
921
922#define SHFL_REMOVE_FILE (0x1)
923#define SHFL_REMOVE_DIR (0x2)
924
925/** Parameters structure. */
926typedef struct _VBoxSFRemove
927{
928 VBoxGuestHGCMCallInfo callInfo;
929
930 /** pointer, in: SHFLROOT
931 * Root handle of the mapping which name is queried.
932 */
933 HGCMFunctionParameter root;
934
935 /** pointer, in:
936 * Points to SHFLSTRING buffer.
937 */
938 HGCMFunctionParameter path;
939
940 /** value32, in:
941 * remove flags (file/directory)
942 */
943 HGCMFunctionParameter flags;
944
945} VBoxSFRemove;
946
947#define SHFL_CPARMS_REMOVE (3)
948
949
950/**
951 * SHFL_FN_RENAME
952 */
953
954#define SHFL_RENAME_FILE (0x1)
955#define SHFL_RENAME_DIR (0x2)
956#define SHFL_RENAME_REPLACE_IF_EXISTS (0x4)
957
958/** Parameters structure. */
959typedef struct _VBoxSFRename
960{
961 VBoxGuestHGCMCallInfo callInfo;
962
963 /** pointer, in: SHFLROOT
964 * Root handle of the mapping which name is queried.
965 */
966 HGCMFunctionParameter root;
967
968 /** pointer, in:
969 * Points to SHFLSTRING src.
970 */
971 HGCMFunctionParameter src;
972
973 /** pointer, in:
974 * Points to SHFLSTRING dest.
975 */
976 HGCMFunctionParameter dest;
977
978 /** value32, in:
979 * rename flags (file/directory)
980 */
981 HGCMFunctionParameter flags;
982
983} VBoxSFRename;
984
985#define SHFL_CPARMS_RENAME (4)
986
987/**
988 * SHFL_FN_ADD_MAPPING
989 * Host call, no guest structure is used.
990 */
991
992#define SHFL_CPARMS_ADD_MAPPING (3)
993
994/**
995 * SHFL_FN_REMOVE_MAPPING
996 * Host call, no guest structure is used.
997 */
998
999#define SHFL_CPARMS_REMOVE_MAPPING (1)
1000
1001
1002/**
1003 * SHFL_FN_SET_STATUS_LED
1004 * Host call, no guest structure is used.
1005 */
1006
1007#define SHFL_CPARMS_SET_STATUS_LED (1)
1008
1009/** @} */
1010
1011#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