VirtualBox

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

Last change on this file since 18523 was 18122, checked in by vboxsync, 16 years ago

Shared folders: attributes access flags (Windows guest).

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