rx: Remove RX_CALL_BUSY
[openafs.git] / src / WINNT / afsrdr / common / AFSUserDefines.h
1 /*
2  * Copyright (c) 2008-2011 Kernel Drivers, LLC.
3  * Copyright (c) 2009-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 name of Kernel Drivers, LLC nor the names of its
18  *   contributors may be
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.
22  *
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.
34  */
35
36 #ifndef _AFS_USER_DEFINE_H
37 #define _AFS_USER_DEFINE_H
38
39 //
40 // Symbolic link name
41 //
42
43 #define AFS_SYMLINK                    "\\\\.\\AFSRedirector"
44 #define AFS_SYMLINK_W                 L"\\\\.\\AFSRedirector"
45
46 #define AFS_PIOCTL_FILE_INTERFACE_NAME  L"_._AFS_IOCTL_._"
47 #define AFS_GLOBAL_ROOT_SHARE_NAME      L"ALL"
48
49 //
50 // Payload buffer length
51 //
52
53 #define AFS_PAYLOAD_BUFFER_SIZE       (16 * 1024)
54
55
56 //
57 // Request types
58 //
59
60 #define AFS_REQUEST_TYPE_DIR_ENUM                0x00000001
61 #define AFS_REQUEST_TYPE_CREATE_FILE             0x00000002
62 #define AFS_REQUEST_TYPE_REQUEST_FILE_EXTENTS    0x00000003
63 #define AFS_REQUEST_TYPE_RELEASE_FILE_EXTENTS    0x00000004
64 #define AFS_REQUEST_TYPE_UPDATE_FILE             0x00000005
65 #define AFS_REQUEST_TYPE_DELETE_FILE             0x00000006
66 #define AFS_REQUEST_TYPE_RENAME_FILE             0x00000007
67 #define AFS_REQUEST_TYPE_FLUSH_FILE              0x00000008
68 #define AFS_REQUEST_TYPE_OPEN_FILE               0x00000009
69 #define AFS_REQUEST_TYPE_EVAL_TARGET_BY_ID       0x0000000A
70 #define AFS_REQUEST_TYPE_EVAL_TARGET_BY_NAME     0x0000000B
71 #define AFS_REQUEST_TYPE_PIOCTL_READ             0x0000000C
72 #define AFS_REQUEST_TYPE_PIOCTL_WRITE            0x0000000D
73 #define AFS_REQUEST_TYPE_PIOCTL_OPEN             0x0000000E
74 #define AFS_REQUEST_TYPE_PIOCTL_CLOSE            0x0000000F
75 #define AFS_REQUEST_TYPE_BYTE_RANGE_LOCK         0x00000010  // Takes AFSByteRangeLockRequestCB as INPUT
76 #define AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK       0x00000011  // Takes AFSByteRangeUnlockRequestCB as INPUT
77 #define AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK_ALL   0x00000012  // Takes AFSByteRangeUnlockRequestCB as INPUT
78 #define AFS_REQUEST_TYPE_GET_VOLUME_INFO         0x00000013
79 #define AFS_REQUEST_TYPE_HOLD_FID                0x00000014
80 #define AFS_REQUEST_TYPE_RELEASE_FID             0x00000015
81 #define AFS_REQUEST_TYPE_PIPE_TRANSCEIVE         0x00000016
82 #define AFS_REQUEST_TYPE_PIPE_READ               0x00000017
83 #define AFS_REQUEST_TYPE_PIPE_WRITE              0x00000018
84 #define AFS_REQUEST_TYPE_PIPE_OPEN               0x00000019
85 #define AFS_REQUEST_TYPE_PIPE_CLOSE              0x0000001A
86 #define AFS_REQUEST_TYPE_PIPE_QUERY_INFO         0x0000001B
87 #define AFS_REQUEST_TYPE_PIPE_SET_INFO           0x0000001C
88 #define AFS_REQUEST_TYPE_CLEANUP_PROCESSING      0x0000001D
89 #define AFS_REQUEST_TYPE_CREATE_LINK             0x0000001E
90 #define AFS_REQUEST_TYPE_CREATE_MOUNTPOINT       0x0000001F
91 #define AFS_REQUEST_TYPE_CREATE_SYMLINK          0x00000020
92 #define AFS_REQUEST_TYPE_RELEASE_FILE_ACCESS     0x00000021
93 #define AFS_REQUEST_TYPE_GET_VOLUME_SIZE_INFO    0x00000022
94 #define AFS_REQUEST_TYPE_HARDLINK_FILE           0x00000023
95 #define AFS_REQUEST_TYPE_PROCESS_READ_FILE       0x00000024
96 #define AFS_REQUEST_TYPE_PROCESS_WRITE_FILE      0x00000025
97
98 //
99 // Request Flags, these are passed up from the file system
100 //
101
102 #define AFS_REQUEST_FLAG_SYNCHRONOUS             0x00000001 // The service must call back through the
103                                                             // IOCTL_AFS_PROCESS_IRP_RESULT IOCtl to ack
104                                                             // the request with a response. The absense of
105                                                             // this flag indicates no call should be made to
106                                                             // the IOCTL_AFS_PROCESS_IRP_RESULT IOCtl and if a
107                                                             // response is required for the call it is to be made
108                                                             // through an IOCtl call
109
110 #define AFS_REQUEST_FLAG_CASE_SENSITIVE          0x00000002
111
112 #define AFS_REQUEST_FLAG_WOW64                   0x00000004 // On 64-bit systems, set if the request
113                                                             // originated from a WOW64 process
114
115 #define AFS_REQUEST_FLAG_FAST_REQUEST            0x00000008 // if this flag is set, the cache manager
116                                                             // responds to the request using a minimum
117                                                             // of file server interaction
118
119 #define AFS_REQUEST_FLAG_HOLD_FID                0x00000010 // if this flag is set, the cache manager
120                                                             // maintains a reference count on the
121                                                             // evaluated file object just as if
122                                                             // AFS_REQUEST_TYPE_HOLD_FID was issued.
123                                                             // The reference count must be released
124                                                             // using AFS_REQUEST_TYPE_RELEASE_FID.
125                                                             // This flag is only valid on
126                                                             // AFS_REQUEST_TYPE_EVALUATE_BY_NAME,
127                                                             // AFS_REQUEST_TYPE_EVALUATE_BY_ID,
128                                                             // AFS_REQUEST_TYPE_CREATE_FILE, and
129                                                             // AFS_REQUEST_TYPE_OPEN_FILE.
130
131 #define AFS_REQUEST_FLAG_FLUSH_FILE              0x00000020 // Passed as a flag to the AFS_REQUEST_TYPE_CLEANUP_PROCESSING
132                                                             // request when the last handle is closed.  This flag tells the
133                                                             // to flush all dirty data before returning.
134
135 #define AFS_REQUEST_FLAG_FILE_DELETED            0x00000040 // Passed as a flag to the AFS_REQUEST_TYPE_CLEANUP_PROCESSING
136                                                             // request to indicate the file has been marked for deletion.
137
138 #define AFS_REQUEST_FLAG_BYTE_RANGE_UNLOCK_ALL   0x00000080 // Passed as a flag to the AFS_REQUEST_TYPE_CLEANUP_PROCESSING
139                                                             // request to indicate to release all BR locks on the file for the
140                                                             // given process.
141
142 #define AFS_REQUEST_FLAG_CHECK_ONLY              0x00000100 // Do not perform the action, just check if the action is possible
143                                                             // Only used with AFS_REQUEST_TYPE_DELETE_FILE.
144
145 #define AFS_REQUEST_LOCAL_SYSTEM_PAG             0x00000200 // Indicates that the caller is or was at some point a system
146                                                             // process
147
148 #define AFS_REQUEST_FLAG_CACHE_BYPASS            0x00000400 // Indicates that the AFS_REQUEST_TYPE_PROCESS_READ_FILE or
149                                                             // AFS_REQUEST_TYPE_PROCESS_WRITE_FILE is to be performed directly
150                                                             // against the file server bypassing the AFS Cache file.
151
152 #define AFS_REQUEST_FLAG_LAST_COMPONENT          0x00000800 // During an AFS_REQUEST_TYPE_TARGET_BY_NAME the provided name
153                                                             // is the last component in the path.
154
155 //
156 // Request Flags, these are passed down from the sevice
157 //
158
159 #define AFS_REQUEST_RELEASE_THREAD                 0x00000001 // Set on threads which are dedicated extent release threads
160
161 //
162 // Status codes that can returned for various requests
163 //
164
165 #if !defined(AFS_KERNEL_MODE) && !defined(STATUS_SUCCESS)
166
167 #define STATUS_SUCCESS                   0x00000000
168 #define STATUS_MORE_ENTRIES              0x00000105
169 #define STATUS_NO_MORE_FILES             0x80000006
170
171 #endif
172
173 //
174 // Trace Levels
175 //
176
177 #define AFS_TRACE_LEVEL_ERROR               0x00000001
178 #define AFS_TRACE_LEVEL_WARNING             0x00000002
179 #define AFS_TRACE_LEVEL_VERBOSE             0x00000003
180 #define AFS_TRACE_LEVEL_VERBOSE_2           0x00000004
181 #define AFS_TRACE_LEVEL_MAXIMUM             0x00000004
182
183 //
184 // Trace Subsystem Classes
185 //
186
187 #define AFS_SUBSYSTEM_IO_PROCESSING         0x00000001  // Includes IO subsystem
188 #define AFS_SUBSYSTEM_FILE_PROCESSING       0x00000002  // Includes Fcb and name processing
189 #define AFS_SUBSYSTEM_LOCK_PROCESSING       0x00000004  // All lock processing, level must be set to VERBOSE
190 #define AFS_SUBSYSTEM_EXTENT_PROCESSING     0x00000008  // Specific extent processing
191 #define AFS_SUBSYSTEM_WORKER_PROCESSING     0x00000010  // All worker processing
192 #define AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING 0x00000020  // Reference counting directory entries
193 #define AFS_SUBSYSTEM_OBJECT_REF_COUNTING   0x00000040  // Reference counting objects
194 #define AFS_SUBSYSTEM_VOLUME_REF_COUNTING   0x00000080  // Reference counting volumes
195 #define AFS_SUBSYSTEM_FCB_REF_COUNTING      0x00000100  // Reference counting fcbs
196 #define AFS_SUBSYSTEM_CLEANUP_PROCESSING    0x00000200  // Garbage collection of objects, dir entries, fcbs, etc.
197 #define AFS_SUBSYSTEM_PIPE_PROCESSING       0x00000400  // Pipe and share processing
198 #define AFS_SUBSYSTEM_DIR_NOTIF_PROCESSING  0x00000800  // Directory notification interface
199 #define AFS_SUBSYSTEM_NETWORK_PROVIDER      0x00001000  // Network provier interactions
200 #define AFS_SUBSYSTEM_DIR_NODE_COUNT        0x00002000  // Dir node count processing
201 #define AFS_SUBSYSTEM_PIOCTL_PROCESSING     0x00004000  // PIOCtl processing
202 #define AFS_SUBSYSTEM_AUTHGROUP_PROCESSING  0x00008000  // Auth group creation/assignment
203 #define AFS_SUBSYSTEM_LOAD_LIBRARY          0x00010000  // Library load and unload, request queuing
204 #define AFS_SUBSYSTEM_PROCESS_PROCESSING    0x00020000  // Process creation and destruction
205 #define AFS_SUBSYSTEM_EXTENT_ACTIVE_COUNTING 0x00040000 // Extent Active Counts
206 #define AFS_SUBSYSTEM_INIT_PROCESSING       0x00080000  // Redirector Initialization
207 #define AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING 0x00100000  // Name Array Processing
208 #define AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING 0x00200000  // Name Array DirectoryCB refcnts
209 #define AFS_SUBSYSTEM_SECTION_OBJECT        0x00400000  // Section Object Resource
210 #define AFS_SUBSYSTEM_FCB_ALLOCATION        0x01000000  // AFSFileCB Allocation
211 #define AFS_SUBSYSTEM_DIRENTRY_ALLOCATION   0x02000000  // AFSDirectoryCB Allocation
212 #define AFS_SUBSYSTEM_OBJINFO_ALLOCATION    0x04000000  // AFSObjectInformationCB Allocation
213
214 //
215 // Invalidation Reasons
216 //
217
218 #define AFS_INVALIDATE_EXPIRED          1  /* Set RE_VALIDATE */
219 #define AFS_INVALIDATE_FLUSHED          2  /* Set RE-VALIDATE */
220 #define AFS_INVALIDATE_CALLBACK         3  /* Set VERIFY Reset dir enumeration */
221 #define AFS_INVALIDATE_SMB              4  /* Set VERIFY Reset dir enumeration */
222 #define AFS_INVALIDATE_CREDS            5  /* Set VERIFY - User credentials changed */
223 #define AFS_INVALIDATE_DATA_VERSION     6  /* Set VERIFY */
224 #define AFS_INVALIDATE_DELETED          7  /* Requires top level locks */
225
226 //
227 // Flags which can be specified for each extent in the AFSFileExtentCB structure
228 //
229
230 #define AFS_EXTENT_FLAG_DIRTY   1   // The specified extent requires flushing, this can be
231                                     // specified by the file system during a release of the
232                                     // extent
233
234 #define AFS_EXTENT_FLAG_RELEASE 2   // The presence of this flag during a AFS_REQUEST_TYPE_RELEASE_FILE_EXTENTS
235                                     // call from the file system indicates to the service that the file system
236                                     // no longer requires the extents and they can be completely released. The
237                                     // absense of this flag tells the service that the extent should not be
238                                     // dereferenced; this is usually the case when the file system tells the
239                                     // service to flush a range of exents but do not release them
240
241 #define AFS_EXTENT_FLAG_CLEAN   4   // The presence of this flag during a AFS_REQUEST_TYPE_REQUEST_FILE_EXTENTS
242                                     // call from the file system indicates to the server that the file system
243                                     // is going to completely overwrite the contents of the extent and the
244                                     // service should therefore not bother to obtain the current version
245                                     // from the file server.
246
247 #define AFS_EXTENT_FLAG_FLUSH   8   // The presence of this flag indicates that the service should perform
248                                     // the equivalent of a FLUSH ioctl on the file after processing the
249                                     // extents.
250
251 #define AFS_EXTENT_FLAG_IN_USE  0x10 // The extent is currenty in use by the fs and cannot be released
252
253 #define AFS_EXTENT_FLAG_UNKNOWN 0x20 // The extent is unknown to the fs
254
255 #define AFS_EXTENT_FLAG_MD5_SET 0x40 // The extent MD5 field has been set
256
257 //
258 // Volume Information Characteristics
259 //
260
261 #ifndef AFS_KERNEL_MODE
262
263 #define FILE_REMOVABLE_MEDIA            0x00000001
264 #define FILE_READ_ONLY_DEVICE           0x00000002
265 #define FILE_REMOTE_DEVICE              0x00000010
266
267 //
268 // File attributes
269 //
270
271 #define FILE_ATTRIBUTE_READONLY             0x00000001  // winnt
272 #define FILE_ATTRIBUTE_HIDDEN               0x00000002  // winnt
273 #define FILE_ATTRIBUTE_SYSTEM               0x00000004  // winnt
274
275 #define FILE_ATTRIBUTE_DIRECTORY            0x00000010  // winnt
276 #define FILE_ATTRIBUTE_ARCHIVE              0x00000020  // winnt
277 #define FILE_ATTRIBUTE_DEVICE               0x00000040  // winnt
278 #define FILE_ATTRIBUTE_NORMAL               0x00000080  // winnt
279
280 //
281 // Filesystem attributes
282 //
283
284 #define FILE_CASE_PRESERVED_NAMES       0x00000002  // winnt
285 #define FILE_UNICODE_ON_DISK            0x00000004  // winnt
286 #define FILE_PERSISTENT_ACLS            0x00000008  // winnt
287 #define FILE_VOLUME_QUOTAS              0x00000020  // winnt
288 #define FILE_SUPPORTS_REPARSE_POINTS    0x00000080  // winnt
289 #define FILE_SUPPORTS_OBJECT_IDS        0x00010000  // winnt
290 #define FILE_SUPPORTS_HARD_LINKS        0x00400000  // winnt
291
292 #endif
293
294 //
295 // AFS File Types
296 //
297
298 #define AFS_FILE_TYPE_UNKNOWN            0    /* an unknown object */
299 #define AFS_FILE_TYPE_FILE               1    /* a file */
300 #define AFS_FILE_TYPE_DIRECTORY          2    /* a dir */
301 #define AFS_FILE_TYPE_SYMLINK            3    /* a symbolic link */
302 #define AFS_FILE_TYPE_MOUNTPOINT         4    /* a mount point */
303 #define AFS_FILE_TYPE_DFSLINK            5    /* a Microsoft Dfs link */
304 #define AFS_FILE_TYPE_INVALID            99   /* an invalid link */
305
306 //
307 // AFS File types specific to Windows
308 //
309
310 #define AFS_FILE_TYPE_SPECIAL_SHARE_NAME    -1
311 #define AFS_FILE_TYPE_PIOCTL                -2
312 #define AFS_FILE_TYPE_PIPE                  -3
313
314 //
315 // AFS SysName Constants
316 //
317
318 #define AFS_MAX_SYSNAME_LENGTH 128
319 #define AFS_SYSNAME_ARCH_32BIT 0
320 #define AFS_SYSNAME_ARCH_64BIT 1
321
322 //
323 // Server file access granted to callers on open
324 //
325
326 #define AFS_FILE_ACCESS_NOLOCK          0x00000000
327 #define AFS_FILE_ACCESS_EXCLUSIVE       0x00000001
328 #define AFS_FILE_ACCESS_SHARED          0x00000002
329
330 //
331 // Reparse Point processing policy
332 //
333
334 #define AFS_REPARSE_POINT_POLICY_RESET       0x00000000 // This will reset the policy to default
335                                                         // behavior which is to process the
336                                                         // "open as reparse point" flag during
337                                                         // Create per normal operation.
338
339 #define AFS_REPARSE_POINT_TO_FILE_AS_FILE    0x00000001 // If indicated then ignore any attempt to
340                                                         // "open as reparse point" when the target is
341                                                         // a file.
342
343 #define AFS_REPARSE_POINT_VALID_POLICY_FLAGS 0x00000001
344
345 //
346 // Reparse Point policy scope
347 //
348
349 #define AFS_REPARSE_POINT_POLICY_GLOBAL      0x00000000
350
351 #define AFS_REPARSE_POINT_POLICY_AUTHGROUP   0x00000001
352
353 #endif /* _AFS_USER_DEFINE_H */