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