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