26bdd76b323a03cd55721ffc551bb6e4a16be92d
[openafs.git] / src / WINNT / afsrdr / user / RDRPrototypes.h
1 /*
2  * Copyright (c) 2008 Secure Endpoints, Inc.
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 are met:
8  *
9  * - Redistributions of source code must retain the above copyright notice,
10  *   this list of conditions and the following disclaimer.
11  * - Redistributions in binary form must reproduce the above copyright notice,
12  *   this list of conditions and the following disclaimer in the documentation
13  *   and/or other materials provided with the distribution.
14  * - Neither the name of Secure Endpoints Inc. nor the names of its contributors
15  *   may be used to endorse or promote products derived from this software without
16  *   specific prior written permission from Secure Endpoints, Inc. and
17  *   Your File System, Inc.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
23  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 #include <ntsecapi.h>
37
38 // The following are forward declarations of structures
39 // which are referenced in the RDR code only by pointer.
40 typedef struct cm_user cm_user_t;
41 typedef struct cm_req cm_req_t;
42 typedef struct cm_fid cm_fid_t;
43 typedef struct cm_scache cm_scache_t;
44
45 // Function Declarations
46 #include <../common/AFSUserPrototypes.h>
47
48 void
49 RDR_InitReq( IN OUT cm_req_t *reqp, BOOL bWow64);
50
51 DWORD
52 RDR_SetInitParams( OUT AFSRedirectorInitInfo **ppRedirInitInfo,
53                    OUT DWORD * pRedirInitInfoLen );
54
55 DWORD
56 WINAPI
57 RDR_RequestWorkerThread( LPVOID lpParameter);
58
59 DWORD
60 RDR_ProcessWorkerThreads( IN DWORD);
61
62 void
63 RDR_ProcessRequest( AFSCommRequest *RequestBuffer);
64
65 void
66 RDR_EnumerateDirectory( IN cm_user_t *userp,
67                         IN AFSFileID ParentID,
68                         IN AFSDirQueryCB *QueryCB,
69                         IN BOOL bWow64,
70                         IN BOOL bQueryStatus,
71                         IN DWORD ResultBufferLength,
72                         IN OUT AFSCommResult **ResultCB);
73
74 void
75 RDR_EvaluateNodeByName( IN cm_user_t *userp,
76                         IN AFSFileID ParentID,
77                         IN WCHAR     *Name,
78                         IN DWORD     NameLength,
79                         IN BOOL      CaseSensitive,
80                         IN BOOL      bWow64,
81                         IN BOOL      bQueryStatus,
82                         IN BOOL      bHoldFid,
83                         IN DWORD     ResultBufferLength,
84                         IN OUT AFSCommResult **ResultCB);
85
86 void
87 RDR_EvaluateNodeByID( IN cm_user_t *userp,
88                       IN AFSFileID ParentID,
89                       IN AFSFileID SourceID,
90                       IN BOOL bWow64,
91                       IN BOOL bQueryStatus,
92                       IN BOOL      bHoldFid,
93                       IN DWORD    ResultBufferLength,
94                       IN OUT AFSCommResult **ResultCB);
95
96 void
97 RDR_CreateFileEntry( IN cm_user_t *userp,
98                      IN WCHAR *FileName,
99                      IN DWORD FileNameLength,
100                      IN AFSFileCreateCB *CreateCB,
101                      IN BOOL bWow64,
102                      IN BOOL bHoldFid,
103                      IN DWORD ResultBufferLength,
104                      IN OUT AFSCommResult **ResultCB);
105
106 void
107 RDR_UpdateFileEntry( IN cm_user_t *userp,
108                      IN AFSFileID FileId,
109                      IN AFSFileUpdateCB *UpdateCB,
110                      IN BOOL bWow64,
111                      IN DWORD ResultBufferLength,
112                      IN OUT AFSCommResult **ResultCB);
113
114 void
115 RDR_DeleteFileEntry( IN cm_user_t *userp,
116                      IN AFSFileID ParentId,
117                      IN ULONGLONG ProcessId,
118                      IN WCHAR *FileName,
119                      IN DWORD FileNameLength,
120                      IN BOOL bWow64,
121                      IN BOOL bCheckOnly,
122                      IN DWORD ResultBufferLength,
123                      IN OUT AFSCommResult **ResultCB);
124
125 void
126 RDR_RenameFileEntry( IN cm_user_t *userp,
127                      IN WCHAR    *SourceFileName,
128                      IN DWORD     SourceFileNameLength,
129                      IN AFSFileID SourceFileId,
130                      IN AFSFileRenameCB *RenameCB,
131                      IN BOOL bWow64,
132                      IN DWORD ResultBufferLength,
133                      IN OUT AFSCommResult **ResultCB);
134
135 void
136 RDR_FlushFileEntry( IN cm_user_t *userp,
137                     IN AFSFileID FileId,
138                     IN BOOL bWow64,
139                     IN DWORD ResultBufferLength,
140                     IN OUT AFSCommResult **ResultCB);
141
142 void
143 RDR_OpenFileEntry( IN cm_user_t *userp,
144                    IN AFSFileID FileId,
145                    IN AFSFileOpenCB *OpenCB,
146                    IN BOOL bWow64,
147                    IN BOOL bHoldFid,
148                    IN DWORD ResultBufferLength,
149                    IN OUT AFSCommResult **ResultCB);
150
151 void
152 RDR_ReleaseFileAccess( IN cm_user_t *userp,
153                        IN AFSFileID FileId,
154                        IN AFSFileAccessReleaseCB *ReleaseFileCB,
155                        IN BOOL bWow64,
156                        IN DWORD ResultBufferLength,
157                        IN OUT AFSCommResult **ResultCB);
158
159 void
160 RDR_CleanupFileEntry( IN cm_user_t *userp,
161                       IN AFSFileID FileId,
162                       IN WCHAR *FileName,
163                       IN DWORD FileNameLength,
164                       IN AFSFileCleanupCB *CleanupCB,
165                       IN BOOL bWow64,
166                       IN BOOL bFlushFile,
167                       IN BOOL bDeleteFile,
168                       IN BOOL bUnlockFile,
169                       IN DWORD ResultBufferLength,
170                       IN OUT AFSCommResult **ResultCB);
171
172 BOOL
173 RDR_RequestFileExtentsAsync( IN cm_user_t *userp,
174                              IN AFSFileID FileId,
175                              IN AFSRequestExtentsCB *RequestExtentsCB,
176                              IN BOOL bWow64,
177                              IN OUT DWORD * ResultBufferLength,
178                              IN OUT AFSSetFileExtentsCB **ResultCB);
179
180 void
181 RDR_ReleaseFileExtents( IN cm_user_t *userp,
182                         IN AFSFileID FileId,
183                         IN AFSReleaseExtentsCB *ReleaseExtentsCB,
184                         IN BOOL bWow64,
185                         IN DWORD ResultBufferLength,
186                         IN OUT AFSCommResult **ResultCB);
187
188 DWORD
189 RDR_RequestExtentRelease( IN cm_fid_t *fidp,
190                           IN LARGE_INTEGER numOfHeldExtents,
191                           IN DWORD numOfExtents,
192                           IN AFSFileExtentCB *extentList);
193
194 DWORD
195 RDR_ProcessReleaseFileExtentsResult( IN AFSReleaseFileExtentsResultCB *ReleaseFileExtentsResultCB,
196                                      IN DWORD ResultBufferLength);
197
198 DWORD
199 RDR_ReleaseFailedSetFileExtents( IN cm_user_t *userp,
200                                  IN AFSSetFileExtentsCB *SetFileExtentsResultCB,
201                                  IN DWORD ResultBufferLength);
202
203 DWORD
204 RDR_SetFileExtents( IN AFSSetFileExtentsCB *pSetFileExtentsResultCB,
205                     IN DWORD dwResultBufferLength);
206 void
207 RDR_PioctlOpen( IN cm_user_t *userp,
208                 IN AFSFileID  ParentId,
209                 IN AFSPIOCtlOpenCloseRequestCB *pPioctlCB,
210                 IN BOOL bWow64,
211                 IN DWORD ResultBufferLength,
212                 IN OUT AFSCommResult **ResultCB);
213
214 void
215 RDR_PioctlClose( IN cm_user_t *userp,
216                  IN AFSFileID  ParentId,
217                  IN AFSPIOCtlOpenCloseRequestCB *pPioctlCB,
218                  IN BOOL bWow64,
219                  IN DWORD ResultBufferLength,
220                  IN OUT AFSCommResult **ResultCB);
221
222 void
223 RDR_PioctlWrite( IN cm_user_t *userp,
224                  IN AFSFileID  ParentId,
225                  IN AFSPIOCtlIORequestCB *pPioctlCB,
226                  IN BOOL bWow64,
227                  IN DWORD ResultBufferLength,
228                  IN OUT AFSCommResult **ResultCB);
229
230 void
231 RDR_PioctlRead( IN cm_user_t *userp,
232                 IN AFSFileID  ParentId,
233                 IN AFSPIOCtlIORequestCB *pPioctlCB,
234                 IN BOOL bWow64,
235                 IN BOOL bIsLocalSystem,
236                 IN DWORD ResultBufferLength,
237                 IN OUT AFSCommResult **ResultCB);
238
239 void
240 RDR_ByteRangeLockSync( IN cm_user_t     *userp,
241                        IN AFSFileID     FileId,
242                        IN AFSByteRangeLockRequestCB *pBRLRequestCB,
243                        IN BOOL bWow64,
244                        IN DWORD ResultBufferLength,
245                        IN OUT AFSCommResult **ResultCB);
246
247 void
248 RDR_ByteRangeUnlock( IN cm_user_t     *userp,
249                      IN AFSFileID     FileId,
250                      IN AFSByteRangeUnlockRequestCB *pBRURequestCB,
251                      IN BOOL bWow64,
252                      IN DWORD ResultBufferLength,
253                      IN OUT AFSCommResult **ResultCB);
254
255 void
256 RDR_ByteRangeUnlockAll( IN cm_user_t     *userp,
257                         IN AFSFileID     FileId,
258                         IN AFSByteRangeUnlockRequestCB *pBRURequestCB,
259                         IN BOOL bWow64,
260                         IN DWORD ResultBufferLength,
261                         IN OUT AFSCommResult **ResultCB);
262
263 void
264 RDR_GetVolumeInfo( IN cm_user_t     *userp,
265                    IN AFSFileID     FileId,
266                    IN BOOL bWow64,
267                    IN DWORD ResultBufferLength,
268                    IN OUT AFSCommResult **ResultCB);
269
270 void
271 RDR_GetVolumeSizeInfo( IN cm_user_t     *userp,
272                        IN AFSFileID     FileId,
273                        IN BOOL bWow64,
274                        IN DWORD ResultBufferLength,
275                        IN OUT AFSCommResult **ResultCB);
276
277 void
278 RDR_HoldFid( IN cm_user_t     *userp,
279              IN AFSHoldFidRequestCB * pHoldFidCB,
280              IN BOOL bFast,
281              IN DWORD ResultBufferLength,
282              IN OUT AFSCommResult **ResultCB);
283
284 void
285 RDR_ReleaseFid( IN cm_user_t     *userp,
286                 IN AFSReleaseFidRequestCB * pReleaseFidCB,
287                 IN BOOL bFast,
288                 IN DWORD ResultBufferLength,
289                 IN OUT AFSCommResult **ResultCB);
290
291 void
292 RDR_InitPipe(void);
293
294 void
295 RDR_ShutdownPipe(void);
296
297 void
298 RDR_PipeOpen( IN cm_user_t *userp,
299               IN AFSFileID  ParentId,
300               IN WCHAR     *Name,
301               IN DWORD      NameLength,
302               IN AFSPipeOpenCloseRequestCB *pPipeCB,
303               IN BOOL bWow64,
304               IN DWORD ResultBufferLength,
305               IN OUT AFSCommResult **ResultCB);
306
307 void
308 RDR_PipeClose( IN cm_user_t *userp,
309                IN AFSFileID  ParentId,
310                IN AFSPipeOpenCloseRequestCB *pPipeCB,
311                IN BOOL bWow64,
312                IN DWORD ResultBufferLength,
313                IN OUT AFSCommResult **ResultCB);
314
315 void
316 RDR_PipeWrite( IN cm_user_t *userp,
317                IN AFSFileID  ParentId,
318                IN AFSPipeIORequestCB *pPipeCB,
319                IN BYTE *pPipeData,
320                IN BOOL bWow64,
321                IN DWORD ResultBufferLength,
322                IN OUT AFSCommResult **ResultCB);
323
324 void
325 RDR_PipeRead( IN cm_user_t *userp,
326               IN AFSFileID  ParentId,
327               IN AFSPipeIORequestCB *pPipeCB,
328               IN BOOL bWow64,
329               IN DWORD ResultBufferLength,
330               IN OUT AFSCommResult **ResultCB);
331
332 void
333 RDR_PipeSetInfo( IN cm_user_t *userp,
334                  IN AFSFileID  ParentId,
335                  IN AFSPipeInfoRequestCB *pPipeCB,
336                  IN BYTE *pPipeData,
337                  IN BOOL bWow64,
338                  IN DWORD ResultBufferLength,
339                  IN OUT AFSCommResult **ResultCB);
340
341 void
342 RDR_PipeQueryInfo( IN cm_user_t *userp,
343                    IN AFSFileID  ParentId,
344                    IN AFSPipeInfoRequestCB *pPipeCB,
345                    IN BOOL bWow64,
346                    IN DWORD ResultBufferLength,
347                    IN OUT AFSCommResult **ResultCB);
348
349 void
350 RDR_PipeTransceive( IN cm_user_t     *userp,
351                     IN AFSFileID  ParentId,
352                     IN AFSPipeIORequestCB *pPipeCB,
353                     IN BYTE *pPipeData,
354                     IN BOOL bWow64,
355                     IN DWORD          ResultBufferLength,
356                     IN OUT AFSCommResult **ResultCB);
357
358 cm_user_t *
359 RDR_UserFromCommRequest( IN AFSCommRequest * pRequest);
360
361 cm_user_t *
362 RDR_UserFromAuthGroup( IN GUID *pGuid);
363
364 void
365 RDR_ReleaseUser( IN cm_user_t *userp);
366
367 void
368 RDR_fid2FID( IN cm_fid_t *fid,
369              IN AFSFileID *FileId);
370
371 void
372 RDR_FID2fid( IN AFSFileID *FileId,
373              IN cm_fid_t *fid);
374
375 void
376 RDR_InitIoctl(void);
377
378 void
379 RDR_ShutdownIoctl(void);
380
381 #ifdef __cplusplus
382 }
383 #endif
384