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