2 * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Kernel Drivers, LLC.
3 * Copyright (c) 2009, 2010, 2011, 2012, 2013 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
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - Neither the name of Kernel Drivers, LLC nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission from
18 * Kernel Drivers, LLC and Your File System, Inc.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
24 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #ifndef _AFS_USER_STRUCT_H
34 #define _AFS_USER_STRUCT_H
36 typedef struct _AFS_FILE_ID
52 // This control structure is the request block passed to the filter. The filter will populate the structure
53 // when it requires a request to be handled by the service.
56 typedef struct _AFS_COMM_REQUEST_BLOCK
59 AFSFileID FileId; /* Initialize unused elements to 0 */
63 ULONG RequestIndex; /* Must return to caller */
65 ULONG RequestFlags; /* AFS_REQUEST_FLAG_xxxx */
67 ULONG NameLength; /* Length of the name in bytes */
69 ULONG DataOffset; /* This offset is from the end of the structure, including the name */
73 GUID AuthGroup; /* Length: sizeof(GUID) */
75 ULONG ResultBufferLength; /* Do not exceed this length in response */
77 LONG QueueCount; /* Current outstanding requests in the queue */
85 // This is the result block passed back to the redirector after a request has been handled
88 typedef struct _AFS_COMM_RESULT_BLOCK
91 ULONG RequestIndex; /* Must match the AFSCommRequest value */
93 ULONG ResultStatus; /* NTSTATUS_xxx */
95 ULONG ResultBufferLength; /* Not to exceed AFSCommRequest ResultBufferLength */
97 ULONG Authenticated; /* Tokens or No? */
104 // Control block passed to IOCTL_AFS_INITIALIZE_REDIRECTOR_DEVICE
107 #define AFS_REDIR_INIT_FLAG_HIDE_DOT_FILES 0x00000001
108 #define AFS_REDIR_INIT_NO_PAGING_FILE 0x00000002
109 #define AFS_REDIR_INIT_FLAG_DISABLE_SHORTNAMES 0x00000004
110 #define AFS_REDIR_INIT_PERFORM_SERVICE_IO 0x00000008
112 typedef struct _AFS_REDIR_INIT_INFO_CB
117 ULONG MaximumChunkLength; // Maximum RPC length issued so we should limit
118 // requests for data to this length
120 AFSFileID GlobalFileId; // AFS FID of the Global root.afs volume
122 LARGE_INTEGER ExtentCount; // Number of extents in the current data cache
124 ULONG CacheBlockSize; // Size, in bytes, of the current cache block
126 ULONG MaxPathLinkCount; // Number of symlinks / mountpoints that may
127 // be cross during the evaluation of any path
129 ULONG NameArrayLength; // Number of components that should be allocated
130 // in each name array chunk. Name arrays are
131 // dynamic and will be increased in size as
132 // needed by this amount
134 ULONG GlobalReparsePointPolicy; // One or more of AFS_REPARSE_POINT_VALID_POLICY_FLAGS
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 */
271 WCHAR Cell[128]; /* Cell */
277 // Volume size information CB passed used to satisfy
278 // FileFsFullSizeInformation and FileFsSizeInformation
281 typedef struct _AFS_VOLUME_SIZE_INFORMATION
284 LARGE_INTEGER TotalAllocationUnits; /* Max Blocks (Quota or Partition) */
286 LARGE_INTEGER AvailableAllocationUnits; /* Blocks Avail (Quota or Partition) */
288 ULONG SectorsPerAllocationUnit; /* = 1 */
290 ULONG BytesPerSector; /* = 1024 */
292 } AFSVolumeSizeInfoCB;
298 typedef struct _AFS_FILE_CREATE_CB
303 LARGE_INTEGER AllocationSize;
305 ULONG FileAttributes;
313 typedef struct _AFS_FILE_CREATE_RESULT_CB
316 LARGE_INTEGER ParentDataVersion;
318 AFSDirEnumEntry DirEnum;
320 } AFSFileCreateResultCB;
326 typedef struct _AFS_FILE_OPEN_CB
337 ULONGLONG Identifier;
341 typedef struct _AFS_FILE_OPEN_RESULT_CB
348 } AFSFileOpenResultCB;
350 typedef struct _AFS_FILE_ACCESS_RELEASE_CB
357 ULONGLONG Identifier;
359 } AFSFileAccessReleaseCB;
362 // IO Interace control blocks for extent processing when performing
363 // queries via the AFS_REQUEST_TYPE_REQUEST_FILE_EXTENTS or synchronous
364 // results from the service
367 typedef struct _AFS_FILE_EXTENT_CB
374 LARGE_INTEGER FileOffset;
376 LARGE_INTEGER CacheOffset;
386 typedef struct _AFS_REQUEST_EXTENTS_CB
391 LARGE_INTEGER ByteOffset;
395 } AFSRequestExtentsCB;
398 // Extent processing when the file system calls the service to
399 // release extents through the AFS_REQUEST_TYPE_RELEASE_FILE_EXTENTS interface
402 typedef struct _AFS_RELEASE_EXTENTS_CB
409 LARGE_INTEGER LastAccessTime;
411 LARGE_INTEGER LastWriteTime;
413 LARGE_INTEGER ChangeTime;
415 LARGE_INTEGER CreateTime;
417 LARGE_INTEGER AllocationSize;
419 AFSFileExtentCB FileExtents[ 1];
421 } AFSReleaseExtentsCB;
424 // This is the control structure used when the service passes the extent
425 // information via the IOCTL_AFS_SET_FILE_EXTENTS interface
428 typedef struct _AFS_SET_FILE_EXTENTS_CB
437 AFSFileExtentCB FileExtents[ 1];
439 } AFSSetFileExtentsCB;
442 // This is the control structure used when the service passes the extent
443 // information via the IOCTL_AFS_RELEASE_FILE_EXTENTS interface
446 #define AFS_RELEASE_EXTENTS_FLAGS_RELEASE_ALL 0x00000001
448 typedef struct _AFS_RELEASE_FILE_EXTENTS_CB
457 LARGE_INTEGER HeldExtentCount;
459 AFSFileExtentCB FileExtents[ 1];
461 } AFSReleaseFileExtentsCB;
464 // These are the control structures that the filesystem returns from a
465 // IOCTL_AFS_RELEASE_FILE_EXTENTS
468 typedef struct _AFS_RELEASE_FILE_EXTENTS_RESULT_FILE_CB
474 GUID AuthGroup; /* Length: sizeof(GUID) */
478 LARGE_INTEGER LastAccessTime;
480 LARGE_INTEGER LastWriteTime;
482 LARGE_INTEGER ChangeTime;
484 LARGE_INTEGER CreateTime;
486 LARGE_INTEGER AllocationSize;
488 AFSFileExtentCB FileExtents[ 1];
490 } AFSReleaseFileExtentsResultFileCB;
492 typedef struct _AFS_RELEASE_FILE_EXTENTS_RESULT_CB
500 AFSReleaseFileExtentsResultFileCB Files[ 1];
502 } AFSReleaseFileExtentsResultCB;
505 typedef struct _AFS_EXTENT_FAILURE_CB
512 GUID AuthGroup; // Length: sizeof(GUID) */
514 } AFSExtentFailureCB;
520 typedef struct _AFS_FILE_UPDATE_CB
525 LARGE_INTEGER LastAccessTime;
527 LARGE_INTEGER LastWriteTime;
529 LARGE_INTEGER ChangeTime;
531 LARGE_INTEGER CreateTime;
533 LARGE_INTEGER AllocationSize;
535 ULONG FileAttributes;
544 // File update CB result
547 typedef struct _AFS_FILE_UPDATE_RESULT_CB
550 LARGE_INTEGER ParentDataVersion;
552 AFSDirEnumEntry DirEnum;
554 } AFSFileUpdateResultCB;
560 typedef struct _AFS_FILE_DELETE_CB
563 AFSFileID ParentId; /* Must be directory */
567 /* File Name and FileID in Common Request Block */
571 typedef struct _AFS_FILE_DELETE_RESULT_CB
574 LARGE_INTEGER ParentDataVersion;
576 } AFSFileDeleteResultCB;
582 typedef struct _AFS_FILE_RENAME_CB
585 AFSFileID SourceParentId; /* Must be directory */
587 AFSFileID TargetParentId; /* Must be directory */
589 /* Source Name and FileID in Common Request Block */
591 USHORT TargetNameLength;
593 WCHAR TargetName[ 1];
597 typedef struct _AFS_FILE_RENAME_RESULT_CB
600 LARGE_INTEGER SourceParentDataVersion;
602 LARGE_INTEGER TargetParentDataVersion;
604 AFSDirEnumEntry DirEnum;
606 } AFSFileRenameResultCB;
613 typedef struct _AFS_FILE_HARDLINK_CB
616 AFSFileID SourceParentId; /* Must be directory */
618 AFSFileID TargetParentId; /* Must be directory */
620 BOOLEAN bReplaceIfExists;
622 /* Source Name and FileID in Common Request Block */
624 USHORT TargetNameLength;
626 WCHAR TargetName[ 1];
630 typedef struct _AFS_FILE_HARDLINK_RESULT_CB
633 LARGE_INTEGER SourceParentDataVersion;
635 LARGE_INTEGER TargetParentDataVersion;
637 AFSDirEnumEntry DirEnum;
639 } AFSFileHardLinkResultCB;
646 typedef struct _AFS_CREATE_SYMLINK_CB
649 AFSFileID ParentId; /* Must be directory */
651 /* Source Name and FileID in Common Request Block */
653 USHORT TargetNameLength;
655 WCHAR TargetName[ 1];
657 } AFSCreateSymlinkCB;
659 typedef struct _AFS_CREATE_SYMLINK_RESULT_CB
662 LARGE_INTEGER ParentDataVersion;
664 AFSDirEnumEntry DirEnum;
666 } AFSCreateSymlinkResultCB;
670 // Control structures for AFS_REQUEST_TYPE_EVAL_TARGET_BY_ID
671 // and AFS_REQUEST_TYPE_EVAL_TARGET_BY_NAME
673 // The response to these requests is a AFSDirEnumEntry
676 typedef struct _AFS_FILE_EVAL_TARGET_CB
684 typedef struct _AFS_FILE_EVAL_RESULT_CB
687 LARGE_INTEGER ParentDataVersion;
689 AFSDirEnumEntry DirEnum;
691 } AFSFileEvalResultCB;
695 // Control structure for read and write requests through the PIOCtl interface
697 // CommRequest FileId field contains the active directory
699 typedef struct _AFS_PIOCTL_IO_CB
709 } AFSPIOCtlIORequestCB;
712 // The returned information for the IO Request
715 typedef struct _AFS_PIOCTL_IO_RESULT_CB
718 ULONG BytesProcessed;
720 } AFSPIOCtlIOResultCB;
724 // Control structure for open and close requests through the PIOCtl interface
726 // CommRequest FileId field contains the active directory
728 // There is no return structure.
730 typedef struct _AFS_PIOCTL_OPEN_CLOSE_CB
737 } AFSPIOCtlOpenCloseRequestCB;
740 // Cache invalidation control block
743 typedef struct _AFS_INVALIDATE_CACHE_CB
754 } AFSInvalidateCacheCB;
757 // Network Status Control Block
760 typedef struct _AFS_NETWORK_STATUS_CB
765 } AFSNetworkStatusCB;
768 // Volume Status Control Block
771 typedef struct _AFS_VOLUME_STATUS_CB
774 AFSFileID FileID; // only cell and volume fields are set
781 typedef struct _AFS_SYSNAME
784 ULONG Length; /* bytes */
786 WCHAR String[AFS_MAX_SYSNAME_LENGTH];
791 // SysName Notification Control Block
792 // Sent as the buffer with IOCTL_AFS_SYSNAME_NOTIFICATION
793 // There is no response
796 typedef struct _AFS_SYSNAME_NOTIFICATION_CB
803 AFSSysName SysNames[1];
805 } AFSSysNameNotificationCB;
809 // File System Status Query Control Block
810 // Received as a response to IOCTL_AFS_STATUS_REQUEST
812 typedef struct _AFS_DRIVER_STATUS_RESPONSE_CB
815 ULONG Status; // bit flags - see below
817 } AFSDriverStatusRespCB;
820 #define AFS_DRIVER_STATUS_READY 0
821 #define AFS_DRIVER_STATUS_NOT_READY 1
822 #define AFS_DRIVER_STATUS_NO_SERVICE 2
825 // Byte Range Lock Request
827 typedef struct _AFS_BYTE_RANGE_LOCK_REQUEST
831 LARGE_INTEGER Offset;
833 LARGE_INTEGER Length;
835 } AFSByteRangeLockRequest;
837 #define AFS_BYTE_RANGE_LOCK_TYPE_SHARED 0
838 #define AFS_BYTE_RANGE_LOCK_TYPE_EXCL 1
842 // Byte Range Lock Request Control Block
844 // Set ProcessId and FileId in the Comm Request Block
846 typedef struct _AFS_BYTE_RANGE_LOCK_REQUEST_CB
853 AFSByteRangeLockRequest Request[1];
855 } AFSByteRangeLockRequestCB;
858 // Byte Range Lock Result
860 typedef struct _AFS_BYTE_RANGE_LOCK_RESULT
865 LARGE_INTEGER Offset;
867 LARGE_INTEGER Length;
871 } AFSByteRangeLockResult;
874 // Byte Range Lock Results Control Block
877 typedef struct _AFS_BYTE_RANGE_LOCK_RESULT_CB
884 AFSByteRangeLockResult Result[1];
886 } AFSByteRangeLockResultCB;
889 // Set Byte Range Lock Results Control Block
892 typedef struct _AFS_SET_BYTE_RANGE_LOCK_RESULT_CB
901 AFSByteRangeLockResult Result[1];
903 } AFSSetByteRangeLockResultCB;
907 // Byte Range Unlock Request Control Block
910 typedef struct _AFS_BYTE_RANGE_UNLOCK_CB
917 AFSByteRangeLockRequest Request[1];
919 } AFSByteRangeUnlockRequestCB;
923 // Byte Range Unlock Request Control Block
926 typedef struct _AFS_BYTE_RANGE_UNLOCK_RESULT_CB
931 AFSByteRangeLockResult Result[1];
933 } AFSByteRangeUnlockResultCB;
937 // Control structure for read and write requests through the PIPE interface
939 // CommRequest FileId field contains the active directory
941 typedef struct _AFS_PIPE_IO_CB
949 } AFSPipeIORequestCB; // For read requests the buffer is mapped in the request cb block.
950 // For write requests, the buffer immediately follows this structure
953 // The returned information for the Pipe IO Request. Note that this is
954 // only returned in the write request. Read request info is returned in
958 typedef struct _AFS_PIPE_IO_RESULT_CB
961 ULONG BytesProcessed;
966 // Control structure for set and query info requests through the PIPE interface
969 typedef struct _AFS_PIPE_INFO_CB
976 ULONG InformationClass;
980 } AFSPipeInfoRequestCB; // For query info requests the buffer is mapped in the request cb block.
981 // For set info requests, the buffer immediately follows this structure
984 // Control structure for open and close requests through the Pipe interface
986 // CommRequest FileId field contains the active directory
988 // There is no return structure.
990 typedef struct _AFS_PIPE_OPEN_CLOSE_CB
997 } AFSPipeOpenCloseRequestCB;
1001 // Hold Fid Request Control Block
1004 typedef struct _AFS_HOLD_FID_REQUEST_CB
1009 AFSFileID FileID[ 1];
1011 } AFSHoldFidRequestCB;
1014 typedef struct _AFS_FID_RESULT
1023 typedef struct _AFS_HOLD_FID_RESULT_CB
1028 AFSFidResult Result[ 1];
1030 } AFSHoldFidResultCB;
1034 // Release Fid Request Control Block
1037 typedef struct _AFS_RELEASE_FID_REQUEST_CB
1042 AFSFileID FileID[ 1];
1044 } AFSReleaseFidRequestCB;
1046 typedef struct _AFS_RELEASE_FID_RESULT_CB
1051 AFSFidResult Result[ 1];
1053 } AFSReleaseFidResultCB;
1060 typedef struct _AFS_FILE_CLEANUP_CB
1065 LARGE_INTEGER LastAccessTime;
1067 LARGE_INTEGER LastWriteTime;
1069 LARGE_INTEGER ChangeTime;
1071 LARGE_INTEGER CreateTime;
1073 LARGE_INTEGER AllocationSize;
1075 ULONG FileAttributes;
1077 ULONGLONG ProcessId;
1081 ULONGLONG Identifier;
1085 typedef struct _AFS_FILE_CLEANUP_RESULT_CB
1088 LARGE_INTEGER ParentDataVersion;
1090 } AFSFileCleanupResultCB;
1094 // Trace configuration cb
1097 typedef struct _AFS_DEBUG_TRACE_CONFIG_CB
1104 ULONG TraceBufferLength;
1111 // Object Status Information request
1114 typedef struct _AFS_REDIR_GET_OBJECT_STATUS_CB
1119 USHORT FileNameLength;
1123 } AFSGetStatusInfoCB;
1125 typedef struct _AFS_REDIR_OBJECT_STATUS_CB
1130 AFSFileID TargetFileId;
1132 LARGE_INTEGER Expiration; /* FILETIME */
1134 LARGE_INTEGER DataVersion;
1136 ULONG FileType; /* File, Dir, MountPoint, Symlink */
1140 LARGE_INTEGER CreationTime; /* FILETIME */
1142 LARGE_INTEGER LastAccessTime; /* FILETIME */
1144 LARGE_INTEGER LastWriteTime; /* FILETIME */
1146 LARGE_INTEGER ChangeTime; /* FILETIME */
1148 ULONG FileAttributes; /* NTFS FILE_ATTRIBUTE_xxxx see below */
1150 LARGE_INTEGER EndOfFile;
1152 LARGE_INTEGER AllocationSize;
1161 // Auth Group (Process and Thread) Processing
1163 // afsredir.sys implements a set of generic Authentication Group
1164 // operations that can be executed by processes. The model supports
1165 // one or more authentication groups per process. A process may switch
1166 // the active AuthGroup for any thread to any other AuthGroup the process
1167 // is a member of. However, processes cannot assign itself to an
1168 // AuthGroup that it is not presently a member of. A process can reset
1169 // its AuthGroup to the SID-AuthGroup or can create a new AuthGroup that
1170 // has not previously been used.
1172 // IOCTL_AFS_AUTHGROUP_CREATE_AND_SET
1173 // Creates a new AuthGroup and either activates it for
1174 // the process or the current thread. If set as the
1175 // new process AuthGroup, the prior AuthGroup list is
1178 // IOCTL_AFS_AUTHGROUP_QUERY
1179 // Returns a list of the AuthGroup GUIDS associated
1180 // with the current process, the current process GUID,
1181 // and the current thread GUID.
1183 // IOCTL_AFS_AUTHGROUP_SET
1184 // Permits the current AuthGroup for the process or
1185 // thread to be set to the specified GUID. The GUID
1186 // must be in the list of current values for the process.
1188 // IOCTL_AFS_AUTHGROUP_RESET
1189 // Resets the current AuthGroup for the process or
1190 // thread to the SID-AuthGroup
1192 // IOCTL_AFS_AUTHGROUP_SID_CREATE
1193 // Given a SID as input, assigns a new AuthGroup GUID.
1194 // (May only be executed by LOCAL_SYSTEM or the active SID)
1196 // IOCTL_AFS_AUTHGROUP_SID_QUERY
1197 // Given a SID as input, returns the associated AuthGroup GUID.
1199 // IOCTL_AFS_AUTHGROUP_LOGON_CREATE
1200 // Given a logon Session as input, assigns a new AuthGroup GUID.
1201 // (May only be executed by LOCAL_SYSTEM.)
1203 // New processes inherit only the active AuthGroup at the time of process
1204 // creation. Either that of the active thread (if set) or the process.
1205 // All of the other AuthGroups associated with a parent process are
1210 // Auth Group processing flags
1213 #define AFS_PAG_FLAGS_SET_AS_ACTIVE 0x00000001 // If set, the newly created authgroup is set to the active group
1214 #define AFS_PAG_FLAGS_THREAD_AUTH_GROUP 0x00000002 // If set, the request is targeted for the thread not the process
1216 typedef struct _AFS_AUTH_GROUP_REQUEST
1219 USHORT SIDLength; // If zero the SID of the caller is used
1221 ULONG SessionId; // If -1 the session id of the caller is used
1225 GUID AuthGroup; // The auth group for certain requests
1227 WCHAR SIDString[ 1];
1229 } AFSAuthGroupRequestCB;
1232 // Reparse tag AFS Specific information buffer
1235 #define OPENAFS_SUBTAG_MOUNTPOINT 1
1236 #define OPENAFS_SUBTAG_SYMLINK 2
1237 #define OPENAFS_SUBTAG_UNC 3
1239 #define OPENAFS_MOUNTPOINT_TYPE_NORMAL L'#'
1240 #define OPENAFS_MOUNTPOINT_TYPE_RW L'%'
1242 typedef struct _AFS_REPARSE_TAG_INFORMATION
1252 USHORT MountPointCellLength;
1253 USHORT MountPointVolumeLength;
1259 BOOLEAN RelativeLink;
1260 USHORT SymLinkTargetLength;
1266 USHORT UNCTargetLength;
1271 } AFSReparseTagInfo;
1277 typedef struct _AFS_FILE_IO_CB
1280 LARGE_INTEGER IOOffset;
1284 void *MappedIOBuffer; // Mapped buffer for access by service
1286 void *SystemIOBuffer; // Service should not access this pointer
1288 void *SystemIOBufferMdl; // The service should not access this pointer
1290 LARGE_INTEGER LastAccessTime;
1292 LARGE_INTEGER LastWriteTime;
1294 LARGE_INTEGER ChangeTime;
1296 LARGE_INTEGER CreateTime;
1298 LARGE_INTEGER EndOfFile;
1302 typedef struct _AFS_FILE_IO_RESULT_CB
1307 LARGE_INTEGER DataVersion;
1309 LARGE_INTEGER Expiration; /* FILETIME */
1311 } AFSFileIOResultCB;
1313 typedef struct _AFS_SET_REPARSE_POINT_POLICY
1320 } AFSSetReparsePointPolicyCB;
1322 typedef struct _AFS_GET_REPARSE_POINT_POLICY
1329 } AFSGetReparsePointPolicyCB;
1331 #endif /* _AFS_USER_STRUCT_H */