Windows: CreateFile Reparse Point to File as File
[openafs.git] / src / WINNT / afsrdr / common / AFSRedirCommonDefines.h
1 /*
2  * Copyright (c) 2008-2013 Kernel Drivers, LLC.
3  * Copyright (c) 2009-2013 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, 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.
19  *
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.
31  */
32
33 #ifndef _AFS_REDIR_COMMON_DEFINES_H
34 #define _AFS_REDIR_COMMON_DEFINES_H
35
36 //
37 // Allocation defines
38 //
39
40 #define AFS_GENERIC_MEMORY_1_TAG     '1GFA'
41 #define AFS_GENERIC_MEMORY_2_TAG     '2GFA'
42 #define AFS_GENERIC_MEMORY_3_TAG     '3GFA'
43 #define AFS_GENERIC_MEMORY_4_TAG     '4GFA'
44 #define AFS_GENERIC_MEMORY_5_TAG     '5GFA'
45 #define AFS_GENERIC_MEMORY_6_TAG     '6GFA'
46 #define AFS_GENERIC_MEMORY_7_TAG     '7GFA'
47 #define AFS_GENERIC_MEMORY_8_TAG     '8GFA'
48 #define AFS_GENERIC_MEMORY_9_TAG     '9GFA'
49 #define AFS_GENERIC_MEMORY_10_TAG    'AGFA'
50 #define AFS_GENERIC_MEMORY_11_TAG    'BGFA'
51 #define AFS_GENERIC_MEMORY_12_TAG    'CGFA'
52 #define AFS_GENERIC_MEMORY_13_TAG    'DGFA'
53 #define AFS_GENERIC_MEMORY_14_TAG    'EGFA'
54 #define AFS_GENERIC_MEMORY_15_TAG    'FGFA'
55 #define AFS_GENERIC_MEMORY_16_TAG    'GGFA'
56 #define AFS_GENERIC_MEMORY_17_TAG    'HGFA'
57 #define AFS_GENERIC_MEMORY_18_TAG    'IGFA'
58 #define AFS_GENERIC_MEMORY_19_TAG    'JGFA'
59 #define AFS_GENERIC_MEMORY_20_TAG    'KGFA'
60 #define AFS_GENERIC_MEMORY_21_TAG    'LGFA'
61 #define AFS_GENERIC_MEMORY_22_TAG    'MGFA'
62 #define AFS_GENERIC_MEMORY_23_TAG    'NGFA'
63 #define AFS_GENERIC_MEMORY_24_TAG    'OGFA'
64 #define AFS_GENERIC_MEMORY_25_TAG    'PGFA'
65 #define AFS_GENERIC_MEMORY_26_TAG    'QGFA'
66 #define AFS_GENERIC_MEMORY_27_TAG    'RGFA'
67 #define AFS_GENERIC_MEMORY_28_TAG    'SGFA'
68 #define AFS_GENERIC_MEMORY_29_TAG    'TGFA'
69 #define AFS_GENERIC_MEMORY_30_TAG    'UGFA'
70 #define AFS_GENERIC_MEMORY_31_TAG    'VGFA'
71 #define AFS_GENERIC_MEMORY_32_TAG    'WGFA'
72 #define AFS_FCB_ALLOCATION_TAG       'AFFA'
73 #define AFS_FCB_NP_ALLOCATION_TAG    'NFFA'
74 #define AFS_VCB_ALLOCATION_TAG       'CVFA'
75 #define AFS_VCB_NP_ALLOCATION_TAG    'NVFA'
76 #define AFS_CCB_ALLOCATION_TAG       'CCFA'
77 #define AFS_CCB_NP_ALLOCATION_TAG    'NCFA'
78 #define AFS_WORKER_CB_TAG            'CWFA'
79 #define AFS_WORK_ITEM_TAG            'IWFA'
80 #define AFS_POOL_ENTRY_TAG           'EPFA'
81 #define AFS_PROCESS_CB_TAG           'CPFA'
82 #define AFS_DIR_BUFFER_TAG           'BDFA'
83 #define AFS_DIR_ENTRY_TAG            'EDFA'
84 #define AFS_NAME_BUFFER_ONE_TAG      '1NFA'
85 #define AFS_NAME_BUFFER_TWO_TAG      '2NFA'
86 #define AFS_NAME_BUFFER_THREE_TAG    '3NFA'
87 #define AFS_NAME_BUFFER_FOUR_TAG     '4NFA'
88 #define AFS_NAME_BUFFER_FIVE_TAG     '5NFA'
89 #define AFS_NAME_BUFFER_SIX_TAG      '6NFA'
90 #define AFS_NAME_BUFFER_SEVEN_TAG    '7NFA'
91 #define AFS_NAME_BUFFER_EIGHT_TAG    '8NFA'
92 #define AFS_NAME_BUFFER_NINE_TAG     '9NFA'
93 #define AFS_NAME_BUFFER_TEN_TAG      'ANFA'
94 #define AFS_NAME_BUFFER_ELEVEN_TAG   'BNFA'
95 #define AFS_SUBST_BUFFER_TAG         'SBFA'
96 #define AFS_FILE_CREATE_BUFFER_TAG   'CFFA'
97 #define AFS_RENAME_REQUEST_TAG       'RFFA'
98 #define AFS_DIR_ENTRY_NP_TAG         'NDFA'
99 #define AFS_PROVIDER_CB              'PNFA'
100 #define AFS_EXTENT_TAG               'xSFA'
101 #define AFS_EXTENT_REQUEST_TAG       'XSFA'
102 #define AFS_EXTENT_RELEASE_TAG       'LSFA'
103 #define AFS_IO_RUN_TAG               'iSFA'
104 #define AFS_GATHER_TAG               'gSFA'
105 #define AFS_UPDATE_RESULT_TAG        'RUFA'
106 #define AFS_EXTENTS_RESULT_TAG       'XEFA'
107 #define AFS_SYS_NAME_NODE_TAG        'NSFA'
108 #define AFS_REPARSE_NAME_TAG         'NRFA'
109 #define AFS_NAME_ARRAY_TAG           'RAFA'
110 #define AFS_OBJECT_INFO_TAG          'IOFA'
111 #define AFS_NP_OBJECT_INFO_TAG       'ONFA'
112 #define AFS_DIR_SNAPSHOT_TAG         'SSFA'
113 #define AFS_LIBRARY_QUEUE_TAG        'QLFA'
114 #define AFS_NETWORK_PROVIDER_1_TAG   '1ZFA'
115 #define AFS_NETWORK_PROVIDER_2_TAG   '2ZFA'
116 #define AFS_NETWORK_PROVIDER_3_TAG   '3ZFA'
117 #define AFS_NETWORK_PROVIDER_4_TAG   '4ZFA'
118 #define AFS_NETWORK_PROVIDER_5_TAG   '5ZFA'
119 #define AFS_NETWORK_PROVIDER_6_TAG   '6ZFA'
120 #define AFS_NETWORK_PROVIDER_7_TAG   '7ZFA'
121 #define AFS_NETWORK_PROVIDER_8_TAG   '8ZFA'
122 #define AFS_NETWORK_PROVIDER_9_TAG   '9ZFA'
123 #define AFS_NETWORK_PROVIDER_10_TAG  'AZFA'
124 #define AFS_NETWORK_PROVIDER_11_TAG  'BZFA'
125 #define AFS_AG_ENTRY_CB_TAG          'GAFA'
126 #define AFS_PROCESS_AG_CB_TAG        'APFA'
127 #define AFS_BYTERANGE_TAG            '_RBA'
128 #define AFS_HARDLINK_REQUEST_TAG     'LFFA'
129 #define AFS_SYMLINK_REQUEST_TAG      'YSFA'
130
131 #define __Enter
132
133 #define try_return(S) { S; goto try_exit; }
134
135 //
136 // Object types allocated
137 //
138
139 #define AFS_FILE_FCB                            0x0001
140 #define AFS_DIRECTORY_FCB                       0x0002
141 #define AFS_NON_PAGED_FCB                       0x0003
142 #define AFS_CCB                                 0x0004
143 #define AFS_ROOT_FCB                            0x0006
144 #define AFS_VCB                                 0x0007
145 #define AFS_NON_PAGED_VCB                       0x0008
146 #define AFS_ROOT_ALL                            0x0009
147 #define AFS_IOCTL_FCB                           0x000A
148 #define AFS_MOUNT_POINT_FCB                     0x000B
149 #define AFS_SYMBOLIC_LINK_FCB                   0x000C
150 #define AFS_SPECIAL_SHARE_FCB                   0x000D
151 #define AFS_DFS_LINK_FCB                        0x000E
152 #define AFS_REDIRECTOR_FCB                      0x000F
153
154 #define AFS_INVALID_FCB                         0x00FF
155
156 //
157 // Debug information
158 //
159
160 #define AFS_DBG_FLAG_BREAK_ON_ENTRY      0x00000001   // Only enabled in checked build
161 #define AFS_DBG_TRACE_TO_DEBUGGER        0x00000002
162 #define AFS_DBG_FLAG_ENABLE_FORCE_CRASH  0x00000004   // Only enabled in checked build
163 #define AFS_DBG_BUGCHECK_EXCEPTION       0x00000008
164 #define AFS_DBG_CLEAN_SHUTDOWN           0x00000010
165 #define AFS_DBG_REQUIRE_CLEAN_SHUTDOWN   0x00000020
166 #define AFS_DBG_DISABLE_SYSTEM_SID_CHECK 0x00000040
167
168 //
169 // Pool state
170 //
171
172 #define POOL_UNKNOWN            0
173 #define POOL_INACTIVE           1
174 #define POOL_ACTIVE             2
175
176 //
177 // Volume flags
178 //
179
180 #define AFS_VOLUME_FLAGS_OFFLINE                        0x00000001
181 #define AFS_VOLUME_PRIVATE_WOKER_INITIALIZED            0x00000002
182 #define AFS_VOLUME_INSERTED_HASH_TREE                   0x00000004
183 #define AFS_VOLUME_ACTIVE_GLOBAL_ROOT                   0x00000008
184
185 //
186 // Authentication Group Flags
187 //
188
189 #define AFS_AUTHGROUP_REPARSE_POLICY_SET                0x00000001
190 #define AFS_AUTHGROUP_REPARSE_POINT_TO_FILE_AS_FILE     0x00000002
191
192 //
193 // Need this to handle the break point definition
194 //
195
196 typedef
197 void
198 (*PAFSDumpTraceFiles)( void);
199
200 extern PAFSDumpTraceFiles  AFSDumpTraceFilesFnc;
201
202 //
203 // Debug information
204 //
205
206 static inline void AFS_ASSERT() {
207     AFSDumpTraceFilesFnc();
208 }
209
210 #if DBG
211
212 //#define AFS_VALIDATE_EXTENTS            0
213
214 static inline void AFSBreakPoint() {
215 #if !defined(KD_DEBUGGER_ENABLED)
216 #define KD_DEBUGGER_ENABLED DBG
217 #endif // KD_DEBUGGER_ENABLED
218
219 #if (NTDDI_VERSION >= NTDDI_WS03)
220     KdRefreshDebuggerNotPresent();
221 #endif
222
223 #if defined(KD_DEBUGGER_NOT_PRESENT)
224     if (KD_DEBUGGER_NOT_PRESENT == FALSE)
225         DbgBreakPoint();
226 #endif // KD_DEBUGGER_NOT_PRESENT
227 }
228
229 #define AFSPrint        DbgPrint
230
231 #else
232
233 static inline void AFSBreakPoint() {
234     NOTHING;
235 }
236
237 #define AFSPrint
238
239 #endif
240
241 #define AFSDbgTrace(X) \
242 { \
243     PAFSDbgLogMsg pTraceFnc = AFSDebugTraceFnc; \
244     if( pTraceFnc != NULL) { pTraceFnc X;} \
245 }
246 //
247 // Library control device name
248 //
249
250 #define AFS_LIBRARY_CONTROL_DEVICE_NAME     L"\\Device\\AFSLibraryControlDevice"
251
252 #define AFS_REDIR_LIBRARY_SERVICE_ENTRY     L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\AFSLibrary"
253
254 //
255 // Common Device flags
256 //
257
258 #define AFS_DEVICE_FLAG_HIDE_DOT_NAMES          0x00000001
259 #define AFS_DEVICE_FLAG_REDIRECTOR_SHUTDOWN     0x00000002
260 #define AFS_DEVICE_FLAG_DISABLE_SHORTNAMES      0x00000004
261 #define AFS_DEVICE_FLAG_DIRECT_SERVICE_IO       0x00000008
262
263 #endif
264