Windows: Consolidate Device Flags
[openafs.git] / src / WINNT / afsrdr / kernel / fs / Include / AFSDefines.h
1 /*
2  * Copyright (c) 2008, 2009, 2010, 2011 Kernel Drivers, LLC.
3  * Copyright (c) 2009, 2010, 2011 Your File System, Inc.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
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,
14  *   this list of conditions and the following disclaimer in the
15  *   documentation
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.
21  *
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.
33  */
34
35 #ifndef _AFS_DEFINES_H
36 #define _AFS_DEFINES_H
37 //
38 // File: AFSDefines.h
39 //
40
41 //
42 // Registry names
43 //
44
45 #define AFS_REG_DEBUG_FLAGS              L"DebugFlags"
46 #define AFS_REG_TRACE_LEVEL              L"TraceLevel"
47 #define AFS_REG_TRACE_SUBSYSTEM          L"TraceSubsystem"
48 #define AFS_REG_TRACE_BUFFER_LENGTH      L"TraceBufferSize"  // in KB
49 #define AFS_REG_MAX_DIRTY                L"MaxDirtyMb"
50 #define AFS_REG_MAX_IO                   L"MaxIOMb"
51 #define AFS_NETBIOS_NAME                 L"NetbiosName"
52 #define AFS_REG_SHUTDOWN_STATUS          L"ShutdownStatus"
53 #define AFS_REG_REQUIRE_CLEAN_SHUTDOWN   L"RequireCleanShutdown"
54
55 //
56 // Control Device name
57 //
58
59 #define AFS_CONTROL_DEVICE_NAME     L"\\Device\\AFSControlDevice"
60 #define AFS_SYMLINK_NAME            L"\\??\\AFSRedirector"
61
62 //
63 // How big to make the runs
64 //
65 #define AFS_MAX_STACK_IO_RUNS              5
66
67 #ifndef FlagOn
68 #define FlagOn(_F,_SF)        ((_F) & (_SF))
69 #endif
70
71 #ifndef BooleanFlagOn
72 #define BooleanFlagOn(F,SF)   ((BOOLEAN)(((F) & (SF)) != 0))
73 #endif
74
75 #ifndef SetFlag
76 #define SetFlag(_F,_SF)       ((_F) |= (_SF))
77 #endif
78
79 #ifndef ClearFlag
80 #define ClearFlag(_F,_SF)     ((_F) &= ~(_SF))
81 #endif
82
83 #define QuadAlign(Ptr) (                \
84     ((((ULONG)(Ptr)) + 7) & 0xfffffff8) \
85     )
86
87 #define CRC32_POLYNOMIAL     0xEDB88320L;
88
89 //
90 // Define one second in terms of 100 nS units
91 //
92
93 #define AFS_ONE_SECOND          10000000
94
95 #define AFS_SERVER_FLUSH_DELAY  30
96 #define AFS_SERVER_PURGE_DELAY  60
97 //
98 // PURGE_SLEEP is the number of PURGE_DELAYS we wait before we will unilaterally
99 // give back extents.
100 //
101 // If the Service asks us, we will start at PURGE_SLEEP of delays and then work back
102 //
103 #define AFS_SERVER_PURGE_SLEEP  6
104
105 //
106 // Read ahead granularity
107 //
108
109 #define READ_AHEAD_GRANULARITY      0x10000     // 64KB
110
111 #define AFS_DIR_ENUM_BUFFER_LEN   (16 * 1024)
112
113 //
114 // IS_BYTE_OFFSET_WRITE_TO_EOF
115 // liOffset - should be from Irp.StackLocation.Parameters.Write.ByteOffset
116 // this macro checks to see if the Offset Large_Integer points to the
117 // special constant value which denotes to start the write at EndOfFile
118 //
119 #define IS_BYTE_OFFSET_WRITE_TO_EOF(liOffset) \
120     (((liOffset).LowPart == FILE_WRITE_TO_END_OF_FILE) \
121       && ((liOffset).HighPart == 0xFFFFFFFF))
122
123 //
124 // Ccb Directory enum flags
125 //
126
127 #define CCB_FLAG_DIR_OF_DIRS_ONLY           0x00000001
128 #define CCB_FLAG_FULL_DIRECTORY_QUERY       0x00000002
129 #define CCB_FLAG_MASK_CONTAINS_WILD_CARDS   0x00000004
130 #define CCB_FLAG_FREE_FULL_PATHNAME         0x00000008
131 #define CCB_FLAG_RETURN_RELATIVE_ENTRIES    0x00000010
132 #define CCB_FLAGS_DIRECTORY_QUERY_MAPPED    0x00000020
133
134 //
135 // DirEntry flags
136 //
137
138 #define AFS_DIR_RELEASE_NAME_BUFFER             0x00000001
139 #define AFS_DIR_ENTRY_CASE_INSENSTIVE_LIST_HEAD 0x00000004
140 #define AFS_DIR_ENTRY_NOT_IN_PARENT_TREE        0x00000008
141 // Use this entry
142 #define AFS_DIR_ENTRY_FAKE                      0x00000020
143 #define AFS_DIR_RELEASE_TARGET_NAME_BUFFER      0x00000040
144 #define AFS_DIR_ENTRY_VALID                     0x00000080
145 #define AFS_DIR_ENTRY_PENDING_DELETE            0x00000100
146 #define AFS_DIR_ENTRY_DELETED                   0x00000200
147 #define AFS_DIR_ENTRY_SERVER_SERVICE            0x00000400
148 #define AFS_DIR_ENTRY_WORKSTATION_SERVICE       0x00000800
149 #define AFS_DIR_ENTRY_IPC                       0x00001000
150
151 //
152 // Network provider errors
153 //
154
155 #define WN_SUCCESS                              0L
156 #define WN_ALREADY_CONNECTED                    85L
157 #define WN_OUT_OF_MEMORY                        8L
158 #define WN_NOT_CONNECTED                        2250L
159 #define WN_BAD_NETNAME                          67L
160
161 #define RESOURCE_CONNECTED      0x00000001
162 #define RESOURCE_GLOBALNET      0x00000002
163 #define RESOURCE_REMEMBERED     0x00000003
164 #define RESOURCE_RECENT         0x00000004
165 #define RESOURCE_CONTEXT        0x00000005
166
167 #define RESOURCETYPE_ANY        0x00000000
168 #define RESOURCETYPE_DISK       0x00000001
169 #define RESOURCETYPE_PRINT      0x00000002
170 #define RESOURCETYPE_RESERVED   0x00000008
171 #define RESOURCETYPE_UNKNOWN    0xFFFFFFFF
172
173 #define RESOURCEUSAGE_CONNECTABLE   0x00000001
174 #define RESOURCEUSAGE_CONTAINER     0x00000002
175 #define RESOURCEUSAGE_NOLOCALDEVICE 0x00000004
176 #define RESOURCEUSAGE_SIBLING       0x00000008
177 #define RESOURCEUSAGE_ATTACHED      0x00000010
178 #define RESOURCEUSAGE_ALL           (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED)
179 #define RESOURCEUSAGE_RESERVED      0x80000000
180
181 #define RESOURCEDISPLAYTYPE_GENERIC        0x00000000
182 #define RESOURCEDISPLAYTYPE_DOMAIN         0x00000001
183 #define RESOURCEDISPLAYTYPE_SERVER         0x00000002
184 #define RESOURCEDISPLAYTYPE_SHARE          0x00000003
185 #define RESOURCEDISPLAYTYPE_FILE           0x00000004
186 #define RESOURCEDISPLAYTYPE_GROUP          0x00000005
187 #define RESOURCEDISPLAYTYPE_NETWORK        0x00000006
188 #define RESOURCEDISPLAYTYPE_ROOT           0x00000007
189 #define RESOURCEDISPLAYTYPE_SHAREADMIN     0x00000008
190 #define RESOURCEDISPLAYTYPE_DIRECTORY      0x00000009
191 #define RESOURCEDISPLAYTYPE_TREE           0x0000000A
192 #define RESOURCEDISPLAYTYPE_NDSCONTAINER   0x0000000B
193
194 //
195 // Method for determining the different control device open requests
196 //
197
198 #define AFS_CONTROL_INSTANCE            0x00000001
199 #define AFS_REDIRECTOR_INSTANCE         0x00000002
200
201 //
202 // Extent flags
203 //
204
205 #define AFS_EXTENT_DIRTY                0x00000001
206
207 //
208 // Extent skip list sizes
209 //
210 #define AFS_NUM_EXTENT_LISTS    3
211
212 //
213 // Extents skip lists
214 //
215 // We use constant sizes.
216 //
217 #define AFS_EXTENT_SIZE         (4*1024)
218 #define AFS_EXTENTS_LIST        0
219 //
220 // A max of 64 extents in ther first skip list
221 #define AFS_EXTENT_SKIP1_BITS   6
222
223 //
224 // Then 128 bits in the second skip list
225 #define AFS_EXTENT_SKIP2_BITS   7
226
227 //
228 // This means that the top list skips in steps of 2^25 (=12+6+7) which
229 // is 32 Mb.  It is to be expected that files which are massively
230 // larger that this will not be fully mapped.
231 //
232 #define AFS_EXTENT_SKIP1_SIZE (AFS_EXTENT_SIZE << AFS_EXTENT_SKIP1_BITS)
233 #define AFS_EXTENT_SKIP2_SIZE (AFS_EXTENT_SKIP1_SIZE << AFS_EXTENT_SKIP2_BITS)
234
235 #define AFS_EXTENTS_MASKS { (AFS_EXTENT_SIZE-1),       \
236                             (AFS_EXTENT_SKIP1_SIZE-1), \
237                             (AFS_EXTENT_SKIP2_SIZE-1) }
238
239 //
240 // Maximum count to release at a time
241 //
242
243 #define AFS_MAXIMUM_EXTENT_RELEASE_COUNT        100
244
245 // {41966169-3FD7-4392-AFE4-E6A9D0A92C72}  - generated using guidgen.exe
246 DEFINE_GUID (GUID_SD_AFS_REDIRECTOR_CONTROL_OBJECT,
247         0x41966169, 0x3fd7, 0x4392, 0xaf, 0xe4, 0xe6, 0xa9, 0xd0, 0xa9, 0x2c, 0x72);
248
249 //
250 // Debug log length
251 //
252
253 #define AFS_DBG_LOG_LENGTH              256
254
255 //
256 // Debug log flags
257 //
258
259 #define AFS_DBG_LOG_WRAPPED             0x00000001
260
261 //
262 // Connection flags
263 //
264
265 #define AFS_CONNECTION_FLAG_GLOBAL_SHARE        0x00000001
266
267 //
268 // Process CB flags
269 //
270
271 #define AFS_PROCESS_FLAG_IS_64BIT           0x00000001
272 #define AFS_PROCESS_FLAG_ACE_SET            0x00000002
273 #define AFS_PROCESS_LOCAL_SYSTEM_AUTH       0x00000004
274
275 //
276 // Auth group flags
277 //
278
279 #define AFS_AUTHGROUP_ACTIVE_SESSION        0x00000001
280
281 //
282 // Maximum number of special share names
283 //
284
285 #define AFS_SPECIAL_SHARE_NAME_COUNT_MAX    10
286
287 //
288 // Reparse tag information
289 //
290
291 //
292 //  Tag allocated to OpenAFS for DFS by Microsoft
293 //  GUID: EF21A155-5C92-4470-AB3B-370403D96369
294 //
295
296 #ifndef IO_REPARSE_TAG_OPENAFS_DFS
297 #define IO_REPARSE_TAG_OPENAFS_DFS              0x00000037L
298 #endif
299
300 //  {EF21A155-5C92-4470-AB3B-370403D96369}
301 DEFINE_GUID (GUID_AFS_REPARSE_GUID,
302         0xEF21A155, 0x5C92, 0x4470, 0xAB, 0x3B, 0x37, 0x04, 0x03, 0xD9, 0x63, 0x69);
303
304 //
305 // Enumeration constants
306 //
307
308 #define AFS_DIR_ENTRY_INITIAL_DIR_INDEX   (ULONG)-3
309 #define AFS_DIR_ENTRY_INITIAL_ROOT_INDEX  (ULONG)-1
310
311 #define AFS_DIR_ENTRY_DOT_INDEX           (ULONG)-2
312 #define AFS_DIR_ENTRY_DOT_DOT_INDEX       (ULONG)-1
313
314 //
315 // Library flags
316 //
317
318 #define AFS_LIBRARY_LOADED                  0x00000001
319 #define AFS_LIBRARY_QUEUE_CANCELLED         0x00000002
320
321 //
322 // Custom ACE Information
323 //
324
325 // {7E5D0E2F-7500-45df-857A-C0C8A2CC6BE8}
326 static const GUID AFSSidGuid = { 0x7f5d0e2f, 0x7500, 0x45df, { 0x85, 0x7a, 0xc0, 0xc8, 0xa2, 0xcc, 0x6b, 0xe8 } };
327
328 // size of our special DACL SID...  S-1-8-GuidDword1-GuidDword2-GuidDword3-GuidDword4-AuthGroupGUIDDword1-AuthGroupGUIDDword2-AuthGroupGUIDDword3-AuthGroupGUIDDword4
329 // Revision (1) + SubAuthorityCount (1) + IdentifierAuthority (6) + GUID (16) + AuthGruopGUID( 16)
330 #define AFS_DACL_SID_LENGTH 40
331
332 typedef
333 NTSTATUS
334 (*PAFSSetInformationToken) (
335     __in HANDLE TokenHandle,
336     __in TOKEN_INFORMATION_CLASS TokenInformationClass,
337     __in_bcount(TokenInformationLength) PVOID TokenInformation,
338     __in ULONG TokenInformationLength
339     );
340
341 #endif /* _AFS_DEFINES_H */