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