Windows: Reimplement AFSGenerateCRC()
[openafs.git] / src / WINNT / afsrdr / kernel / lib / Include / AFSCommon.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_COMMON_H
36 #define _AFS_COMMON_H
37
38 //
39 // File: AFSCommon.h
40 //
41
42 extern "C"
43 {
44
45 #define AFS_KERNEL_MODE
46
47 #include <ntifs.h>
48 #include <wdmsec.h> // for IoCreateDeviceSecure
49 #include <initguid.h>
50
51 #include "AFSDefines.h"
52
53 #include "AFSUserDefines.h"
54
55 #include "AFSUserIoctl.h"
56
57 #include "AFSUserStructs.h"
58
59 #include "AFSRedirCommonDefines.h"
60
61 #include "AFSRedirCommonStructs.h"
62
63 #include "AFSStructs.h"
64
65 #include "AFSProvider.h"
66
67 #ifndef NO_EXTERN
68 #include "AFSExtern.h"
69 #endif
70
71 #define NTSTRSAFE_LIB
72 #include "ntstrsafe.h"
73
74 NTSTATUS
75 ZwQueryInformationProcess(
76   __in       HANDLE ProcessHandle,
77   __in       PROCESSINFOCLASS ProcessInformationClass,
78   __out      PVOID ProcessInformation,
79   __in       ULONG ProcessInformationLength,
80   __out_opt  PULONG ReturnLength
81 );
82
83 NTSYSAPI
84 NTSTATUS
85 NTAPI
86 RtlAbsoluteToSelfRelativeSD( IN PSECURITY_DESCRIPTOR  AbsoluteSecurityDescriptor,
87                              OUT PSECURITY_DESCRIPTOR  SelfRelativeSecurityDescriptor,
88                              IN OUT PULONG  BufferLength );
89
90 #ifndef FILE_OPEN_REPARSE_POINT
91 #define FILE_OPEN_REPARSE_POINT                 0x00200000
92 #endif
93 //
94 // AFSBTreeSupport.cpp Prototypes
95 //
96
97 NTSTATUS
98 AFSLocateCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
99                                 IN ULONG Index,
100                                 IN OUT AFSDirectoryCB **DirEntry);
101
102 NTSTATUS
103 AFSLocateCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
104                                   IN ULONG Index,
105                                   IN OUT AFSDirectoryCB **DirEntry);
106
107 NTSTATUS
108 AFSInsertCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
109                                 IN AFSDirectoryCB *DirEntry);
110
111 NTSTATUS
112 AFSInsertCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
113                                   IN AFSDirectoryCB *DirEntry);
114
115 NTSTATUS
116 AFSRemoveCaseSensitiveDirEntry( IN AFSDirectoryCB **RootNode,
117                                 IN AFSDirectoryCB *DirEntry);
118
119 NTSTATUS
120 AFSRemoveCaseInsensitiveDirEntry( IN AFSDirectoryCB **RootNode,
121                                   IN AFSDirectoryCB *DirEntry);
122
123 NTSTATUS
124 AFSLocateShortNameDirEntry( IN AFSDirectoryCB *RootNode,
125                             IN ULONG Index,
126                             IN OUT AFSDirectoryCB **DirEntry);
127
128 NTSTATUS
129 AFSInsertShortNameDirEntry( IN AFSDirectoryCB *RootNode,
130                             IN AFSDirectoryCB *DirEntry);
131
132 NTSTATUS
133 AFSRemoveShortNameDirEntry( IN AFSDirectoryCB **RootNode,
134                             IN AFSDirectoryCB *DirEntry);
135
136 NTSTATUS
137 AFSLocateHashEntry( IN AFSBTreeEntry *TopNode,
138                     IN ULONGLONG HashIndex,
139                     IN OUT AFSBTreeEntry **TreeEntry);
140
141 NTSTATUS
142 AFSInsertHashEntry( IN AFSBTreeEntry *TopNode,
143                     IN AFSBTreeEntry *FileIDEntry);
144
145 NTSTATUS
146 AFSRemoveHashEntry( IN AFSBTreeEntry **TopNode,
147                     IN AFSBTreeEntry *FileIDEntry);
148
149 //
150 // AFSInit.cpp Prototypes
151 //
152
153 NTSTATUS
154 DriverEntry( IN PDRIVER_OBJECT DriverObj,
155              IN PUNICODE_STRING RegPath);
156
157 void
158 AFSUnload( IN PDRIVER_OBJECT DriverObject);
159
160 //
161 // AFSCommSupport.cpp Prototypes
162 //
163
164 NTSTATUS
165 AFSEnumerateDirectory( IN GUID *AuthGroup,
166                        IN AFSObjectInfoCB *ObjectInfoCB,
167                        IN BOOLEAN   FastQuery);
168
169 NTSTATUS
170 AFSEnumerateDirectoryNoResponse( IN GUID *AuthGroup,
171                                  IN AFSFileID *FileId);
172
173 NTSTATUS
174 AFSVerifyDirectoryContent( IN AFSObjectInfoCB *ObjectInfo,
175                            IN GUID *AuthGroup);
176
177 NTSTATUS
178 AFSNotifyFileCreate( IN GUID            *AuthGroup,
179                      IN AFSObjectInfoCB *ParentObjectInfo,
180                      IN PLARGE_INTEGER FileSize,
181                      IN ULONG FileAttributes,
182                      IN UNICODE_STRING *FileName,
183                      OUT AFSDirectoryCB **DirNode);
184
185 NTSTATUS
186 AFSUpdateFileInformation( IN AFSFileID *ParentFid,
187                           IN AFSObjectInfoCB *ObjectInfo,
188                           IN GUID *AuthGroup);
189
190 NTSTATUS
191 AFSNotifyDelete( IN AFSDirectoryCB *DirectoryCB,
192                  IN BOOLEAN CheckOnly);
193
194 NTSTATUS
195 AFSNotifyRename( IN AFSObjectInfoCB *ObjectInfo,
196                  IN AFSObjectInfoCB *ParentObjectInfo,
197                  IN AFSObjectInfoCB *TargetParentObjectInfo,
198                  IN AFSDirectoryCB *DirectoryCB,
199                  IN UNICODE_STRING *TargetName,
200                  OUT AFSFileID  *UpdatedFID);
201
202 NTSTATUS
203 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
204                        IN GUID *AuthGroup,
205                        IN BOOLEAN FastCall,
206                        OUT AFSDirEnumEntry **DirEnumEntry);
207
208 NTSTATUS
209 AFSEvaluateTargetByName( IN GUID *AuthGroup,
210                          IN AFSFileID *ParentFileId,
211                          IN PUNICODE_STRING SourceName,
212                          OUT AFSDirEnumEntry **DirEnumEntry);
213
214 NTSTATUS
215 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
216                               IN AFSFileID *FileID,
217                               OUT AFSVolumeInfoCB *VolumeInformation);
218
219 NTSTATUS
220 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
221                          IN ULONG InputLength,
222                          IN ULONG OutputLength,
223                          IN void *InputDataBuffer,
224                          OUT void *OutputDataBuffer,
225                          OUT ULONG *BytesReturned);
226
227 NTSTATUS
228 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
229                       IN ULONG InformationClass,
230                       IN ULONG InputLength,
231                       IN void *DataBuffer);
232
233 NTSTATUS
234 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
235                         IN ULONG InformationClass,
236                         IN ULONG OutputLength,
237                         IN void *DataBuffer,
238                         OUT ULONG *BytesReturned);
239
240 NTSTATUS
241 AFSReleaseFid( IN AFSFileID *FileId);
242
243 BOOLEAN
244 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
245                           IN LARGE_INTEGER *ExtentOffset,
246                           IN ULONG Length);
247
248 //
249 // AFSCreate.cpp Prototypes
250 //
251
252 NTSTATUS
253 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
254            IN PIRP Irp);
255
256 NTSTATUS
257 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
258                  IN PIRP Irp);
259
260 NTSTATUS
261 AFSOpenRedirector( IN PIRP Irp,
262                    IN AFSFcb **Fcb,
263                    IN AFSCcb **Ccb);
264
265 NTSTATUS
266 AFSOpenAFSRoot( IN PIRP Irp,
267                 IN AFSFcb **Fcb,
268                 IN AFSCcb **Ccb);
269
270 NTSTATUS
271 AFSOpenRoot( IN PIRP Irp,
272              IN AFSVolumeCB *VolumeCB,
273              IN GUID *AuthGroup,
274              OUT AFSFcb **Fcb,
275              OUT AFSCcb **Ccb);
276
277 NTSTATUS
278 AFSProcessCreate( IN PIRP               Irp,
279                   IN GUID              *AuthGroup,
280                   IN AFSVolumeCB       *VolumeCB,
281                   IN AFSDirectoryCB    *ParentDirCB,
282                   IN PUNICODE_STRING    FileName,
283                   IN PUNICODE_STRING    ComponentName,
284                   IN PUNICODE_STRING    FullFileName,
285                   OUT AFSFcb          **Fcb,
286                   OUT AFSCcb          **Ccb);
287
288 NTSTATUS
289 AFSOpenTargetDirectory( IN PIRP Irp,
290                         IN AFSVolumeCB *VolumeCB,
291                         IN AFSDirectoryCB *ParentDirectoryCB,
292                         IN AFSDirectoryCB *TargetDirectoryCB,
293                         IN UNICODE_STRING *TargetName,
294                         OUT AFSFcb **Fcb,
295                         OUT AFSCcb **Ccb);
296
297 NTSTATUS
298 AFSProcessOpen( IN PIRP Irp,
299                 IN GUID *AuthGroup,
300                 IN AFSVolumeCB *VolumeCB,
301                 IN AFSDirectoryCB *ParentDirCB,
302                 IN AFSDirectoryCB *DirectoryCB,
303                 OUT AFSFcb **Fcb,
304                 OUT AFSCcb **Ccb);
305
306 NTSTATUS
307 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
308                               IN PIRP           Irp,
309                               IN AFSVolumeCB   *VolumeCB,
310                               IN GUID          *AuthGroup,
311                               IN AFSDirectoryCB *ParentDirCB,
312                               IN AFSDirectoryCB *DirectoryCB,
313                               OUT AFSFcb       **Fcb,
314                               OUT AFSCcb       **Ccb);
315
316 NTSTATUS
317 AFSControlDeviceCreate( IN PIRP Irp);
318
319 NTSTATUS
320 AFSOpenIOCtlFcb( IN PIRP Irp,
321                  IN GUID *AuthGroup,
322                  IN AFSDirectoryCB *ParentDirCB,
323                  OUT AFSFcb **Fcb,
324                  OUT AFSCcb **Ccb);
325
326 NTSTATUS
327 AFSOpenSpecialShareFcb( IN PIRP Irp,
328                         IN GUID *AuthGroup,
329                         IN AFSDirectoryCB *DirectoryCB,
330                         OUT AFSFcb **Fcb,
331                         OUT AFSCcb **Ccb);
332
333 //
334 // AFSExtentsSupport.cpp Prototypes
335 //
336 VOID
337 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
338
339 PAFSExtent
340 AFSExtentForOffset( IN AFSFcb *Fcb,
341                     IN PLARGE_INTEGER Offset,
342                     IN BOOLEAN ReturnPrevious);
343 BOOLEAN
344 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
345
346
347 NTSTATUS
348 AFSRequestExtents( IN  AFSFcb *Fcb,
349                    IN  PLARGE_INTEGER Offset,
350                    IN  ULONG Size,
351                    OUT BOOLEAN *FullyMApped);
352
353 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
354                               IN PLARGE_INTEGER Offset,
355                               IN ULONG Size,
356                               IN OUT AFSExtent **FirstExtent,
357                               OUT AFSExtent **LastExtent);
358
359 NTSTATUS
360 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
361                         IN PLARGE_INTEGER Offset,
362                         IN ULONG Size);
363
364 NTSTATUS
365 AFSWaitForExtentMapping ( IN AFSFcb *Fcb );
366
367 NTSTATUS
368 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
369
370 NTSTATUS
371 AFSProcessReleaseFileExtents( IN PIRP Irp);
372
373 NTSTATUS
374 AFSProcessExtentFailure( PIRP Irp);
375
376 NTSTATUS
377 AFSProcessSetExtents( IN AFSFcb *pFcb,
378                       IN ULONG   Count,
379                       IN AFSFileExtentCB *Result);
380
381 NTSTATUS
382 AFSFlushExtents( IN AFSFcb *pFcb);
383
384 NTSTATUS
385 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb);
386
387 VOID
388 AFSMarkDirty( IN AFSFcb *pFcb,
389               IN AFSExtent *StartExtent,
390               IN ULONG ExtentsCount,
391               IN LARGE_INTEGER *StartingByte);
392
393 BOOLEAN
394 AFSTearDownFcbExtents( IN AFSFcb *Fcb ) ;
395
396 void
397 AFSTrimExtents( IN AFSFcb *Fcb,
398                 IN PLARGE_INTEGER FileSize);
399
400 void
401 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
402                          IN ULONG   Count,
403                          IN AFSFileExtentCB *Result);
404
405 void
406 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
407                            IN ULONG ExtentsCount);
408
409 void
410 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
411                              IN ULONG ExtentsCount);
412
413 void
414 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
415                          IN AFSExtent *Extent);
416
417 #if GEN_MD5
418 void
419 AFSSetupMD5Hash( IN AFSFcb *Fcb,
420                  IN AFSExtent *StartExtent,
421                  IN ULONG ExtentsCount,
422                  IN void *SystemBuffer,
423                  IN LARGE_INTEGER *ByteOffset,
424                  IN ULONG ByteCount);
425 #endif
426
427 //
428 //
429 // AFSIoSupp.cpp Prototypes
430 //
431 NTSTATUS
432 AFSGetExtents( IN  AFSFcb *pFcb,
433                IN  PLARGE_INTEGER Offset,
434                IN  ULONG Length,
435                IN  AFSExtent *From,
436                OUT ULONG *ExtentCount,
437                OUT ULONG *RunCount);
438
439 NTSTATUS
440 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
441                IN PIRP           MasterIrp,
442                IN PVOID          SystemBuffer,
443                IN OUT AFSIoRun  *IoRun,
444                IN PLARGE_INTEGER Start,
445                IN ULONG          Length,
446                IN AFSExtent     *From,
447                IN OUT ULONG     *RunCount);
448
449 NTSTATUS
450 AFSStartIos( IN FILE_OBJECT     *CacheFileObject,
451              IN UCHAR            FunctionCode,
452              IN ULONG            IrpFlags,
453              IN AFSIoRun        *IoRun,
454              IN ULONG            Count,
455              IN OUT AFSGatherIo *Gather);
456
457 VOID
458 AFSCompleteIo( IN AFSGatherIo *Gather,
459                IN NTSTATUS Status);
460
461 NTSTATUS
462 AFSProcessExtentRun( IN PVOID          SystemBuffer,
463                      IN PLARGE_INTEGER Start,
464                      IN ULONG          Length,
465                      IN AFSExtent     *From,
466                      IN BOOLEAN        WriteRequest);
467
468 //
469 // AFSClose.cpp Prototypes
470 //
471
472 NTSTATUS
473 AFSClose( IN PDEVICE_OBJECT DeviceObject,
474           IN PIRP Irp);
475
476 //
477 // AFSFcbSupport.cpp Prototypes
478 //
479
480 NTSTATUS
481 AFSInitFcb( IN AFSDirectoryCB   *DirEntry,
482             IN OUT AFSFcb     **Fcb);
483
484 NTSTATUS
485 AFSInitVolume( IN GUID *AuthGroup,
486                IN AFSFileID *RootFid,
487                OUT AFSVolumeCB **VolumeCB);
488
489 NTSTATUS
490 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
491
492 NTSTATUS
493 AFSInitRootFcb( IN ULONGLONG ProcessID,
494                 IN AFSVolumeCB *VolumeCB);
495
496 void
497 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
498
499 NTSTATUS
500 AFSInitCcb( IN OUT AFSCcb **Ccb);
501
502 void
503 AFSRemoveFcb( IN AFSFcb *Fcb);
504
505 NTSTATUS
506 AFSRemoveCcb( IN AFSCcb *Ccb);
507
508 //
509 // AFSNameSupport.cpp Prototypes
510 //
511
512 NTSTATUS
513 AFSLocateNameEntry( IN GUID *AuthGroup,
514                     IN PFILE_OBJECT FileObject,
515                     IN UNICODE_STRING *RootPathName,
516                     IN UNICODE_STRING *ParsedPathName,
517                     IN AFSNameArrayHdr *NameArray,
518                     IN ULONG Flags,
519                     OUT AFSVolumeCB **VolumeCB,
520                     IN OUT AFSDirectoryCB **ParentDirectoryCB,
521                     OUT AFSDirectoryCB **DirectoryCB,
522                     OUT PUNICODE_STRING ComponentName);
523
524 NTSTATUS
525 AFSCreateDirEntry( IN GUID            *AuthGroup,
526                    IN AFSObjectInfoCB *ParentObjectInfo,
527                    IN AFSDirectoryCB *ParentDirCB,
528                    IN PUNICODE_STRING FileName,
529                    IN PUNICODE_STRING ComponentName,
530                    IN ULONG Attributes,
531                    IN OUT AFSDirectoryCB **DirEntry);
532
533 void
534 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
535                         IN AFSDirectoryCB *DirEntry,
536                         IN BOOLEAN InsertInEnumList);
537
538 NTSTATUS
539 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
540                    IN AFSDirectoryCB *DirEntry);
541
542 NTSTATUS
543 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
544                             IN AFSDirectoryCB *DirEntry,
545                             IN BOOLEAN RemoveFromEnumList);
546
547 NTSTATUS
548 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
549                     IN OUT PUNICODE_STRING TargetFileName);
550
551 NTSTATUS
552 AFSParseName( IN PIRP Irp,
553               IN GUID *AuthGroup,
554               OUT PUNICODE_STRING FileName,
555               OUT PUNICODE_STRING ParsedFileName,
556               OUT PUNICODE_STRING RootFileName,
557               OUT ULONG *ParseFlags,
558               OUT AFSVolumeCB **VolumeCB,
559               OUT AFSDirectoryCB **ParentDirectoryCB,
560               OUT AFSNameArrayHdr **NameArray);
561
562 NTSTATUS
563 AFSCheckCellName( IN GUID *AuthGroup,
564                   IN UNICODE_STRING *CellName,
565                   OUT AFSDirectoryCB **ShareDirEntry);
566
567 NTSTATUS
568 AFSBuildMountPointTarget( IN GUID *AuthGroup,
569                           IN AFSDirectoryCB *DirectoryCB,
570                           OUT AFSVolumeCB **VolumeCB);
571
572 NTSTATUS
573 AFSBuildRootVolume( IN GUID *AuthGroup,
574                     IN AFSFileID *FileId,
575                     OUT AFSVolumeCB **TargetVolumeCB);
576
577 NTSTATUS
578 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
579                    IN PFILE_OBJECT FileObject,
580                    IN UNICODE_STRING *RemainingPath);
581
582 //
583 // AFSNetworkProviderSupport.cpp
584 //
585
586 NTSTATUS
587 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
588                   IN OUT PULONG ResultStatus,
589                   IN OUT ULONG_PTR *ReturnOutputBufferLength);
590
591 NTSTATUS
592 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
593                      IN OUT AFSCancelConnectionResultCB *ConnectionResult,
594                      IN OUT ULONG_PTR *ReturnOutputBufferLength);
595
596 NTSTATUS
597 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
598                   IN OUT WCHAR *RemoteName,
599                   IN ULONG RemoteNameBufferLength,
600                   IN OUT ULONG_PTR *ReturnOutputBufferLength);
601
602 NTSTATUS
603 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
604                     IN ULONG ConnectionBufferLength,
605                     IN OUT ULONG_PTR *ReturnOutputBufferLength);
606
607 void
608 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
609                              IN ULONG DisplayType);
610
611 AFSProviderConnectionCB *
612 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
613
614 NTSTATUS
615 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
616                         IN AFSProviderConnectionCB *RootConnection,
617                         IN ULONG BufferLength,
618                         OUT PULONG CopiedLength);
619
620 NTSTATUS
621 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
622                       IN ULONG BufferLength,
623                       IN OUT ULONG_PTR *ReturnOutputBufferLength);
624
625 BOOLEAN
626 AFSIsDriveMapped( IN WCHAR DriveMapping);
627
628 //
629 // AFSRead.cpp Prototypes
630 //
631
632 NTSTATUS
633 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
634                IN PIRP Irp,
635                IN HANDLE OnBehalfOf);
636
637 NTSTATUS
638 AFSRead( IN PDEVICE_OBJECT DeviceObject,
639          IN PIRP Irp);
640
641
642 NTSTATUS
643 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
644               IN PIRP Irp);
645
646 NTSTATUS
647 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
648               IN PIRP Irp);
649
650 //
651 // AFSWrite.cpp Prototypes
652 //
653
654 NTSTATUS
655 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
656           IN PIRP Irp,
657           IN HANDLE CallingUser);
658
659 NTSTATUS
660 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
661                 IN PIRP Irp);
662
663 NTSTATUS
664 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
665                IN PIRP Irp);
666
667 NTSTATUS
668 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
669                IN PIRP Irp);
670
671 //
672 // AFSFileInfo.cpp Prototypes
673 //
674
675 NTSTATUS
676 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
677                   IN PIRP Irp);
678
679 NTSTATUS
680 AFSQueryBasicInfo( IN PIRP Irp,
681                    IN AFSDirectoryCB *DirectoryCB,
682                    IN OUT PFILE_BASIC_INFORMATION Buffer,
683                    IN OUT PLONG Length);
684
685 NTSTATUS
686 AFSQueryStandardInfo( IN PIRP Irp,
687                       IN AFSDirectoryCB *DirectoryCB,
688                       IN OUT PFILE_STANDARD_INFORMATION Buffer,
689                       IN OUT PLONG Length);
690
691 NTSTATUS
692 AFSQueryInternalInfo( IN PIRP Irp,
693                       IN AFSFcb *Fcb,
694                       IN OUT PFILE_INTERNAL_INFORMATION Buffer,
695                       IN OUT PLONG Length);
696
697 NTSTATUS
698 AFSQueryEaInfo( IN PIRP Irp,
699                 IN AFSDirectoryCB *DirectoryCB,
700                 IN OUT PFILE_EA_INFORMATION Buffer,
701                 IN OUT PLONG Length);
702
703 NTSTATUS
704 AFSQueryPositionInfo( IN PIRP Irp,
705                       IN AFSFcb *Fcb,
706                       IN OUT PFILE_POSITION_INFORMATION Buffer,
707                       IN OUT PLONG Length);
708
709 NTSTATUS
710 AFSQueryNameInfo( IN PIRP Irp,
711                   IN AFSDirectoryCB *DirectoryCB,
712                   IN OUT PFILE_NAME_INFORMATION Buffer,
713                   IN OUT PLONG Length);
714
715 NTSTATUS
716 AFSQueryShortNameInfo( IN PIRP Irp,
717                        IN AFSDirectoryCB *DirectoryCB,
718                        IN OUT PFILE_NAME_INFORMATION Buffer,
719                        IN OUT PLONG Length);
720
721 NTSTATUS
722 AFSQueryNetworkInfo( IN PIRP Irp,
723                      IN AFSDirectoryCB *DirectoryCB,
724                      IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
725                      IN OUT PLONG Length);
726
727 NTSTATUS
728 AFSQueryStreamInfo( IN PIRP Irp,
729                     IN AFSDirectoryCB *DirectoryCB,
730                     IN OUT FILE_STREAM_INFORMATION *Buffer,
731                     IN OUT PLONG Length);
732
733 NTSTATUS
734 AFSQueryAccess( IN PIRP Irp,
735                 IN AFSFcb *Fcb,
736                 IN OUT PFILE_ACCESS_INFORMATION Buffer,
737                 IN OUT PLONG Length);
738
739 NTSTATUS
740 AFSQueryMode( IN PIRP Irp,
741               IN AFSFcb *Fcb,
742               IN OUT PFILE_MODE_INFORMATION Buffer,
743               IN OUT PLONG Length);
744
745 NTSTATUS
746 AFSQueryAlignment( IN PIRP Irp,
747                    IN AFSFcb *Fcb,
748                    IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
749                    IN OUT PLONG Length);
750
751 NTSTATUS
752 AFSQueryAttribTagInfo( IN PIRP Irp,
753                        IN AFSDirectoryCB *DirectoryCB,
754                        IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
755                        IN OUT PLONG Length);
756
757 NTSTATUS
758 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
759                             IN AFSDirectoryCB *DirectoryCB,
760                             IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
761                             IN OUT PLONG Length);
762
763 NTSTATUS
764 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
765                 IN PIRP Irp);
766
767 NTSTATUS
768 AFSSetBasicInfo( IN PIRP Irp,
769                  IN AFSDirectoryCB *DirectoryCB);
770
771 NTSTATUS
772 AFSSetDispositionInfo( IN PIRP Irp,
773                        IN AFSDirectoryCB *DirectoryCB);
774
775 NTSTATUS
776 AFSSetRenameInfo( IN PIRP Irp);
777
778 NTSTATUS
779 AFSSetPositionInfo( IN PIRP Irp,
780                     IN AFSDirectoryCB *DirectoryCB);
781
782 NTSTATUS
783 AFSSetAllocationInfo( IN PIRP Irp,
784                       IN AFSDirectoryCB *DirectoryCB);
785
786 NTSTATUS
787 AFSSetEndOfFileInfo( IN PIRP Irp,
788                      IN AFSDirectoryCB *DirectoryCB);
789
790 NTSTATUS
791 AFSProcessShareSetInfo( IN IRP *Irp,
792                         IN AFSFcb *Fcb,
793                         IN AFSCcb *Ccb);
794
795 NTSTATUS
796 AFSProcessShareQueryInfo( IN IRP *Irp,
797                           IN AFSFcb *Fcb,
798                           IN AFSCcb *Ccb);
799
800 NTSTATUS
801 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
802                            IN AFSFcb *Fcb,
803                            IN AFSCcb *Ccb,
804                            IN OUT LONG *Length);
805
806 //
807 // AFSEa.cpp Prototypes
808 //
809
810 NTSTATUS
811 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
812             IN PIRP Irp);
813
814 NTSTATUS
815 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
816           IN PIRP Irp);
817
818 //
819 // AFSFlushBuffers.cpp Prototypes
820 //
821
822 NTSTATUS
823 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
824                  IN PIRP Irp);
825
826 //
827 // AFSVolumeInfo.cpp Prototypes
828 //
829
830 NTSTATUS
831 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
832                     IN PIRP Irp);
833
834 NTSTATUS
835 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
836                   IN PIRP Irp);
837
838 NTSTATUS
839 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
840                       IN PFILE_FS_VOLUME_INFORMATION Buffer,
841                       IN OUT PULONG Length);
842
843 NTSTATUS
844 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
845                     IN PFILE_FS_SIZE_INFORMATION Buffer,
846                     IN OUT PULONG Length);
847
848 NTSTATUS
849 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
850                       IN PFILE_FS_DEVICE_INFORMATION Buffer,
851                       IN OUT PULONG Length);
852
853 NTSTATUS
854 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
855                          IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
856                          IN OUT PULONG Length);
857
858 NTSTATUS
859 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
860                         IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
861                         IN OUT PULONG Length);
862
863 //
864 // AFSDirControl.cpp Prototypes
865 //
866
867 NTSTATUS
868 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
869                IN PIRP Irp);
870
871 NTSTATUS
872 AFSQueryDirectory( IN PIRP Irp);
873
874 NTSTATUS
875 AFSNotifyChangeDirectory( IN PIRP Irp);
876
877 AFSDirectoryCB *
878 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
879                        IN AFSCcb *Ccb);
880
881 AFSDirectoryCB *
882 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
883                           IN AFSCcb *Ccb,
884                           IN ULONG DirIndex);
885
886 NTSTATUS
887 AFSSnapshotDirectory( IN AFSFcb *Fcb,
888                       IN AFSCcb *Ccb);
889
890 NTSTATUS
891 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
892                                    IN AFSCcb *Context,
893                                    IN BOOLEAN WatchTree,
894                                    IN ULONG CompletionFilter,
895                                    IN PIRP NotifyIrp);
896
897 void
898 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
899                                 IN AFSCcb *Ccb,
900                                 IN ULONG NotifyFilter,
901                                 IN ULONG NotificationAction);
902
903 BOOLEAN
904 AFSNotifyReportChangeCallback( IN void *NotifyContext,
905                                IN void *FilterContext);
906
907 BOOLEAN
908 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
909                      IN ULONG HashIndex);
910
911 //
912 // AFSFSControl.cpp Prototypes
913 //
914
915 NTSTATUS
916 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
917               IN PIRP Irp);
918
919 NTSTATUS
920 AFSProcessUserFsRequest( IN PIRP Irp);
921
922 NTSTATUS
923 AFSProcessShareFsCtrl( IN IRP *Irp,
924                        IN AFSFcb *Fcb,
925                        IN AFSCcb *Ccb);
926
927 //
928 // AFSDevControl.cpp Prototypes
929 //
930
931 NTSTATUS
932 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
933                IN PIRP Irp);
934
935 //
936 // AFSInternalDevControl.cpp Prototypes
937 //
938
939 NTSTATUS
940 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
941                        IN PIRP Irp);
942
943 //
944 // AFSShutdown.cpp Prototypes
945 //
946
947 NTSTATUS
948 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
949              IN PIRP Irp);
950
951
952 NTSTATUS
953 AFSShutdownFilesystem( void);
954
955 //
956 // AFSLockControl.cpp Prototypes
957 //
958
959 NTSTATUS
960 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
961                 IN PIRP Irp);
962
963 //
964 // AFSCleanup.cpp Prototypes
965 //
966
967 NTSTATUS
968 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
969             IN PIRP Irp);
970
971 //
972 // AFSSecurity.cpp Prototypes
973 //
974
975 NTSTATUS
976 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
977                   IN PIRP Irp);
978
979 NTSTATUS
980 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
981                 IN PIRP Irp);
982
983 //
984 // AFSSystemControl.cpp Prototypes
985 //
986
987 NTSTATUS
988 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
989                   IN PIRP Irp);
990
991 //
992 // AFSQuota.cpp Prototypes
993 //
994
995 NTSTATUS
996 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
997                IN PIRP Irp);
998
999 NTSTATUS
1000 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1001              IN PIRP Irp);
1002
1003 //
1004 // AFSGeneric.cpp Prototypes
1005 //
1006
1007 ULONG
1008 AFSExceptionFilter( IN ULONG Code,
1009                     IN PEXCEPTION_POINTERS ExceptPtrs);
1010
1011 BOOLEAN
1012 AFSAcquireExcl( IN PERESOURCE Resource,
1013                 IN BOOLEAN wait);
1014
1015 BOOLEAN
1016 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1017                                  IN BOOLEAN Wait);
1018
1019 BOOLEAN
1020 AFSAcquireShared( IN PERESOURCE Resource,
1021                   IN BOOLEAN wait);
1022
1023 void
1024 AFSReleaseResource( IN PERESOURCE Resource);
1025
1026 void
1027 AFSConvertToShared( IN PERESOURCE Resource);
1028
1029 void
1030 AFSCompleteRequest( IN PIRP Irp,
1031                     IN ULONG Status);
1032
1033 ULONG
1034 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1035                 IN BOOLEAN UpperCaseName);
1036
1037 void *
1038 AFSLockSystemBuffer( IN PIRP Irp,
1039                      IN ULONG Length);
1040
1041 void *
1042 AFSLockUserBuffer( IN void *UserBuffer,
1043                    IN ULONG BufferLength,
1044                                    OUT MDL ** Mdl);
1045
1046 void *
1047 AFSMapToService( IN PIRP Irp,
1048                  IN ULONG ByteCount);
1049
1050 NTSTATUS
1051 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1052                              IN PMDL Mdl);
1053
1054 NTSTATUS
1055 AFSInitializeLibraryDevice( void);
1056
1057 NTSTATUS
1058 AFSRemoveLibraryDevice( void);
1059
1060 NTSTATUS
1061 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1062                     IN PIRP Irp);
1063
1064 NTSTATUS
1065 AFSInitializeGlobalDirectoryEntries( void);
1066
1067 AFSDirectoryCB *
1068 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1069                  IN PUNICODE_STRING FileName,
1070                  IN PUNICODE_STRING TargetName,
1071                  IN AFSDirEnumEntry *DirEnumEntry,
1072                  IN ULONG FileIndex);
1073
1074 BOOLEAN
1075 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1076                            IN BOOLEAN DirectoryEntry);
1077
1078 NTSTATUS
1079 AFSEvaluateNode( IN GUID *AuthGroup,
1080                  IN AFSDirectoryCB *DirEntry);
1081
1082 NTSTATUS
1083 AFSValidateSymLink( IN GUID *AuthGroup,
1084                     IN AFSDirectoryCB *DirEntry);
1085
1086 NTSTATUS
1087 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1088
1089 BOOLEAN
1090 AFSIsChildOfParent( IN AFSFcb *Dcb,
1091                     IN AFSFcb *Fcb);
1092
1093 inline
1094 ULONGLONG
1095 AFSCreateHighIndex( IN AFSFileID *FileID);
1096
1097 inline
1098 ULONGLONG
1099 AFSCreateLowIndex( IN AFSFileID *FileID);
1100
1101 BOOLEAN
1102 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1103                 IN ACCESS_MASK GrantedAccess,
1104                 IN BOOLEAN DirectoryEntry);
1105
1106 NTSTATUS
1107 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1108
1109 NTSTATUS
1110 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1111                       IN UNICODE_STRING *SubstituteName,
1112                       IN ULONG StringIndex);
1113
1114 NTSTATUS
1115 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1116                          IN OUT UNICODE_STRING *ComponentName,
1117                          IN UNICODE_STRING *SubstituteName,
1118                          IN OUT UNICODE_STRING *RemainingPath,
1119                          IN BOOLEAN FreePathName);
1120
1121 NTSTATUS
1122 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1123                      IN ULONG Reason);
1124
1125 NTSTATUS
1126 AFSVerifyEntry( IN GUID *AuthGroup,
1127                 IN AFSDirectoryCB *DirectoryCB);
1128
1129 NTSTATUS
1130 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1131
1132 NTSTATUS
1133 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1134
1135 NTSTATUS
1136 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1137                            IN GUID *AuthGroup);
1138
1139 BOOLEAN
1140 AFSIsVolumeFID( IN AFSFileID *FileID);
1141
1142 BOOLEAN
1143 AFSIsFinalNode( IN AFSFcb *Fcb);
1144
1145 NTSTATUS
1146 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1147                    IN AFSDirEnumEntry *DirEnumEntry);
1148
1149 NTSTATUS
1150 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1151                   IN GUID *AuthGroup,
1152                   IN BOOLEAN PurgeContent,
1153                   IN BOOLEAN FastCall);
1154
1155 AFSDirectoryCB *
1156 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1157                              IN UNICODE_STRING *SecondaryName);
1158
1159 NTSTATUS
1160 AFSInitializeSpecialShareNameList( void);
1161
1162 void
1163 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1164
1165 void
1166 AFSWaitOnQueuedReleases( void);
1167
1168 BOOLEAN
1169 AFSIsEqualFID( IN AFSFileID *FileId1,
1170                IN AFSFileID *FileId2);
1171
1172 NTSTATUS
1173 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1174
1175 NTSTATUS
1176 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1177
1178 BOOLEAN
1179 AFSIsRelativeName( IN UNICODE_STRING *Name);
1180
1181 void
1182 AFSUpdateName( IN UNICODE_STRING *Name);
1183
1184 NTSTATUS
1185 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1186                      IN OUT ULONG *Flags,
1187                      IN WCHAR *NameBuffer,
1188                      IN USHORT NameLength);
1189
1190 AFSNameArrayHdr *
1191 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1192                   IN ULONG InitialElementCount);
1193
1194 NTSTATUS
1195 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1196                       IN UNICODE_STRING *Path,
1197                       IN AFSDirectoryCB *DirectoryCB);
1198
1199 NTSTATUS
1200 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1201                                       IN AFSNameArrayHdr *RelatedNameArray,
1202                                       IN AFSDirectoryCB *DirectoryCB);
1203
1204 NTSTATUS
1205 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1206
1207 NTSTATUS
1208 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1209                       IN AFSDirectoryCB *DirEntry);
1210
1211 void
1212 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1213                           IN AFSDirectoryCB *DirectoryCB);
1214
1215 AFSDirectoryCB *
1216 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1217
1218 AFSDirectoryCB *
1219 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1220
1221 void
1222 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1223                    IN AFSDirectoryCB *DirEntry);
1224
1225 void
1226 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1227
1228 void
1229 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1230
1231 void
1232 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1233
1234 BOOLEAN
1235 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1236
1237 NTSTATUS
1238 AFSVerifyVolume( IN ULONGLONG ProcessId,
1239                  IN AFSVolumeCB *VolumeCB);
1240
1241 NTSTATUS
1242 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1243
1244 NTSTATUS
1245 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1246                            IN AFSDirectoryCB *DirectoryCB,
1247                            IN UNICODE_STRING *ParentPathName,
1248                            IN AFSNameArrayHdr *RelatedNameArray,
1249                            OUT AFSFileInfoCB *FileInfo);
1250
1251 AFSObjectInfoCB *
1252 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1253                        IN ULONGLONG HashIndex);
1254
1255 void
1256 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1257
1258 NTSTATUS
1259 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1260                       OUT AFSDirectoryCB **TargetDirEntry);
1261
1262 NTSTATUS
1263 AFSCleanupFcb( IN AFSFcb *Fcb,
1264                IN BOOLEAN ForceFlush);
1265
1266 NTSTATUS
1267 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1268                        IN UNICODE_STRING *NewFileName);
1269
1270 NTSTATUS
1271 AFSReadCacheFile( IN void *ReadBuffer,
1272                   IN LARGE_INTEGER *ReadOffset,
1273                   IN ULONG RequestedDataLength,
1274                   IN OUT PULONG BytesRead);
1275
1276 NTSTATUS
1277 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1278                 IN PIRP           Irp,
1279                 IN PVOID          Context);
1280
1281 BOOLEAN
1282 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1283
1284 void
1285 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1286                     IN AFSDirectoryCB *DirEntry);
1287
1288 LARGE_INTEGER
1289 AFSGetAuthenticationId( void);
1290
1291 void
1292 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1293                    IN AFSCcb *Ccb);
1294
1295 BOOLEAN
1296 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1297
1298 PFILE_OBJECT
1299 AFSReferenceCacheFileObject( void);
1300
1301 void
1302 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1303
1304 NTSTATUS
1305 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1306
1307 NTSTATUS
1308 AFSCloseLibrary( void);
1309
1310 NTSTATUS
1311 AFSDefaultLogMsg( IN ULONG Subsystem,
1312                   IN ULONG Level,
1313                   IN PCCH Format,
1314                   ...);
1315
1316 NTSTATUS
1317 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1318                     IN ULONG InputBufferLength,
1319                     IN AFSStatusInfoCB *StatusInfo,
1320                     OUT ULONG *ReturnLength);
1321
1322 NTSTATUS
1323 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1324                        IN UNICODE_STRING *ComponentName);
1325
1326 NTSTATUS
1327 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1328                            OUT UNICODE_STRING *ComponentName);
1329
1330 void
1331 AFSDumpTraceFiles_Default( void);
1332
1333 void *
1334 AFSLibExAllocatePoolWithTag( IN POOL_TYPE  PoolType,
1335                              IN SIZE_T  NumberOfBytes,
1336                              IN ULONG  Tag);
1337
1338 BOOLEAN
1339 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1340
1341 NTSTATUS
1342 AFSCreateDefaultSecurityDescriptor( void);
1343
1344 //
1345 // AFSWorker.cpp Prototypes
1346 //
1347
1348 NTSTATUS
1349 AFSInitializeWorkerPool( void);
1350
1351 NTSTATUS
1352 AFSRemoveWorkerPool( void);
1353
1354 NTSTATUS
1355 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1356                      IN PKSTART_ROUTINE WorkerRoutine);
1357
1358 NTSTATUS
1359 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1360
1361 NTSTATUS
1362 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1363
1364 NTSTATUS
1365 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1366
1367 NTSTATUS
1368 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1369
1370 void
1371 AFSWorkerThread( IN PVOID Context);
1372
1373 void
1374 AFSIOWorkerThread( IN PVOID Context);
1375
1376 void
1377 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1378
1379 void
1380 AFSVolumeWorkerThread( IN PVOID Context);
1381
1382 NTSTATUS
1383 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1384
1385 NTSTATUS
1386 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1387
1388 NTSTATUS
1389 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1390
1391 AFSWorkItem *
1392 AFSRemoveWorkItem( void);
1393
1394 AFSWorkItem *
1395 AFSRemoveIOWorkItem( void);
1396
1397 NTSTATUS
1398 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1399
1400 NTSTATUS
1401 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1402
1403 NTSTATUS
1404 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1405
1406 NTSTATUS
1407 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1408
1409 NTSTATUS
1410 AFSQueueFlushExtents( IN AFSFcb *Fcb);
1411
1412 NTSTATUS
1413 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1414                    IN PIRP Irp,
1415                    IN HANDLE CallerProcess);
1416
1417 NTSTATUS
1418 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1419                     IN PIRP Irp,
1420                     IN HANDLE CallerProcess);
1421
1422 NTSTATUS
1423 AFSQueueGlobalRootEnumeration( void);
1424
1425 NTSTATUS
1426 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1427
1428 NTSTATUS
1429 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1430                   IN UCHAR FunctionCode,
1431                   IN ULONG RequestFLags,
1432                   IN AFSIoRun *IoRuns,
1433                   IN ULONG RunCount,
1434                   IN AFSGatherIo *GatherIo);
1435
1436 //
1437 // AFSMD5Support.cpp Prototypes
1438 //
1439
1440 void
1441 AFSGenerateMD5( IN char *DataBuffer,
1442                 IN ULONG Length,
1443                 OUT UCHAR *MD5Digest);
1444
1445 };
1446
1447 #endif /* _AFS_COMMON_H */