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