2 * Copyright (c) 2008-2011 Kernel Drivers, LLC.
3 * Copyright (c) 2009-2011 Your File System, Inc.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * - Redistributions of source code must retain the above copyright notice,
11 * this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
14 * this list of conditions and the following disclaimer in the
16 * and/or other materials provided with the distribution.
17 * - Neither the name of Kernel Drivers, LLC nor the names of its
19 * used to endorse or promote products derived from this software without
20 * specific prior written permission from Kernel Drivers, LLC
21 * and Your File System, Inc.
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
25 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
26 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
27 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 #ifndef _AFS_USER_STRUCT_H
37 #define _AFS_USER_STRUCT_H
39 typedef struct _AFS_FILE_ID
55 // This control structure is the request block passed to the filter. The filter will populate the structure
56 // when it requires a request to be handled by the service.
59 typedef struct _AFS_COMM_REQUEST_BLOCK
62 AFSFileID FileId; /* Initialize unused elements to 0 */
66 ULONG RequestIndex; /* Must return to caller */
68 ULONG RequestFlags; /* AFS_REQUEST_FLAG_xxxx */
70 ULONG NameLength; // Length of the name in bytes
72 ULONG DataOffset; // This offset is from the end of the structure, including the name
76 GUID AuthGroup; // Length: sizeof(GUID) */
78 ULONG ResultBufferLength; /* Do not exceed this length in response */
80 LONG QueueCount; // Current outstanding requests in the queue
88 // This is the result block passed back to the redirector after a request has been handled
91 typedef struct _AFS_COMM_RESULT_BLOCK
94 ULONG RequestIndex; /* Must match the AFSCommRequest value */
96 ULONG ResultStatus; /* NTSTATUS_xxx */
98 ULONG ResultBufferLength; /* Not to exceed AFSCommRequest ResultBufferLength */
100 ULONG Reserved; /* To ease Quad Alignment */
107 // Control block passed to IOCTL_AFS_INITIALIZE_REDIRECTOR_DEVICE
110 #define AFS_REDIR_INIT_FLAG_HIDE_DOT_FILES 0x00000001
111 #define AFS_REDIR_INIT_NO_PAGING_FILE 0x00000002
112 #define AFS_REDIR_INIT_FLAG_DISABLE_SHORTNAMES 0x00000004
114 typedef struct _AFS_REDIR_INIT_INFO_CB
119 ULONG MaximumChunkLength; // Maximum RPC length issued so we should limit
120 // requests for data to this length
122 AFSFileID GlobalFileId; // AFS FID of the Global root.afs volume
124 LARGE_INTEGER ExtentCount; // Number of extents in the current data cache
126 ULONG CacheBlockSize; // Size, in bytes, of the current cache block
128 ULONG MaxPathLinkCount; // Number of symlinks / mountpoints that may
129 // be cross during the evaluation of any path
131 ULONG NameArrayLength; // Number of components that should be allocated
132 // in each name array chunk. Name arrays are
133 // dynamic and will be increased in size as
134 // needed by this amount
136 LARGE_INTEGER MemoryCacheOffset; // The offset in the afsd_service process memory
137 // space at which the extents are allocated
138 LARGE_INTEGER MemoryCacheLength; // and the length of the allocated region
140 ULONG DumpFileLocationOffset; // Offset from the beginning of this structure to
141 // the start of the directory where dump files
142 // are to be stored. The path must be fully
143 // qualified such as C:\Windows\Temp
145 ULONG DumpFileLocationLength; // Length, in bytes, of the DumpFileLocation path
147 ULONG CacheFileNameLength; // size, in bytes, of the cache file name
149 WCHAR CacheFileName[ 1]; // Fully qualified cache file name in the form
150 // C:\OPenAFSDir\CacheFile.dat
152 } AFSRedirectorInitInfo;
155 // Directory query CB
158 typedef struct _AFS_DIR_QUERY_CB
161 ULONG_PTR EnumHandle; // If this is 0 then it is a new query,
162 // otherwise it is the FileIndex of the last
168 // Directory enumeration control block
169 // Entries are aligned on a QuadWord boundary
172 typedef struct _AFS_DIR_ENUM_ENTRY
177 ULONG FileIndex; /* Incremented */
179 LARGE_INTEGER Expiration; /* FILETIME */
181 LARGE_INTEGER DataVersion;
183 ULONG FileType; /* File, Dir, MountPoint, Symlink */
185 LARGE_INTEGER CreationTime; /* FILETIME */
187 LARGE_INTEGER LastAccessTime; /* FILETIME */
189 LARGE_INTEGER LastWriteTime; /* FILETIME */
191 LARGE_INTEGER ChangeTime; /* FILETIME */
193 LARGE_INTEGER EndOfFile;
195 LARGE_INTEGER AllocationSize;
197 ULONG FileAttributes; /* NTFS FILE_ATTRIBUTE_xxxx see below */
199 ULONG FileNameLength;
205 ULONG FileNameOffset; /* From beginning of this structure */
207 ULONG TargetNameOffset; /* From beginning of this structure */
209 ULONG TargetNameLength;
211 AFSFileID TargetFileId; /* Target fid for mp's and symlinks */
213 CCHAR ShortNameLength;
217 ULONG NTStatus; /* Error code during enumeration */
219 /* Long Filename and Target (Symlink and MountPoint only) to follow without NULs */
224 typedef struct _AFS_DIR_ENUM_RESP
227 ULONG_PTR EnumHandle;
229 LARGE_INTEGER SnapshotDataVersion; /* DV at time Name/FID list was generated */
231 LARGE_INTEGER CurrentDataVersion; /* DV at time this header was constructed */
233 AFSDirEnumEntry Entry[ 1]; /* Each entry is Quad aligned */
238 // Volume information CB passed in the create request
241 typedef struct _AFS_VOLUME_INFORMATION
244 LARGE_INTEGER TotalAllocationUnits; /* Volume Max Blocks (Partition or Quota) */
246 LARGE_INTEGER AvailableAllocationUnits; /* Volume Blocks Avail (Partition or Quota) */
248 LARGE_INTEGER VolumeCreationTime; /* AFS Last Update - Not Creation */
250 ULONG Characteristics; /* FILE_READ_ONLY_DEVICE (if readonly)
251 * FILE_REMOTE_DEVICE (always)
254 ULONG FileSystemAttributes; /* FILE_CASE_PRESERVED_NAMES (always)
255 FILE_UNICODE_ON_DISK (always) */
257 ULONG SectorsPerAllocationUnit; /* = 1 */
259 ULONG BytesPerSector; /* = 1024 */
261 ULONG CellID; /* AFS Cell ID */
263 ULONG VolumeID; /* AFS Volume ID */
265 ULONG VolumeLabelLength;
267 WCHAR VolumeLabel[128]; /* Volume:Cell */
273 // Volume size information CB passed used to satisfy
274 // FileFsFullSizeInformation and FileFsSizeInformation
277 typedef struct _AFS_VOLUME_SIZE_INFORMATION
280 LARGE_INTEGER TotalAllocationUnits; /* Max Blocks (Quota or Partition) */
282 LARGE_INTEGER AvailableAllocationUnits; /* Blocks Avail (Quota or Partition) */
284 ULONG SectorsPerAllocationUnit; /* = 1 */
286 ULONG BytesPerSector; /* = 1024 */
288 } AFSVolumeSizeInfoCB;
294 typedef struct _AFS_FILE_CREATE_CB
299 LARGE_INTEGER AllocationSize;
301 ULONG FileAttributes;
309 typedef struct _AFS_FILE_CREATE_RESULT_CB
312 LARGE_INTEGER ParentDataVersion;
314 AFSDirEnumEntry DirEnum;
316 } AFSFileCreateResultCB;
322 typedef struct _AFS_FILE_OPEN_CB
333 ULONGLONG Identifier;
337 typedef struct _AFS_FILE_OPEN_RESULT_CB
346 } AFSFileOpenResultCB;
348 typedef struct _AFS_FILE_ACCESS_RELEASE_CB
355 ULONGLONG Identifier;
357 } AFSFileAccessReleaseCB;
360 // IO Interace control blocks for extent processing when performing
361 // queries via the AFS_REQUEST_TYPE_REQUEST_FILE_EXTENTS or synchronous
362 // results from the service
365 typedef struct _AFS_FILE_EXTENT_CB
372 LARGE_INTEGER FileOffset;
374 LARGE_INTEGER CacheOffset;
384 typedef struct _AFS_REQUEST_EXTENTS_CB
389 LARGE_INTEGER ByteOffset;
393 } AFSRequestExtentsCB;
396 // Extent processing when the file system calls the service to
397 // release extents through the AFS_REQUEST_TYPE_RELEASE_FILE_EXTENTS interface
400 typedef struct _AFS_RELEASE_EXTENTS_CB
407 LARGE_INTEGER LastAccessTime;
409 LARGE_INTEGER LastWriteTime;
411 LARGE_INTEGER ChangeTime;
413 LARGE_INTEGER CreateTime;
415 LARGE_INTEGER AllocationSize;
417 AFSFileExtentCB FileExtents[ 1];
419 } AFSReleaseExtentsCB;
422 // This is the control structure used when the service passes the extent
423 // information via the IOCTL_AFS_SET_FILE_EXTENTS interface
426 typedef struct _AFS_SET_FILE_EXTENTS_CB
435 AFSFileExtentCB FileExtents[ 1];
437 } AFSSetFileExtentsCB;
440 // This is the control structure used when the service passes the extent
441 // information via the IOCTL_AFS_RELEASE_FILE_EXTENTS interface
444 #define AFS_RELEASE_EXTENTS_FLAGS_RELEASE_ALL 0x00000001
446 typedef struct _AFS_RELEASE_FILE_EXTENTS_CB
455 LARGE_INTEGER HeldExtentCount;
457 AFSFileExtentCB FileExtents[ 1];
459 } AFSReleaseFileExtentsCB;
462 // These are the control structures that the filesystem returns from a
463 // IOCTL_AFS_RELEASE_FILE_EXTENTS
466 typedef struct _AFS_RELEASE_FILE_EXTENTS_RESULT_FILE_CB
472 GUID AuthGroup; /* Length: sizeof(GUID) */
476 LARGE_INTEGER LastAccessTime;
478 LARGE_INTEGER LastWriteTime;
480 LARGE_INTEGER ChangeTime;
482 LARGE_INTEGER CreateTime;
484 LARGE_INTEGER AllocationSize;
486 AFSFileExtentCB FileExtents[ 1];
488 } AFSReleaseFileExtentsResultFileCB;
490 typedef struct _AFS_RELEASE_FILE_EXTENTS_RESULT_CB
498 AFSReleaseFileExtentsResultFileCB Files[ 1];
500 } AFSReleaseFileExtentsResultCB;
503 typedef struct _AFS_EXTENT_FAILURE_CB
510 GUID AuthGroup; // Length: sizeof(GUID) */
512 } AFSExtentFailureCB;
518 typedef struct _AFS_FILE_UPDATE_CB
523 LARGE_INTEGER LastAccessTime;
525 LARGE_INTEGER LastWriteTime;
527 LARGE_INTEGER ChangeTime;
529 LARGE_INTEGER CreateTime;
531 LARGE_INTEGER AllocationSize;
533 ULONG FileAttributes;
542 // File update CB result
545 typedef struct _AFS_FILE_UPDATE_RESULT_CB
548 LARGE_INTEGER ParentDataVersion;
550 AFSDirEnumEntry DirEnum;
552 } AFSFileUpdateResultCB;
558 typedef struct _AFS_FILE_DELETE_CB
561 AFSFileID ParentId; /* Must be directory */
565 /* File Name and FileID in Common Request Block */
569 typedef struct _AFS_FILE_DELETE_RESULT_CB
572 LARGE_INTEGER ParentDataVersion;
574 } AFSFileDeleteResultCB;
580 typedef struct _AFS_FILE_RENAME_CB
583 AFSFileID SourceParentId; /* Must be directory */
585 AFSFileID TargetParentId; /* Must be directory */
587 /* Source Name and FileID in Common Request Block */
589 USHORT TargetNameLength;
591 WCHAR TargetName[ 1];
595 typedef struct _AFS_FILE_RENAME_RESULT_CB
598 LARGE_INTEGER SourceParentDataVersion;
600 LARGE_INTEGER TargetParentDataVersion;
602 AFSDirEnumEntry DirEnum;
604 } AFSFileRenameResultCB;
611 typedef struct _AFS_FILE_HARDLINK_CB
614 AFSFileID SourceParentId; /* Must be directory */
616 AFSFileID TargetParentId; /* Must be directory */
618 BOOLEAN bReplaceIfExists;
620 /* Source Name and FileID in Common Request Block */
622 USHORT TargetNameLength;
624 WCHAR TargetName[ 1];
628 typedef struct _AFS_FILE_HARDLINK_RESULT_CB
631 LARGE_INTEGER SourceParentDataVersion;
633 LARGE_INTEGER TargetParentDataVersion;
635 AFSDirEnumEntry DirEnum;
637 } AFSFileHardLinkResultCB;
641 // Control structures for AFS_REQUEST_TYPE_EVAL_TARGET_BY_ID
642 // and AFS_REQUEST_TYPE_EVAL_TARGET_BY_NAME
644 // The response to these requests is a AFSDirEnumEntry
647 typedef struct _AFS_FILE_EVAL_TARGET_CB
655 typedef struct _AFS_FILE_EVAL_RESULT_CB
658 LARGE_INTEGER ParentDataVersion;
660 AFSDirEnumEntry DirEnum;
662 } AFSFileEvalResultCB;
666 // Control structure for read and write requests through the PIOCtl interface
668 // CommRequest FileId field contains the active directory
670 typedef struct _AFS_PIOCTL_IO_CB
680 } AFSPIOCtlIORequestCB;
683 // The returned information for the IO Request
686 typedef struct _AFS_PIOCTL_IO_RESULT_CB
689 ULONG BytesProcessed;
691 } AFSPIOCtlIOResultCB;
695 // Control structure for open and close requests through the PIOCtl interface
697 // CommRequest FileId field contains the active directory
699 // There is no return structure.
701 typedef struct _AFS_PIOCTL_OPEN_CLOSE_CB
708 } AFSPIOCtlOpenCloseRequestCB;
711 // Cache invalidation control block
714 typedef struct _AFS_INVALIDATE_CACHE_CB
725 } AFSInvalidateCacheCB;
728 // Network Status Control Block
731 typedef struct _AFS_NETWORK_STATUS_CB
736 } AFSNetworkStatusCB;
739 // Volume Status Control Block
742 typedef struct _AFS_VOLUME_STATUS_CB
745 AFSFileID FileID; // only cell and volume fields are set
752 typedef struct _AFS_SYSNAME
755 ULONG Length; /* bytes */
757 WCHAR String[AFS_MAX_SYSNAME_LENGTH];
762 // SysName Notification Control Block
763 // Sent as the buffer with IOCTL_AFS_SYSNAME_NOTIFICATION
764 // There is no response
767 typedef struct _AFS_SYSNAME_NOTIFICATION_CB
774 AFSSysName SysNames[1];
776 } AFSSysNameNotificationCB;
780 // File System Status Query Control Block
781 // Received as a response to IOCTL_AFS_STATUS_REQUEST
783 typedef struct _AFS_DRIVER_STATUS_RESPONSE_CB
786 ULONG Status; // bit flags - see below
788 } AFSDriverStatusRespCB;
791 #define AFS_DRIVER_STATUS_READY 0
792 #define AFS_DRIVER_STATUS_NOT_READY 1
793 #define AFS_DRIVER_STATUS_NO_SERVICE 2
796 // Byte Range Lock Request
798 typedef struct _AFS_BYTE_RANGE_LOCK_REQUEST
802 LARGE_INTEGER Offset;
804 LARGE_INTEGER Length;
806 } AFSByteRangeLockRequest;
808 #define AFS_BYTE_RANGE_LOCK_TYPE_SHARED 0
809 #define AFS_BYTE_RANGE_LOCK_TYPE_EXCL 1
813 // Byte Range Lock Request Control Block
815 // Set ProcessId and FileId in the Comm Request Block
817 typedef struct _AFS_BYTE_RANGE_LOCK_REQUEST_CB
824 AFSByteRangeLockRequest Request[1];
826 } AFSByteRangeLockRequestCB;
829 // Byte Range Lock Result
831 typedef struct _AFS_BYTE_RANGE_LOCK_RESULT
836 LARGE_INTEGER Offset;
838 LARGE_INTEGER Length;
842 } AFSByteRangeLockResult;
845 // Byte Range Lock Results Control Block
848 typedef struct _AFS_BYTE_RANGE_LOCK_RESULT_CB
855 AFSByteRangeLockResult Result[1];
857 } AFSByteRangeLockResultCB;
860 // Set Byte Range Lock Results Control Block
863 typedef struct _AFS_SET_BYTE_RANGE_LOCK_RESULT_CB
872 AFSByteRangeLockResult Result[1];
874 } AFSSetByteRangeLockResultCB;
878 // Byte Range Unlock Request Control Block
881 typedef struct _AFS_BYTE_RANGE_UNLOCK_CB
888 AFSByteRangeLockRequest Request[1];
890 } AFSByteRangeUnlockRequestCB;
894 // Byte Range Unlock Request Control Block
897 typedef struct _AFS_BYTE_RANGE_UNLOCK_RESULT_CB
902 AFSByteRangeLockResult Result[1];
904 } AFSByteRangeUnlockResultCB;
908 // Control structure for read and write requests through the PIPE interface
910 // CommRequest FileId field contains the active directory
912 typedef struct _AFS_PIPE_IO_CB
920 } AFSPipeIORequestCB; // For read requests the buffer is mapped in the request cb block.
921 // For write requests, the buffer immediately follows this structure
924 // The returned information for the Pipe IO Request. Note that this is
925 // only returned in the write request. Read request info is returned in
929 typedef struct _AFS_PIPE_IO_RESULT_CB
932 ULONG BytesProcessed;
937 // Control structure for set and query info requests through the PIPE interface
940 typedef struct _AFS_PIPE_INFO_CB
947 ULONG InformationClass;
951 } AFSPipeInfoRequestCB; // For query info requests the buffer is mapped in the request cb block.
952 // For set info requests, the buffer immediately follows this structure
955 // Control structure for open and close requests through the Pipe interface
957 // CommRequest FileId field contains the active directory
959 // There is no return structure.
961 typedef struct _AFS_PIPE_OPEN_CLOSE_CB
968 } AFSPipeOpenCloseRequestCB;
972 // Hold Fid Request Control Block
975 typedef struct _AFS_HOLD_FID_REQUEST_CB
980 AFSFileID FileID[ 1];
982 } AFSHoldFidRequestCB;
985 typedef struct _AFS_FID_RESULT
994 typedef struct _AFS_HOLD_FID_RESULT_CB
999 AFSFidResult Result[ 1];
1001 } AFSHoldFidResultCB;
1005 // Release Fid Request Control Block
1008 typedef struct _AFS_RELEASE_FID_REQUEST_CB
1013 AFSFileID FileID[ 1];
1015 } AFSReleaseFidRequestCB;
1017 typedef struct _AFS_RELEASE_FID_RESULT_CB
1022 AFSFidResult Result[ 1];
1024 } AFSReleaseFidResultCB;
1031 typedef struct _AFS_FILE_CLEANUP_CB
1036 LARGE_INTEGER LastAccessTime;
1038 LARGE_INTEGER LastWriteTime;
1040 LARGE_INTEGER ChangeTime;
1042 LARGE_INTEGER CreateTime;
1044 LARGE_INTEGER AllocationSize;
1046 ULONG FileAttributes;
1048 ULONGLONG ProcessId;
1052 ULONGLONG Identifier;
1056 typedef struct _AFS_FILE_CLEANUP_RESULT_CB
1059 LARGE_INTEGER ParentDataVersion;
1061 } AFSFileCleanupResultCB;
1065 // Trace configuration cb
1068 typedef struct _AFS_DEBUG_TRACE_CONFIG_CB
1075 ULONG TraceBufferLength;
1082 // Object Status Information request
1085 typedef struct _AFS_REDIR_GET_OBJECT_STATUS_CB
1090 USHORT FileNameLength;
1094 } AFSGetStatusInfoCB;
1096 typedef struct _AFS_REDIR_OBJECT_STATUS_CB
1101 AFSFileID TargetFileId;
1103 LARGE_INTEGER Expiration; /* FILETIME */
1105 LARGE_INTEGER DataVersion;
1107 ULONG FileType; /* File, Dir, MountPoint, Symlink */
1111 LARGE_INTEGER CreationTime; /* FILETIME */
1113 LARGE_INTEGER LastAccessTime; /* FILETIME */
1115 LARGE_INTEGER LastWriteTime; /* FILETIME */
1117 LARGE_INTEGER ChangeTime; /* FILETIME */
1119 ULONG FileAttributes; /* NTFS FILE_ATTRIBUTE_xxxx see below */
1121 LARGE_INTEGER EndOfFile;
1123 LARGE_INTEGER AllocationSize;
1132 // Auth Group (Process and Thread) Processing
1134 // afsredir.sys implements a set of generic Authentication Group
1135 // operations that can be executed by processes. The model supports
1136 // one or more authentication groups per process. A process may switch
1137 // the active AuthGroup for any thread to any other AuthGroup the process
1138 // is a member of. However, processes cannot assign itself to an
1139 // AuthGroup that it is not presently a member of. A process can reset
1140 // its AuthGroup to the SID-AuthGroup or can create a new AuthGroup that
1141 // has not previously been used.
1143 // IOCTL_AFS_AUTHGROUP_CREATE_AND_SET
1144 // Creates a new AuthGroup and either activates it for
1145 // the process or the current thread. If set as the
1146 // new process AuthGroup, the prior AuthGroup list is
1149 // IOCTL_AFS_AUTHGROUP_QUERY
1150 // Returns a list of the AuthGroup GUIDS associated
1151 // with the current process, the current process GUID,
1152 // and the current thread GUID.
1154 // IOCTL_AFS_AUTHGROUP_SET
1155 // Permits the current AuthGroup for the process or
1156 // thread to be set to the specified GUID. The GUID
1157 // must be in the list of current values for the process.
1159 // IOCTL_AFS_AUTHGROUP_RESET
1160 // Resets the current AuthGroup for the process or
1161 // thread to the SID-AuthGroup
1163 // IOCTL_AFS_AUTHGROUP_SID_CREATE
1164 // Given a SID as input, assigns a new AuthGroup GUID.
1165 // (May only be executed by LOCAL_SYSTEM or the active SID)
1167 // IOCTL_AFS_AUTHGROUP_SID_QUERY
1168 // Given a SID as input, returns the associated AuthGroup GUID.
1170 // IOCTL_AFS_AUTHGROUP_LOGON_CREATE
1171 // Given a logon Session as input, assigns a new AuthGroup GUID.
1172 // (May only be executed by LOCAL_SYSTEM.)
1174 // New processes inherit only the active AuthGroup at the time of process
1175 // creation. Either that of the active thread (if set) or the process.
1176 // All of the other AuthGroups associated with a parent process are
1181 // Auth Group processing flags
1184 #define AFS_PAG_FLAGS_SET_AS_ACTIVE 0x00000001 // If set, the newly created authgroup is set to the active group
1185 #define AFS_PAG_FLAGS_THREAD_AUTH_GROUP 0x00000002 // If set, the request is targeted for the thread not the process
1187 typedef struct _AFS_AUTH_GROUP_REQUEST
1190 USHORT SIDLength; // If zero the SID of the caller is used
1192 ULONG SessionId; // If -1 the session id of the caller is used
1196 GUID AuthGroup; // The auth group for certain requests
1198 WCHAR SIDString[ 1];
1200 } AFSAuthGroupRequestCB;
1203 // Reparse tag AFS Specific information buffer
1206 #define OPENAFS_SUBTAG_MOUNTPOINT 1
1207 #define OPENAFS_SUBTAG_SYMLINK 2
1208 #define OPENAFS_SUBTAG_UNC 3
1210 #define OPENAFS_MOUNTPOINT_TYPE_NORMAL L'#'
1211 #define OPENAFS_MOUNTPOINT_TYPE_RW L'%'
1213 typedef struct _AFS_REPARSE_TAG_INFORMATION
1223 USHORT MountPointCellLength;
1224 USHORT MountPointVolumeLength;
1230 BOOLEAN RelativeLink;
1231 USHORT SymLinkTargetLength;
1237 USHORT UNCTargetLength;
1242 } AFSReparseTagInfo;
1244 #endif /* _AFS_USER_STRUCT_H */