2 * Copyright (c) 2008 Secure Endpoints, Inc.
3 * Copyright (c) 2009-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 are met:
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.
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.
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;
45 // Function Declarations
46 #include <../common/AFSUserPrototypes.h>
49 RDR_InitReq( IN OUT cm_req_t *reqp, BOOL bWow64);
52 RDR_SetInitParams( OUT AFSRedirectorInitInfo **ppRedirInitInfo,
53 OUT DWORD * pRedirInitInfoLen );
57 RDR_RequestWorkerThread( LPVOID lpParameter);
60 RDR_ProcessWorkerThreads( IN DWORD);
63 RDR_ProcessRequest( AFSCommRequest *RequestBuffer);
66 RDR_EnumerateDirectory( IN cm_user_t *userp,
67 IN AFSFileID ParentID,
68 IN AFSDirQueryCB *QueryCB,
71 IN DWORD ResultBufferLength,
72 IN OUT AFSCommResult **ResultCB);
75 RDR_EvaluateNodeByName( IN cm_user_t *userp,
76 IN AFSFileID ParentID,
79 IN BOOL CaseSensitive,
83 IN DWORD ResultBufferLength,
84 IN OUT AFSCommResult **ResultCB);
87 RDR_EvaluateNodeByID( IN cm_user_t *userp,
88 IN AFSFileID ParentID,
89 IN AFSFileID SourceID,
93 IN DWORD ResultBufferLength,
94 IN OUT AFSCommResult **ResultCB);
97 RDR_CreateFileEntry( IN cm_user_t *userp,
99 IN DWORD FileNameLength,
100 IN AFSFileCreateCB *CreateCB,
103 IN DWORD ResultBufferLength,
104 IN OUT AFSCommResult **ResultCB);
107 RDR_UpdateFileEntry( IN cm_user_t *userp,
109 IN AFSFileUpdateCB *UpdateCB,
111 IN DWORD ResultBufferLength,
112 IN OUT AFSCommResult **ResultCB);
115 RDR_DeleteFileEntry( IN cm_user_t *userp,
116 IN AFSFileID ParentId,
117 IN ULONGLONG ProcessId,
119 IN DWORD FileNameLength,
122 IN DWORD ResultBufferLength,
123 IN OUT AFSCommResult **ResultCB);
126 RDR_RenameFileEntry( IN cm_user_t *userp,
127 IN WCHAR *SourceFileName,
128 IN DWORD SourceFileNameLength,
129 IN AFSFileID SourceFileId,
130 IN AFSFileRenameCB *RenameCB,
132 IN DWORD ResultBufferLength,
133 IN OUT AFSCommResult **ResultCB);
136 RDR_HardLinkFileEntry( IN cm_user_t *userp,
137 IN WCHAR *SourceFileName,
138 IN DWORD SourceFileNameLength,
139 IN AFSFileID SourceFileId,
140 IN AFSFileHardLinkCB *HardLinkCB,
142 IN DWORD ResultBufferLength,
143 IN OUT AFSCommResult **ResultCB);
146 RDR_FlushFileEntry( IN cm_user_t *userp,
149 IN DWORD ResultBufferLength,
150 IN OUT AFSCommResult **ResultCB);
153 RDR_OpenFileEntry( IN cm_user_t *userp,
155 IN AFSFileOpenCB *OpenCB,
158 IN DWORD ResultBufferLength,
159 IN OUT AFSCommResult **ResultCB);
162 RDR_ReleaseFileAccess( IN cm_user_t *userp,
164 IN AFSFileAccessReleaseCB *ReleaseFileCB,
166 IN DWORD ResultBufferLength,
167 IN OUT AFSCommResult **ResultCB);
170 RDR_CleanupFileEntry( IN cm_user_t *userp,
173 IN DWORD FileNameLength,
174 IN AFSFileCleanupCB *CleanupCB,
179 IN DWORD ResultBufferLength,
180 IN OUT AFSCommResult **ResultCB);
183 RDR_RequestFileExtentsAsync( IN cm_user_t *userp,
185 IN AFSRequestExtentsCB *RequestExtentsCB,
187 IN OUT DWORD * ResultBufferLength,
188 IN OUT AFSSetFileExtentsCB **ResultCB);
191 RDR_ReleaseFileExtents( IN cm_user_t *userp,
193 IN AFSReleaseExtentsCB *ReleaseExtentsCB,
195 IN DWORD ResultBufferLength,
196 IN OUT AFSCommResult **ResultCB);
199 RDR_RequestExtentRelease( IN cm_fid_t *fidp,
200 IN LARGE_INTEGER numOfHeldExtents,
201 IN DWORD numOfExtents,
202 IN AFSFileExtentCB *extentList);
205 RDR_ProcessReleaseFileExtentsResult( IN AFSReleaseFileExtentsResultCB *ReleaseFileExtentsResultCB,
206 IN DWORD ResultBufferLength);
209 RDR_ReleaseFailedSetFileExtents( IN cm_user_t *userp,
210 IN AFSSetFileExtentsCB *SetFileExtentsResultCB,
211 IN DWORD ResultBufferLength);
214 RDR_SetFileExtents( IN AFSSetFileExtentsCB *pSetFileExtentsResultCB,
215 IN DWORD dwResultBufferLength);
217 RDR_PioctlOpen( IN cm_user_t *userp,
218 IN AFSFileID ParentId,
219 IN AFSPIOCtlOpenCloseRequestCB *pPioctlCB,
221 IN DWORD ResultBufferLength,
222 IN OUT AFSCommResult **ResultCB);
225 RDR_PioctlClose( IN cm_user_t *userp,
226 IN AFSFileID ParentId,
227 IN AFSPIOCtlOpenCloseRequestCB *pPioctlCB,
229 IN DWORD ResultBufferLength,
230 IN OUT AFSCommResult **ResultCB);
233 RDR_PioctlWrite( IN cm_user_t *userp,
234 IN AFSFileID ParentId,
235 IN AFSPIOCtlIORequestCB *pPioctlCB,
237 IN DWORD ResultBufferLength,
238 IN OUT AFSCommResult **ResultCB);
241 RDR_PioctlRead( IN cm_user_t *userp,
242 IN AFSFileID ParentId,
243 IN AFSPIOCtlIORequestCB *pPioctlCB,
245 IN BOOL bIsLocalSystem,
246 IN DWORD ResultBufferLength,
247 IN OUT AFSCommResult **ResultCB);
250 RDR_ByteRangeLockSync( IN cm_user_t *userp,
252 IN AFSByteRangeLockRequestCB *pBRLRequestCB,
254 IN DWORD ResultBufferLength,
255 IN OUT AFSCommResult **ResultCB);
258 RDR_ByteRangeUnlock( IN cm_user_t *userp,
260 IN AFSByteRangeUnlockRequestCB *pBRURequestCB,
262 IN DWORD ResultBufferLength,
263 IN OUT AFSCommResult **ResultCB);
266 RDR_ByteRangeUnlockAll( IN cm_user_t *userp,
268 IN AFSByteRangeUnlockRequestCB *pBRURequestCB,
270 IN DWORD ResultBufferLength,
271 IN OUT AFSCommResult **ResultCB);
274 RDR_GetVolumeInfo( IN cm_user_t *userp,
277 IN DWORD ResultBufferLength,
278 IN OUT AFSCommResult **ResultCB);
281 RDR_GetVolumeSizeInfo( IN cm_user_t *userp,
284 IN DWORD ResultBufferLength,
285 IN OUT AFSCommResult **ResultCB);
288 RDR_HoldFid( IN cm_user_t *userp,
289 IN AFSHoldFidRequestCB * pHoldFidCB,
291 IN DWORD ResultBufferLength,
292 IN OUT AFSCommResult **ResultCB);
295 RDR_ReleaseFid( IN cm_user_t *userp,
296 IN AFSReleaseFidRequestCB * pReleaseFidCB,
298 IN DWORD ResultBufferLength,
299 IN OUT AFSCommResult **ResultCB);
305 RDR_ShutdownPipe(void);
308 RDR_PipeOpen( IN cm_user_t *userp,
309 IN AFSFileID ParentId,
312 IN AFSPipeOpenCloseRequestCB *pPipeCB,
314 IN DWORD ResultBufferLength,
315 IN OUT AFSCommResult **ResultCB);
318 RDR_PipeClose( IN cm_user_t *userp,
319 IN AFSFileID ParentId,
320 IN AFSPipeOpenCloseRequestCB *pPipeCB,
322 IN DWORD ResultBufferLength,
323 IN OUT AFSCommResult **ResultCB);
326 RDR_PipeWrite( IN cm_user_t *userp,
327 IN AFSFileID ParentId,
328 IN AFSPipeIORequestCB *pPipeCB,
331 IN DWORD ResultBufferLength,
332 IN OUT AFSCommResult **ResultCB);
335 RDR_PipeRead( IN cm_user_t *userp,
336 IN AFSFileID ParentId,
337 IN AFSPipeIORequestCB *pPipeCB,
339 IN DWORD ResultBufferLength,
340 IN OUT AFSCommResult **ResultCB);
343 RDR_PipeSetInfo( IN cm_user_t *userp,
344 IN AFSFileID ParentId,
345 IN AFSPipeInfoRequestCB *pPipeCB,
348 IN DWORD ResultBufferLength,
349 IN OUT AFSCommResult **ResultCB);
352 RDR_PipeQueryInfo( IN cm_user_t *userp,
353 IN AFSFileID ParentId,
354 IN AFSPipeInfoRequestCB *pPipeCB,
356 IN DWORD ResultBufferLength,
357 IN OUT AFSCommResult **ResultCB);
360 RDR_PipeTransceive( IN cm_user_t *userp,
361 IN AFSFileID ParentId,
362 IN AFSPipeIORequestCB *pPipeCB,
365 IN DWORD ResultBufferLength,
366 IN OUT AFSCommResult **ResultCB);
369 RDR_UserFromCommRequest( IN AFSCommRequest * pRequest);
372 RDR_UserFromAuthGroup( IN GUID *pGuid);
375 RDR_ReleaseUser( IN cm_user_t *userp);
378 RDR_fid2FID( IN cm_fid_t *fid,
379 IN AFSFileID *FileId);
382 RDR_FID2fid( IN AFSFileID *FileId,
389 RDR_ShutdownIoctl(void);