Windows: Directory Entry Processing
[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 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
765                 IN PIRP Irp);
766
767 NTSTATUS
768 AFSSetBasicInfo( IN PIRP Irp,
769                  IN AFSDirectoryCB *DirectoryCB);
770
771 NTSTATUS
772 AFSSetDispositionInfo( IN PIRP Irp,
773                        IN AFSDirectoryCB *DirectoryCB);
774
775 NTSTATUS
776 AFSSetRenameInfo( IN PIRP Irp);
777
778 NTSTATUS
779 AFSSetPositionInfo( IN PIRP Irp,
780                     IN AFSDirectoryCB *DirectoryCB);
781
782 NTSTATUS
783 AFSSetAllocationInfo( IN PIRP Irp,
784                       IN AFSDirectoryCB *DirectoryCB);
785
786 NTSTATUS
787 AFSSetEndOfFileInfo( IN PIRP Irp,
788                      IN AFSDirectoryCB *DirectoryCB);
789
790 NTSTATUS
791 AFSProcessShareSetInfo( IN IRP *Irp,
792                         IN AFSFcb *Fcb,
793                         IN AFSCcb *Ccb);
794
795 NTSTATUS
796 AFSProcessShareQueryInfo( IN IRP *Irp,
797                           IN AFSFcb *Fcb,
798                           IN AFSCcb *Ccb);
799
800 NTSTATUS
801 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
802                            IN AFSFcb *Fcb,
803                            IN AFSCcb *Ccb,
804                            IN OUT LONG *Length);
805
806 //
807 // AFSEa.cpp Prototypes
808 //
809
810 NTSTATUS
811 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
812             IN PIRP Irp);
813
814 NTSTATUS
815 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
816           IN PIRP Irp);
817
818 //
819 // AFSFlushBuffers.cpp Prototypes
820 //
821
822 NTSTATUS
823 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
824                  IN PIRP Irp);
825
826 //
827 // AFSVolumeInfo.cpp Prototypes
828 //
829
830 NTSTATUS
831 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
832                     IN PIRP Irp);
833
834 NTSTATUS
835 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
836                   IN PIRP Irp);
837
838 NTSTATUS
839 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
840                       IN PFILE_FS_VOLUME_INFORMATION Buffer,
841                       IN OUT PULONG Length);
842
843 NTSTATUS
844 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
845                     IN PFILE_FS_SIZE_INFORMATION Buffer,
846                     IN OUT PULONG Length);
847
848 NTSTATUS
849 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
850                       IN PFILE_FS_DEVICE_INFORMATION Buffer,
851                       IN OUT PULONG Length);
852
853 NTSTATUS
854 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
855                          IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
856                          IN OUT PULONG Length);
857
858 NTSTATUS
859 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
860                         IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
861                         IN OUT PULONG Length);
862
863 //
864 // AFSDirControl.cpp Prototypes
865 //
866
867 NTSTATUS
868 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
869                IN PIRP Irp);
870
871 NTSTATUS
872 AFSQueryDirectory( IN PIRP Irp);
873
874 NTSTATUS
875 AFSNotifyChangeDirectory( IN PIRP Irp);
876
877 AFSDirectoryCB *
878 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
879                        IN AFSCcb *Ccb);
880
881 AFSDirectoryCB *
882 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
883                           IN AFSCcb *Ccb,
884                           IN ULONG DirIndex);
885
886 NTSTATUS
887 AFSSnapshotDirectory( IN AFSFcb *Fcb,
888                       IN AFSCcb *Ccb,
889                       IN BOOLEAN ResetIndex);
890
891 NTSTATUS
892 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
893                                    IN AFSCcb *Context,
894                                    IN BOOLEAN WatchTree,
895                                    IN ULONG CompletionFilter,
896                                    IN PIRP NotifyIrp);
897
898 void
899 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
900                                 IN AFSCcb *Ccb,
901                                 IN ULONG NotifyFilter,
902                                 IN ULONG NotificationAction);
903
904 BOOLEAN
905 AFSNotifyReportChangeCallback( IN void *NotifyContext,
906                                IN void *FilterContext);
907
908 BOOLEAN
909 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
910                      IN ULONG HashIndex);
911
912 //
913 // AFSFSControl.cpp Prototypes
914 //
915
916 NTSTATUS
917 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
918               IN PIRP Irp);
919
920 NTSTATUS
921 AFSProcessUserFsRequest( IN PIRP Irp);
922
923 NTSTATUS
924 AFSProcessShareFsCtrl( IN IRP *Irp,
925                        IN AFSFcb *Fcb,
926                        IN AFSCcb *Ccb);
927
928 //
929 // AFSDevControl.cpp Prototypes
930 //
931
932 NTSTATUS
933 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
934                IN PIRP Irp);
935
936 //
937 // AFSInternalDevControl.cpp Prototypes
938 //
939
940 NTSTATUS
941 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
942                        IN PIRP Irp);
943
944 //
945 // AFSShutdown.cpp Prototypes
946 //
947
948 NTSTATUS
949 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
950              IN PIRP Irp);
951
952
953 NTSTATUS
954 AFSShutdownFilesystem( void);
955
956 //
957 // AFSLockControl.cpp Prototypes
958 //
959
960 NTSTATUS
961 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
962                 IN PIRP Irp);
963
964 //
965 // AFSCleanup.cpp Prototypes
966 //
967
968 NTSTATUS
969 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
970             IN PIRP Irp);
971
972 //
973 // AFSSecurity.cpp Prototypes
974 //
975
976 NTSTATUS
977 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
978                   IN PIRP Irp);
979
980 NTSTATUS
981 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
982                 IN PIRP Irp);
983
984 //
985 // AFSSystemControl.cpp Prototypes
986 //
987
988 NTSTATUS
989 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
990                   IN PIRP Irp);
991
992 //
993 // AFSQuota.cpp Prototypes
994 //
995
996 NTSTATUS
997 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
998                IN PIRP Irp);
999
1000 NTSTATUS
1001 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1002              IN PIRP Irp);
1003
1004 //
1005 // AFSGeneric.cpp Prototypes
1006 //
1007
1008 ULONG
1009 AFSExceptionFilter( IN ULONG Code,
1010                     IN PEXCEPTION_POINTERS ExceptPtrs);
1011
1012 BOOLEAN
1013 AFSAcquireExcl( IN PERESOURCE Resource,
1014                 IN BOOLEAN wait);
1015
1016 BOOLEAN
1017 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1018                                  IN BOOLEAN Wait);
1019
1020 BOOLEAN
1021 AFSAcquireShared( IN PERESOURCE Resource,
1022                   IN BOOLEAN wait);
1023
1024 void
1025 AFSReleaseResource( IN PERESOURCE Resource);
1026
1027 void
1028 AFSConvertToShared( IN PERESOURCE Resource);
1029
1030 void
1031 AFSCompleteRequest( IN PIRP Irp,
1032                     IN ULONG Status);
1033
1034 ULONG
1035 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1036                 IN BOOLEAN UpperCaseName);
1037
1038 void *
1039 AFSLockSystemBuffer( IN PIRP Irp,
1040                      IN ULONG Length);
1041
1042 void *
1043 AFSLockUserBuffer( IN void *UserBuffer,
1044                    IN ULONG BufferLength,
1045                                    OUT MDL ** Mdl);
1046
1047 void *
1048 AFSMapToService( IN PIRP Irp,
1049                  IN ULONG ByteCount);
1050
1051 NTSTATUS
1052 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1053                              IN PMDL Mdl);
1054
1055 NTSTATUS
1056 AFSInitializeLibraryDevice( void);
1057
1058 NTSTATUS
1059 AFSRemoveLibraryDevice( void);
1060
1061 NTSTATUS
1062 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1063                     IN PIRP Irp);
1064
1065 NTSTATUS
1066 AFSInitializeGlobalDirectoryEntries( void);
1067
1068 AFSDirectoryCB *
1069 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1070                  IN PUNICODE_STRING FileName,
1071                  IN PUNICODE_STRING TargetName,
1072                  IN AFSDirEnumEntry *DirEnumEntry,
1073                  IN ULONG FileIndex);
1074
1075 BOOLEAN
1076 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1077                            IN BOOLEAN DirectoryEntry);
1078
1079 NTSTATUS
1080 AFSEvaluateNode( IN GUID *AuthGroup,
1081                  IN AFSDirectoryCB *DirEntry);
1082
1083 NTSTATUS
1084 AFSValidateSymLink( IN GUID *AuthGroup,
1085                     IN AFSDirectoryCB *DirEntry);
1086
1087 NTSTATUS
1088 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1089
1090 BOOLEAN
1091 AFSIsChildOfParent( IN AFSFcb *Dcb,
1092                     IN AFSFcb *Fcb);
1093
1094 inline
1095 ULONGLONG
1096 AFSCreateHighIndex( IN AFSFileID *FileID);
1097
1098 inline
1099 ULONGLONG
1100 AFSCreateLowIndex( IN AFSFileID *FileID);
1101
1102 BOOLEAN
1103 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1104                 IN ACCESS_MASK GrantedAccess,
1105                 IN BOOLEAN DirectoryEntry);
1106
1107 NTSTATUS
1108 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1109
1110 NTSTATUS
1111 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1112                       IN UNICODE_STRING *SubstituteName,
1113                       IN ULONG StringIndex);
1114
1115 NTSTATUS
1116 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1117                          IN OUT UNICODE_STRING *ComponentName,
1118                          IN UNICODE_STRING *SubstituteName,
1119                          IN OUT UNICODE_STRING *RemainingPath,
1120                          IN BOOLEAN FreePathName);
1121
1122 NTSTATUS
1123 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1124                      IN ULONG Reason);
1125
1126 NTSTATUS
1127 AFSVerifyEntry( IN GUID *AuthGroup,
1128                 IN AFSDirectoryCB *DirectoryCB);
1129
1130 NTSTATUS
1131 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1132
1133 NTSTATUS
1134 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1135
1136 NTSTATUS
1137 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1138                            IN GUID *AuthGroup);
1139
1140 BOOLEAN
1141 AFSIsVolumeFID( IN AFSFileID *FileID);
1142
1143 BOOLEAN
1144 AFSIsFinalNode( IN AFSFcb *Fcb);
1145
1146 NTSTATUS
1147 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1148                    IN AFSDirEnumEntry *DirEnumEntry);
1149
1150 NTSTATUS
1151 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1152                   IN GUID *AuthGroup,
1153                   IN BOOLEAN PurgeContent,
1154                   IN BOOLEAN FastCall);
1155
1156 AFSDirectoryCB *
1157 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1158                              IN UNICODE_STRING *SecondaryName);
1159
1160 NTSTATUS
1161 AFSInitializeSpecialShareNameList( void);
1162
1163 void
1164 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1165
1166 void
1167 AFSWaitOnQueuedReleases( void);
1168
1169 BOOLEAN
1170 AFSIsEqualFID( IN AFSFileID *FileId1,
1171                IN AFSFileID *FileId2);
1172
1173 NTSTATUS
1174 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1175
1176 NTSTATUS
1177 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1178
1179 BOOLEAN
1180 AFSIsRelativeName( IN UNICODE_STRING *Name);
1181
1182 void
1183 AFSUpdateName( IN UNICODE_STRING *Name);
1184
1185 NTSTATUS
1186 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1187                      IN OUT ULONG *Flags,
1188                      IN WCHAR *NameBuffer,
1189                      IN USHORT NameLength);
1190
1191 AFSNameArrayHdr *
1192 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1193                   IN ULONG InitialElementCount);
1194
1195 NTSTATUS
1196 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1197                       IN UNICODE_STRING *Path,
1198                       IN AFSDirectoryCB *DirectoryCB);
1199
1200 NTSTATUS
1201 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1202                                       IN AFSNameArrayHdr *RelatedNameArray,
1203                                       IN AFSDirectoryCB *DirectoryCB);
1204
1205 NTSTATUS
1206 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1207
1208 NTSTATUS
1209 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1210                       IN AFSDirectoryCB *DirEntry);
1211
1212 void
1213 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1214                           IN AFSDirectoryCB *DirectoryCB);
1215
1216 AFSDirectoryCB *
1217 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1218
1219 AFSDirectoryCB *
1220 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1221
1222 void
1223 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1224                    IN AFSDirectoryCB *DirEntry);
1225
1226 void
1227 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1228
1229 void
1230 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1231
1232 void
1233 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1234
1235 BOOLEAN
1236 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1237
1238 NTSTATUS
1239 AFSVerifyVolume( IN ULONGLONG ProcessId,
1240                  IN AFSVolumeCB *VolumeCB);
1241
1242 NTSTATUS
1243 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1244
1245 NTSTATUS
1246 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1247                            IN AFSDirectoryCB *DirectoryCB,
1248                            IN UNICODE_STRING *ParentPathName,
1249                            IN AFSNameArrayHdr *RelatedNameArray,
1250                            OUT AFSFileInfoCB *FileInfo);
1251
1252 AFSObjectInfoCB *
1253 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1254                        IN ULONGLONG HashIndex);
1255
1256 void
1257 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1258
1259 NTSTATUS
1260 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1261                       OUT AFSDirectoryCB **TargetDirEntry);
1262
1263 NTSTATUS
1264 AFSCleanupFcb( IN AFSFcb *Fcb,
1265                IN BOOLEAN ForceFlush);
1266
1267 NTSTATUS
1268 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1269                        IN UNICODE_STRING *NewFileName);
1270
1271 NTSTATUS
1272 AFSReadCacheFile( IN void *ReadBuffer,
1273                   IN LARGE_INTEGER *ReadOffset,
1274                   IN ULONG RequestedDataLength,
1275                   IN OUT PULONG BytesRead);
1276
1277 NTSTATUS
1278 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1279                 IN PIRP           Irp,
1280                 IN PVOID          Context);
1281
1282 BOOLEAN
1283 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1284
1285 void
1286 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1287                     IN AFSDirectoryCB *DirEntry);
1288
1289 LARGE_INTEGER
1290 AFSGetAuthenticationId( void);
1291
1292 void
1293 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1294                    IN AFSCcb *Ccb);
1295
1296 BOOLEAN
1297 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1298
1299 PFILE_OBJECT
1300 AFSReferenceCacheFileObject( void);
1301
1302 void
1303 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1304
1305 NTSTATUS
1306 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1307
1308 NTSTATUS
1309 AFSCloseLibrary( void);
1310
1311 NTSTATUS
1312 AFSDefaultLogMsg( IN ULONG Subsystem,
1313                   IN ULONG Level,
1314                   IN PCCH Format,
1315                   ...);
1316
1317 NTSTATUS
1318 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1319                     IN ULONG InputBufferLength,
1320                     IN AFSStatusInfoCB *StatusInfo,
1321                     OUT ULONG *ReturnLength);
1322
1323 NTSTATUS
1324 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1325                        IN UNICODE_STRING *ComponentName);
1326
1327 NTSTATUS
1328 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1329                            OUT UNICODE_STRING *ComponentName);
1330
1331 void
1332 AFSDumpTraceFiles_Default( void);
1333
1334 void *
1335 AFSLibExAllocatePoolWithTag( IN POOL_TYPE  PoolType,
1336                              IN SIZE_T  NumberOfBytes,
1337                              IN ULONG  Tag);
1338
1339 BOOLEAN
1340 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1341
1342 NTSTATUS
1343 AFSCreateDefaultSecurityDescriptor( void);
1344
1345 //
1346 // AFSWorker.cpp Prototypes
1347 //
1348
1349 NTSTATUS
1350 AFSInitializeWorkerPool( void);
1351
1352 NTSTATUS
1353 AFSRemoveWorkerPool( void);
1354
1355 NTSTATUS
1356 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1357                      IN PKSTART_ROUTINE WorkerRoutine);
1358
1359 NTSTATUS
1360 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1361
1362 NTSTATUS
1363 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1364
1365 NTSTATUS
1366 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1367
1368 NTSTATUS
1369 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1370
1371 void
1372 AFSWorkerThread( IN PVOID Context);
1373
1374 void
1375 AFSIOWorkerThread( IN PVOID Context);
1376
1377 void
1378 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1379
1380 void
1381 AFSVolumeWorkerThread( IN PVOID Context);
1382
1383 NTSTATUS
1384 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1385
1386 NTSTATUS
1387 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1388
1389 NTSTATUS
1390 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1391
1392 AFSWorkItem *
1393 AFSRemoveWorkItem( void);
1394
1395 AFSWorkItem *
1396 AFSRemoveIOWorkItem( void);
1397
1398 NTSTATUS
1399 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1400
1401 NTSTATUS
1402 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1403
1404 NTSTATUS
1405 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1406
1407 NTSTATUS
1408 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1409
1410 NTSTATUS
1411 AFSQueueFlushExtents( IN AFSFcb *Fcb);
1412
1413 NTSTATUS
1414 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1415                    IN PIRP Irp,
1416                    IN HANDLE CallerProcess);
1417
1418 NTSTATUS
1419 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1420                     IN PIRP Irp,
1421                     IN HANDLE CallerProcess);
1422
1423 NTSTATUS
1424 AFSQueueGlobalRootEnumeration( void);
1425
1426 NTSTATUS
1427 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1428
1429 NTSTATUS
1430 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1431                   IN UCHAR FunctionCode,
1432                   IN ULONG RequestFLags,
1433                   IN AFSIoRun *IoRuns,
1434                   IN ULONG RunCount,
1435                   IN AFSGatherIo *GatherIo);
1436
1437 //
1438 // AFSMD5Support.cpp Prototypes
1439 //
1440
1441 void
1442 AFSGenerateMD5( IN char *DataBuffer,
1443                 IN ULONG Length,
1444                 OUT UCHAR *MD5Digest);
1445
1446 };
1447
1448 #endif /* _AFS_COMMON_H */