2 * Copyright (c) 2008, 2009, 2010, 2011 Kernel Drivers, LLC.
3 * Copyright (c) 2009, 2010, 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 names of Kernel Drivers, LLC and Your File System, Inc.
18 * nor the names of their contributors may be used to endorse or promote
19 * products derived from this software without specific prior written
20 * permission from Kernel Drivers, LLC and Your File System, Inc.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
25 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
26 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 #ifndef _AFS_DEFINES_H
36 #define _AFS_DEFINES_H
42 // Conditional compiled code
45 //#define AFS_FLUSH_PAGES_SYNCHRONOUSLY 1 // Flush pages as we mark them dirty
53 //#define AFS_VALIDATE_EXTENTS 0
65 #ifndef FsRtlSetupAdvancedHeader
67 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
68 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
70 #define FsRtlSetupAdvancedHeader( _advhdr, _fmutx ) \
72 SetFlag( (_advhdr)->Flags, FSRTL_FLAG_ADVANCED_HEADER ); \
73 SetFlag( (_advhdr)->Flags2, FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS ); \
74 InitializeListHead( &(_advhdr)->FilterContexts ); \
75 if ((_fmutx) != NULL) { \
76 (_advhdr)->FastMutex = (_fmutx); \
84 (*PAFSRtlSetSaclSecurityDescriptor)( PSECURITY_DESCRIPTOR SecurityDescriptor,
87 BOOLEAN SaclDefaulted);
91 (*PAFSRtlSetGroupSecurityDescriptor)( IN PSECURITY_DESCRIPTOR SecurityDescriptor,
92 IN PSID Group OPTIONAL,
93 IN BOOLEAN GroupDefaulted);
96 // Worker thread count
99 #define AFS_WORKER_COUNT 16
100 #define AFS_IO_WORKER_COUNT 8
103 // Worker thread states
106 #define AFS_WORKER_INITIALIZED 0x0001
107 #define AFS_WORKER_PROCESS_REQUESTS 0x0002
110 // Worker Thread codes
113 #define AFS_WORK_UNUSED_1 0x0001
114 #define AFS_WORK_FLUSH_FCB 0x0002
115 #define AFS_WORK_UNUSED_3 0x0003
116 #define AFS_WORK_UNUSED_4 0x0004
117 #define AFS_WORK_UNUSED_5 0x0005
118 #define AFS_WORK_ENUMERATE_GLOBAL_ROOT 0x0006
119 #define AFS_WORK_INVALIDATE_OBJECT 0x0007
120 #define AFS_WORK_START_IOS 0x0008
121 #define AFS_WORK_DEFERRED_WRITE 0x0009
124 // Worker request flags
127 #define AFS_SYNCHRONOUS_REQUEST 0x00000001
133 #define AFS_FCB_FLAG_FILE_MODIFIED 0x00000001
134 #define AFS_FCB_FILE_CLOSED 0x00000002
135 #define AFS_FCB_FLAG_UPDATE_WRITE_TIME 0x00000004
136 #define AFS_FCB_FLAG_UPDATE_CHANGE_TIME 0x00000008
137 #define AFS_FCB_FLAG_UPDATE_ACCESS_TIME 0x00000010
138 #define AFS_FCB_FLAG_UPDATE_CREATE_TIME 0x00000020
139 #define AFS_FCB_FLAG_UPDATE_LAST_WRITE_TIME 0x00000040
140 #define AFS_FCB_FLAG_PURGE_ON_CLOSE 0x00000080
143 // Object information flags
146 #define AFS_OBJECT_FLAGS_OBJECT_INVALID 0x00000001
147 #define AFS_OBJECT_FLAGS_VERIFY 0x00000002
148 #define AFS_OBJECT_FLAGS_NOT_EVALUATED 0x00000004
149 #define AFS_OBJECT_FLAGS_DIRECTORY_ENUMERATED 0x00000008
150 #define AFS_OBJECT_FLAGS_DELETED 0x00000010
151 #define AFS_OBJECT_INSERTED_HASH_TREE 0x00000020
152 #define AFS_OBJECT_INSERTED_VOLUME_LIST 0x00000040
153 #define AFS_OBJECT_HELD_IN_SERVICE 0x00000080
154 #define AFS_OBJECT_ROOT_VOLUME 0x00000100
155 #define AFS_OBJECT_FLAGS_VERIFY_DATA 0x00000200
156 #define AFS_OBJECT_FLAGS_PARENT_FID 0x00000400
159 // Object information reference count reasons
162 #define AFS_OBJECT_REFERENCE_DIRENTRY 0
163 #define AFS_OBJECT_REFERENCE_CHILD 1
164 #define AFS_OBJECT_REFERENCE_INVALIDATION 2
165 #define AFS_OBJECT_REFERENCE_GLOBAL 3
166 #define AFS_OBJECT_REFERENCE_EXTENTS 4
167 #define AFS_OBJECT_REFERENCE_WORKER 5
168 #define AFS_OBJECT_REFERENCE_STATUS 6
169 #define AFS_OBJECT_REFERENCE_FIND 7
170 #define AFS_OBJECT_REFERENCE_FS_REQ 8
171 #define AFS_OBJECT_REFERENCE_MAX 9
174 // Volume reference count reasons
177 #define AFS_VOLUME_REFERENCE_INVALID 0
178 #define AFS_VOLUME_REFERENCE_EXTENTS 1
179 #define AFS_VOLUME_REFERENCE_GLOBAL_ROOT 2
180 #define AFS_VOLUME_REFERENCE_INVALIDATE 3
181 #define AFS_VOLUME_REFERENCE_FILE_ATTRS 4
182 #define AFS_VOLUME_REFERENCE_EVAL_ROOT 5
183 #define AFS_VOLUME_REFERENCE_GET_OBJECT 6
184 #define AFS_VOLUME_REFERENCE_MOUNTPT 7
185 #define AFS_VOLUME_REFERENCE_BUILD_ROOT 8
186 #define AFS_VOLUME_REFERENCE_LOCATE_NAME 9
187 #define AFS_VOLUME_REFERENCE_PARSE_NAME 10
188 #define AFS_VOLUME_REFERENCE_MAX 12
191 // Define one second in terms of 100 nS units
194 #define AFS_ONE_SECOND 10000000
195 #define AFS_ONE_MILLISECOND 10000
196 #define AFS_ONE_MICROSECOND 10
199 // Fcb lifetime in seconds
202 #define AFS_OBJECT_LIFETIME 20 * AFS_ONE_SECOND
204 #define AFS_EXTENT_REQUEST_TIME 10 * AFS_ONE_SECOND
207 // How big to make the runs
209 #define AFS_MAX_STACK_IO_RUNS 5
212 #define FlagOn(_F,_SF) ((_F) & (_SF))
215 #ifndef BooleanFlagOn
216 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
220 #define SetFlag(_F,_SF) ((_F) |= (_SF))
224 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
227 #define QuadAlign(Ptr) ( \
228 ((((ULONG)(Ptr)) + 7) & 0xfffffff8) \
231 #define CRC32_POLYNOMIAL 0xEDB88320L
233 #define AFS_SERVER_FLUSH_DELAY (5LL * AFS_ONE_SECOND)
234 #define AFS_SERVER_PURGE_DELAY (300LL * AFS_ONE_SECOND)
236 // PURGE_SLEEP is the number of PURGE_DELAYS we wait before we will unilaterally
237 // give back extents.
239 // If the Service asks us, we will start at PURGE_SLEEP of delays and then work back
241 #define AFS_SERVER_PURGE_SLEEP 6
243 #define AFS_DIR_ENUM_BUFFER_LEN (16 * 1024)
246 // IS_BYTE_OFFSET_WRITE_TO_EOF
247 // liOffset - should be from Irp.StackLocation.Parameters.Write.ByteOffset
248 // this macro checks to see if the Offset Large_Integer points to the
249 // special constant value which denotes to start the write at EndOfFile
251 #define IS_BYTE_OFFSET_WRITE_TO_EOF(liOffset) \
252 (((liOffset).LowPart == FILE_WRITE_TO_END_OF_FILE) \
253 && ((liOffset).HighPart == 0xFFFFFFFF))
256 // Ccb Directory enum flags
259 #define CCB_FLAG_DIR_OF_DIRS_ONLY 0x00000001
260 #define CCB_FLAG_FULL_DIRECTORY_QUERY 0x00000002
261 #define CCB_FLAG_MASK_CONTAINS_WILD_CARDS 0x00000004
262 #define CCB_FLAG_FREE_FULL_PATHNAME 0x00000008
263 #define CCB_FLAG_RETURN_RELATIVE_ENTRIES 0x00000010
264 #define CCB_FLAG_DIRECTORY_QUERY_MAPPED 0x00000020
265 #define CCB_FLAG_MASK_PIOCTL_QUERY 0x00000040
266 #define CCB_FLAG_MASK_OPENED_REPARSE_POINT 0x00000080
267 #define CCB_FLAG_INSERTED_CCB_LIST 0x00000100
268 #define CCB_FLAG_DIRECTORY_QUERY_DIRECT_QUERY 0x00000200
274 #define AFS_DIR_RELEASE_NAME_BUFFER 0x00000001
276 #define AFS_DIR_ENTRY_CASE_INSENSTIVE_LIST_HEAD 0x00000004
277 #define AFS_DIR_ENTRY_NOT_IN_PARENT_TREE 0x00000008
278 #define AFS_DIR_ENTRY_INSERTED_ENUM_LIST 0x00000010
279 #define AFS_DIR_ENTRY_FAKE 0x00000020
280 #define AFS_DIR_RELEASE_TARGET_NAME_BUFFER 0x00000040
281 #define AFS_DIR_ENTRY_VALID 0x00000080
282 #define AFS_DIR_ENTRY_PENDING_DELETE 0x00000100
283 #define AFS_DIR_ENTRY_DELETED 0x00000200
284 #define AFS_DIR_ENTRY_PIPE_SERVICE 0x00000400
285 #define AFS_DIR_ENTRY_IPC 0x00000800
286 #define AFS_DIR_ENTRY_INSERTED_SHORT_NAME 0x00001000
289 // Network provider errors
292 #define WN_SUCCESS 0L
293 #define WN_ALREADY_CONNECTED 85L
294 #define WN_OUT_OF_MEMORY 8L
295 #define WN_NOT_CONNECTED 2250L
296 #define WN_BAD_NETNAME 67L
298 #define RESOURCE_CONNECTED 0x00000001
299 #define RESOURCE_GLOBALNET 0x00000002
300 #define RESOURCE_REMEMBERED 0x00000003
301 #define RESOURCE_RECENT 0x00000004
302 #define RESOURCE_CONTEXT 0x00000005
304 #define RESOURCETYPE_ANY 0x00000000
305 #define RESOURCETYPE_DISK 0x00000001
306 #define RESOURCETYPE_PRINT 0x00000002
307 #define RESOURCETYPE_RESERVED 0x00000008
308 #define RESOURCETYPE_UNKNOWN 0xFFFFFFFF
310 #define RESOURCEUSAGE_CONNECTABLE 0x00000001
311 #define RESOURCEUSAGE_CONTAINER 0x00000002
312 #define RESOURCEUSAGE_NOLOCALDEVICE 0x00000004
313 #define RESOURCEUSAGE_SIBLING 0x00000008
314 #define RESOURCEUSAGE_ATTACHED 0x00000010
315 #define RESOURCEUSAGE_ALL (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED)
316 #define RESOURCEUSAGE_RESERVED 0x80000000
318 #define RESOURCEDISPLAYTYPE_GENERIC 0x00000000
319 #define RESOURCEDISPLAYTYPE_DOMAIN 0x00000001
320 #define RESOURCEDISPLAYTYPE_SERVER 0x00000002
321 #define RESOURCEDISPLAYTYPE_SHARE 0x00000003
322 #define RESOURCEDISPLAYTYPE_FILE 0x00000004
323 #define RESOURCEDISPLAYTYPE_GROUP 0x00000005
324 #define RESOURCEDISPLAYTYPE_NETWORK 0x00000006
325 #define RESOURCEDISPLAYTYPE_ROOT 0x00000007
326 #define RESOURCEDISPLAYTYPE_SHAREADMIN 0x00000008
327 #define RESOURCEDISPLAYTYPE_DIRECTORY 0x00000009
328 #define RESOURCEDISPLAYTYPE_TREE 0x0000000A
329 #define RESOURCEDISPLAYTYPE_NDSCONTAINER 0x0000000B
332 // Method for determining the different control device open requests
335 #define AFS_CONTROL_INSTANCE 0x00000001
336 #define AFS_REDIRECTOR_INSTANCE 0x00000002
342 #define AFS_EXTENT_DIRTY 0x00000001
345 // Extent skip list sizes
347 #define AFS_NUM_EXTENT_LISTS 3
350 // Extents skip lists
352 // We use constant sizes.
354 #define AFS_EXTENT_SIZE (4*1024)
355 #define AFS_EXTENTS_LIST 0
357 // A max of 64 extents in ther first skip list
358 #define AFS_EXTENT_SKIP1_BITS 6
361 // Then 128 bits in the second skip list
362 #define AFS_EXTENT_SKIP2_BITS 7
365 // This means that the top list skips in steps of 2^25 (=12+6+7) which
366 // is 32 Mb. It is to be expected that files which are massively
367 // larger that this will not be fully mapped.
369 #define AFS_EXTENT_SKIP1_SIZE (AFS_EXTENT_SIZE << AFS_EXTENT_SKIP1_BITS)
370 #define AFS_EXTENT_SKIP2_SIZE (AFS_EXTENT_SKIP1_SIZE << AFS_EXTENT_SKIP2_BITS)
372 #define AFS_EXTENTS_MASKS { (AFS_EXTENT_SIZE-1), \
373 (AFS_EXTENT_SKIP1_SIZE-1), \
374 (AFS_EXTENT_SKIP2_SIZE-1) }
377 // Maximum count to release at a time
380 #define AFS_MAXIMUM_EXTENT_RELEASE_COUNT 100
382 #define AFS_DIRTY_CHUNK_THRESHOLD 64
384 // {41966169-3FD7-4392-AFE4-E6A9D0A92C72} - generated using guidgen.exe
385 DEFINE_GUID (GUID_SD_AFS_REDIRECTOR_CONTROL_OBJECT,
386 0x41966169, 0x3fd7, 0x4392, 0xaf, 0xe4, 0xe6, 0xa9, 0xd0, 0xa9, 0x2c, 0x72);
392 #define AFS_DBG_LOG_LENGTH 256
398 #define AFS_DBG_LOG_WRAPPED 0x00000001
404 #define AFS_CONNECTION_FLAG_GLOBAL_SHARE 0x00000001
410 #define AFS_PROCESS_FLAG_IS_64BIT 0x00000001
413 // Maximum number of special share names
416 #define AFS_SPECIAL_SHARE_NAME_COUNT_MAX 10
422 #define AFS_NAME_ARRAY_FLAG_ROOT_ELEMENT 0x00000001
423 #define AFS_NAME_ARRAY_FLAG_REDIRECTION_ELEMENT 0x00000002
426 // Maximum recursion depth
429 #define AFS_MAX_RECURSION_COUNT 20
432 // LocateNameEntry flags
435 #define AFS_LOCATE_FLAGS_SUBSTITUTE_NAME 0x00000001
436 #define AFS_LOCATE_FLAGS_NO_MP_TARGET_EVAL 0x00000002
437 #define AFS_LOCATE_FLAGS_NO_SL_TARGET_EVAL 0x00000004
438 #define AFS_LOCATE_FLAGS_NO_DFS_LINK_EVAL 0x00000008
444 #define AFS_PARSE_FLAG_FREE_FILE_BUFFER 0x00000001
445 #define AFS_PARSE_FLAG_ROOT_ACCESS 0x00000002
448 // Reparse tag information
452 // Tag allocated to OpenAFS for DFS by Microsoft
453 // GUID: EF21A155-5C92-4470-AB3B-370403D96369
456 #ifndef IO_REPARSE_TAG_OPENAFS_DFS
457 #define IO_REPARSE_TAG_OPENAFS_DFS 0x00000037L
460 #ifndef IO_REPARSE_TAG_SURROGATE
461 #define IO_REPARSE_TAG_SURROGATE 0x20000000L
464 // {EF21A155-5C92-4470-AB3B-370403D96369}
465 DEFINE_GUID (GUID_AFS_REPARSE_GUID,
466 0xEF21A155, 0x5C92, 0x4470, 0xAB, 0x3B, 0x37, 0x04, 0x03, 0xD9, 0x63, 0x69);
469 // Enumeration constants
472 #define AFS_DIR_ENTRY_INITIAL_DIR_INDEX (ULONG)-3
473 #define AFS_DIR_ENTRY_INITIAL_ROOT_INDEX (ULONG)-1
475 #define AFS_DIR_ENTRY_PIOCTL_INDEX (ULONG)-3
476 #define AFS_DIR_ENTRY_DOT_INDEX (ULONG)-2
477 #define AFS_DIR_ENTRY_DOT_DOT_INDEX (ULONG)-1
480 // Library state flags
483 #define AFS_REDIR_LIB_FLAGS_NONPERSISTENT_CACHE 0x00000001
485 #endif /* _AFS_DEFINES_H */