2 * Copyright (c) 2008, 2009, 2010, 2011 Kernel Drivers, LLC.
3 * Copyright (c) 2009, 2010, 2011 Your File System, Inc.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
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
14 * this list of conditions and the following disclaimer in the
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.
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.
45 #define AFS_KERNEL_MODE
48 #include <wdmsec.h> // for IoCreateDeviceSecure
51 #include "AFSDefines.h"
53 #include "AFSUserDefines.h"
55 #include "AFSUserIoctl.h"
57 #include "AFSUserStructs.h"
59 #include "AFSRedirCommonDefines.h"
61 #include "AFSRedirCommonStructs.h"
63 #include "AFSStructs.h"
65 #include "AFSProvider.h"
68 #include "AFSExtern.h"
72 #include "ntstrsafe.h"
75 ZwQueryInformationProcess(
76 __in HANDLE ProcessHandle,
77 __in PROCESSINFOCLASS ProcessInformationClass,
78 __out PVOID ProcessInformation,
79 __in ULONG ProcessInformationLength,
80 __out_opt PULONG ReturnLength
86 RtlAbsoluteToSelfRelativeSD( IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
87 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
88 IN OUT PULONG BufferLength );
90 #ifndef FILE_OPEN_REPARSE_POINT
91 #define FILE_OPEN_REPARSE_POINT 0x00200000
94 // AFSBTreeSupport.cpp Prototypes
98 AFSLocateCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
100 IN OUT AFSDirectoryCB **DirEntry);
103 AFSLocateCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
105 IN OUT AFSDirectoryCB **DirEntry);
108 AFSInsertCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
109 IN AFSDirectoryCB *DirEntry);
112 AFSInsertCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
113 IN AFSDirectoryCB *DirEntry);
116 AFSRemoveCaseSensitiveDirEntry( IN AFSDirectoryCB **RootNode,
117 IN AFSDirectoryCB *DirEntry);
120 AFSRemoveCaseInsensitiveDirEntry( IN AFSDirectoryCB **RootNode,
121 IN AFSDirectoryCB *DirEntry);
124 AFSLocateShortNameDirEntry( IN AFSDirectoryCB *RootNode,
126 IN OUT AFSDirectoryCB **DirEntry);
129 AFSInsertShortNameDirEntry( IN AFSDirectoryCB *RootNode,
130 IN AFSDirectoryCB *DirEntry);
133 AFSRemoveShortNameDirEntry( IN AFSDirectoryCB **RootNode,
134 IN AFSDirectoryCB *DirEntry);
137 AFSLocateHashEntry( IN AFSBTreeEntry *TopNode,
138 IN ULONGLONG HashIndex,
139 IN OUT AFSBTreeEntry **TreeEntry);
142 AFSInsertHashEntry( IN AFSBTreeEntry *TopNode,
143 IN AFSBTreeEntry *FileIDEntry);
146 AFSRemoveHashEntry( IN AFSBTreeEntry **TopNode,
147 IN AFSBTreeEntry *FileIDEntry);
150 // AFSInit.cpp Prototypes
154 DriverEntry( IN PDRIVER_OBJECT DriverObj,
155 IN PUNICODE_STRING RegPath);
158 AFSUnload( IN PDRIVER_OBJECT DriverObject);
161 // AFSCommSupport.cpp Prototypes
165 AFSEnumerateDirectory( IN GUID *AuthGroup,
166 IN AFSObjectInfoCB *ObjectInfoCB,
167 IN BOOLEAN FastQuery);
170 AFSEnumerateDirectoryNoResponse( IN GUID *AuthGroup,
171 IN AFSFileID *FileId);
174 AFSVerifyDirectoryContent( IN AFSObjectInfoCB *ObjectInfo,
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);
186 AFSUpdateFileInformation( IN AFSFileID *ParentFid,
187 IN AFSObjectInfoCB *ObjectInfo,
191 AFSNotifyDelete( IN AFSDirectoryCB *DirectoryCB,
193 IN BOOLEAN CheckOnly);
196 AFSNotifyRename( IN AFSObjectInfoCB *ObjectInfo,
198 IN AFSObjectInfoCB *ParentObjectInfo,
199 IN AFSObjectInfoCB *TargetParentObjectInfo,
200 IN AFSDirectoryCB *DirectoryCB,
201 IN UNICODE_STRING *TargetName,
202 OUT AFSFileID *UpdatedFID);
205 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
208 OUT AFSDirEnumEntry **DirEnumEntry);
211 AFSEvaluateTargetByName( IN GUID *AuthGroup,
212 IN AFSObjectInfoCB *ParentObjectInfo,
213 IN PUNICODE_STRING SourceName,
214 OUT AFSDirEnumEntry **DirEnumEntry);
217 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
218 IN AFSFileID *FileID,
219 OUT AFSVolumeInfoCB *VolumeInformation);
222 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
223 IN ULONG InputLength,
224 IN ULONG OutputLength,
225 IN void *InputDataBuffer,
226 OUT void *OutputDataBuffer,
227 OUT ULONG *BytesReturned);
230 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
231 IN ULONG InformationClass,
232 IN ULONG InputLength,
233 IN void *DataBuffer);
236 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
237 IN ULONG InformationClass,
238 IN ULONG OutputLength,
240 OUT ULONG *BytesReturned);
243 AFSReleaseFid( IN AFSFileID *FileId);
246 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
247 IN LARGE_INTEGER *ExtentOffset,
251 // AFSCreate.cpp Prototypes
255 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
259 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
263 AFSOpenRedirector( IN PIRP Irp,
268 AFSOpenAFSRoot( IN PIRP Irp,
273 AFSOpenRoot( IN PIRP Irp,
274 IN AFSVolumeCB *VolumeCB,
280 AFSProcessCreate( IN PIRP Irp,
282 IN AFSVolumeCB *VolumeCB,
283 IN AFSDirectoryCB *ParentDirCB,
284 IN PUNICODE_STRING FileName,
285 IN PUNICODE_STRING ComponentName,
286 IN PUNICODE_STRING FullFileName,
291 AFSOpenTargetDirectory( IN PIRP Irp,
292 IN AFSVolumeCB *VolumeCB,
293 IN AFSDirectoryCB *ParentDirectoryCB,
294 IN AFSDirectoryCB *TargetDirectoryCB,
295 IN UNICODE_STRING *TargetName,
300 AFSProcessOpen( IN PIRP Irp,
302 IN AFSVolumeCB *VolumeCB,
303 IN AFSDirectoryCB *ParentDirCB,
304 IN AFSDirectoryCB *DirectoryCB,
309 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
311 IN AFSVolumeCB *VolumeCB,
313 IN AFSDirectoryCB *ParentDirCB,
314 IN AFSDirectoryCB *DirectoryCB,
319 AFSControlDeviceCreate( IN PIRP Irp);
322 AFSOpenIOCtlFcb( IN PIRP Irp,
324 IN AFSDirectoryCB *ParentDirCB,
329 AFSOpenSpecialShareFcb( IN PIRP Irp,
331 IN AFSDirectoryCB *DirectoryCB,
336 // AFSExtentsSupport.cpp Prototypes
339 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
342 AFSExtentForOffset( IN AFSFcb *Fcb,
343 IN PLARGE_INTEGER Offset,
344 IN BOOLEAN ReturnPrevious);
346 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
350 AFSRequestExtents( IN AFSFcb *Fcb,
352 IN PLARGE_INTEGER Offset,
354 OUT BOOLEAN *FullyMApped);
356 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
357 IN PLARGE_INTEGER Offset,
359 IN OUT AFSExtent **FirstExtent,
360 OUT AFSExtent **LastExtent);
363 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
365 IN PLARGE_INTEGER Offset,
369 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
373 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
376 AFSProcessReleaseFileExtents( IN PIRP Irp);
379 AFSProcessExtentFailure( PIRP Irp);
382 AFSProcessSetExtents( IN AFSFcb *pFcb,
384 IN AFSFileExtentCB *Result);
387 AFSFlushExtents( IN AFSFcb *pFcb,
391 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
395 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
399 AFSMarkDirty( IN AFSFcb *pFcb,
400 IN AFSExtent *StartExtent,
401 IN ULONG ExtentsCount,
402 IN LARGE_INTEGER *StartingByte,
403 IN BOOLEAN DerefExtents);
406 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
410 AFSTrimExtents( IN AFSFcb *Fcb,
411 IN PLARGE_INTEGER FileSize);
414 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
416 IN AFSFileExtentCB *Result);
419 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
420 IN ULONG ExtentsCount);
423 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
424 IN ULONG ExtentsCount);
427 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
428 IN AFSExtent *Extent);
431 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
435 AFSSetupMD5Hash( IN AFSFcb *Fcb,
436 IN AFSExtent *StartExtent,
437 IN ULONG ExtentsCount,
438 IN void *SystemBuffer,
439 IN LARGE_INTEGER *ByteOffset,
445 // AFSIoSupp.cpp Prototypes
448 AFSGetExtents( IN AFSFcb *pFcb,
449 IN PLARGE_INTEGER Offset,
452 OUT ULONG *ExtentCount,
453 OUT ULONG *RunCount);
456 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
458 IN PVOID SystemBuffer,
459 IN OUT AFSIoRun *IoRun,
460 IN PLARGE_INTEGER Start,
463 IN OUT ULONG *RunCount);
466 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
467 IN UCHAR FunctionCode,
471 IN OUT AFSGatherIo *Gather);
474 AFSCompleteIo( IN AFSGatherIo *Gather,
478 AFSProcessExtentRun( IN PVOID SystemBuffer,
479 IN PLARGE_INTEGER Start,
482 IN BOOLEAN WriteRequest);
485 // AFSClose.cpp Prototypes
489 AFSClose( IN PDEVICE_OBJECT DeviceObject,
493 // AFSFcbSupport.cpp Prototypes
497 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
500 AFSInitVolume( IN GUID *AuthGroup,
501 IN AFSFileID *RootFid,
502 OUT AFSVolumeCB **VolumeCB);
505 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
508 AFSInitRootFcb( IN ULONGLONG ProcessID,
509 IN AFSVolumeCB *VolumeCB);
512 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
515 AFSInitCcb( IN OUT AFSCcb **Ccb);
518 AFSRemoveFcb( IN AFSFcb *Fcb);
521 AFSRemoveCcb( IN AFSFcb *Fcb,
525 AFSInsertCcb( IN AFSFcb *Fcb,
529 // AFSNameSupport.cpp Prototypes
533 AFSLocateNameEntry( IN GUID *AuthGroup,
534 IN PFILE_OBJECT FileObject,
535 IN UNICODE_STRING *RootPathName,
536 IN UNICODE_STRING *ParsedPathName,
537 IN AFSNameArrayHdr *NameArray,
539 OUT AFSVolumeCB **VolumeCB,
540 IN OUT AFSDirectoryCB **ParentDirectoryCB,
541 OUT AFSDirectoryCB **DirectoryCB,
542 OUT PUNICODE_STRING ComponentName);
545 AFSCreateDirEntry( IN GUID *AuthGroup,
546 IN AFSObjectInfoCB *ParentObjectInfo,
547 IN AFSDirectoryCB *ParentDirCB,
548 IN PUNICODE_STRING FileName,
549 IN PUNICODE_STRING ComponentName,
551 IN OUT AFSDirectoryCB **DirEntry);
554 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
555 IN AFSDirectoryCB *DirEntry,
556 IN BOOLEAN InsertInEnumList);
559 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
560 IN AFSDirectoryCB *DirEntry);
563 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
564 IN AFSDirectoryCB *DirEntry,
565 IN BOOLEAN RemoveFromEnumList);
568 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
569 IN OUT PUNICODE_STRING TargetFileName);
572 AFSParseName( IN PIRP Irp,
574 OUT PUNICODE_STRING FileName,
575 OUT PUNICODE_STRING ParsedFileName,
576 OUT PUNICODE_STRING RootFileName,
577 OUT ULONG *ParseFlags,
578 OUT AFSVolumeCB **VolumeCB,
579 OUT AFSDirectoryCB **ParentDirectoryCB,
580 OUT AFSNameArrayHdr **NameArray);
583 AFSCheckCellName( IN GUID *AuthGroup,
584 IN UNICODE_STRING *CellName,
585 OUT AFSDirectoryCB **ShareDirEntry);
588 AFSBuildMountPointTarget( IN GUID *AuthGroup,
589 IN AFSDirectoryCB *DirectoryCB,
590 OUT AFSVolumeCB **VolumeCB);
593 AFSBuildRootVolume( IN GUID *AuthGroup,
594 IN AFSFileID *FileId,
595 OUT AFSVolumeCB **TargetVolumeCB);
598 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
599 IN PFILE_OBJECT FileObject,
600 IN UNICODE_STRING *RemainingPath,
604 // AFSNetworkProviderSupport.cpp
608 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
609 IN OUT PULONG ResultStatus,
610 IN OUT ULONG_PTR *ReturnOutputBufferLength);
613 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
614 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
615 IN OUT ULONG_PTR *ReturnOutputBufferLength);
618 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
619 IN OUT WCHAR *RemoteName,
620 IN ULONG RemoteNameBufferLength,
621 IN OUT ULONG_PTR *ReturnOutputBufferLength);
624 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
625 IN ULONG ConnectionBufferLength,
626 IN OUT ULONG_PTR *ReturnOutputBufferLength);
629 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
630 IN ULONG DisplayType);
632 AFSProviderConnectionCB *
633 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
636 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
637 IN AFSProviderConnectionCB *RootConnection,
638 IN ULONG BufferLength,
639 OUT PULONG CopiedLength);
642 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
643 IN ULONG BufferLength,
644 IN OUT ULONG_PTR *ReturnOutputBufferLength);
647 AFSIsDriveMapped( IN WCHAR DriveMapping);
650 // AFSRead.cpp Prototypes
654 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
656 IN HANDLE OnBehalfOf);
659 AFSRead( IN PDEVICE_OBJECT DeviceObject,
664 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
668 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
672 // AFSWrite.cpp Prototypes
676 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
678 IN HANDLE CallingUser);
681 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
685 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
689 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
693 // AFSFileInfo.cpp Prototypes
697 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
701 AFSQueryBasicInfo( IN PIRP Irp,
702 IN AFSDirectoryCB *DirectoryCB,
703 IN OUT PFILE_BASIC_INFORMATION Buffer,
704 IN OUT PLONG Length);
707 AFSQueryStandardInfo( IN PIRP Irp,
708 IN AFSDirectoryCB *DirectoryCB,
709 IN OUT PFILE_STANDARD_INFORMATION Buffer,
710 IN OUT PLONG Length);
713 AFSQueryInternalInfo( IN PIRP Irp,
715 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
716 IN OUT PLONG Length);
719 AFSQueryEaInfo( IN PIRP Irp,
720 IN AFSDirectoryCB *DirectoryCB,
721 IN OUT PFILE_EA_INFORMATION Buffer,
722 IN OUT PLONG Length);
725 AFSQueryPositionInfo( IN PIRP Irp,
727 IN OUT PFILE_POSITION_INFORMATION Buffer,
728 IN OUT PLONG Length);
731 AFSQueryNameInfo( IN PIRP Irp,
732 IN AFSDirectoryCB *DirectoryCB,
733 IN OUT PFILE_NAME_INFORMATION Buffer,
734 IN OUT PLONG Length);
737 AFSQueryShortNameInfo( IN PIRP Irp,
738 IN AFSDirectoryCB *DirectoryCB,
739 IN OUT PFILE_NAME_INFORMATION Buffer,
740 IN OUT PLONG Length);
743 AFSQueryNetworkInfo( IN PIRP Irp,
744 IN AFSDirectoryCB *DirectoryCB,
745 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
746 IN OUT PLONG Length);
749 AFSQueryStreamInfo( IN PIRP Irp,
750 IN AFSDirectoryCB *DirectoryCB,
751 IN OUT FILE_STREAM_INFORMATION *Buffer,
752 IN OUT PLONG Length);
755 AFSQueryAccess( IN PIRP Irp,
757 IN OUT PFILE_ACCESS_INFORMATION Buffer,
758 IN OUT PLONG Length);
761 AFSQueryMode( IN PIRP Irp,
763 IN OUT PFILE_MODE_INFORMATION Buffer,
764 IN OUT PLONG Length);
767 AFSQueryAlignment( IN PIRP Irp,
769 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
770 IN OUT PLONG Length);
773 AFSQueryAttribTagInfo( IN PIRP Irp,
774 IN AFSDirectoryCB *DirectoryCB,
775 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
776 IN OUT PLONG Length);
779 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
780 IN AFSDirectoryCB *DirectoryCB,
781 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
782 IN OUT PLONG Length);
785 AFSQueryPhysicalNameInfo( IN PIRP Irp,
786 IN AFSDirectoryCB *DirectoryCB,
787 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
788 IN OUT PLONG Length);
791 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
795 AFSSetBasicInfo( IN PIRP Irp,
796 IN AFSDirectoryCB *DirectoryCB);
799 AFSSetDispositionInfo( IN PIRP Irp,
800 IN AFSDirectoryCB *DirectoryCB);
803 AFSSetRenameInfo( IN PIRP Irp);
806 AFSSetPositionInfo( IN PIRP Irp,
807 IN AFSDirectoryCB *DirectoryCB);
810 AFSSetAllocationInfo( IN PIRP Irp,
811 IN AFSDirectoryCB *DirectoryCB);
814 AFSSetEndOfFileInfo( IN PIRP Irp,
815 IN AFSDirectoryCB *DirectoryCB);
818 AFSProcessShareSetInfo( IN IRP *Irp,
823 AFSProcessShareQueryInfo( IN IRP *Irp,
828 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
831 IN OUT LONG *Length);
834 // AFSEa.cpp Prototypes
838 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
842 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
846 // AFSFlushBuffers.cpp Prototypes
850 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
854 // AFSVolumeInfo.cpp Prototypes
858 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
862 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
866 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
867 IN PFILE_FS_VOLUME_INFORMATION Buffer,
868 IN OUT PULONG Length);
871 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
872 IN PFILE_FS_SIZE_INFORMATION Buffer,
873 IN OUT PULONG Length);
876 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
877 IN PFILE_FS_DEVICE_INFORMATION Buffer,
878 IN OUT PULONG Length);
881 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
882 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
883 IN OUT PULONG Length);
886 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
887 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
888 IN OUT PULONG Length);
891 // AFSDirControl.cpp Prototypes
895 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
899 AFSQueryDirectory( IN PIRP Irp);
902 AFSNotifyChangeDirectory( IN PIRP Irp);
905 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
909 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
914 AFSSnapshotDirectory( IN AFSFcb *Fcb,
916 IN BOOLEAN ResetIndex);
919 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
921 IN BOOLEAN WatchTree,
922 IN ULONG CompletionFilter,
926 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
928 IN ULONG NotifyFilter,
929 IN ULONG NotificationAction);
932 AFSNotifyReportChangeCallback( IN void *NotifyContext,
933 IN void *FilterContext);
936 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
940 // AFSFSControl.cpp Prototypes
944 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
948 AFSProcessUserFsRequest( IN PIRP Irp);
951 AFSProcessShareFsCtrl( IN IRP *Irp,
956 // AFSDevControl.cpp Prototypes
960 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
964 // AFSInternalDevControl.cpp Prototypes
968 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
972 // AFSShutdown.cpp Prototypes
976 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
981 AFSShutdownFilesystem( void);
984 // AFSLockControl.cpp Prototypes
988 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
992 // AFSCleanup.cpp Prototypes
996 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1000 // AFSSecurity.cpp Prototypes
1004 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1008 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1012 // AFSSystemControl.cpp Prototypes
1016 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1020 // AFSQuota.cpp Prototypes
1024 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1028 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1032 // AFSGeneric.cpp Prototypes
1036 AFSExceptionFilter( IN ULONG Code,
1037 IN PEXCEPTION_POINTERS ExceptPtrs);
1040 AFSAcquireExcl( IN PERESOURCE Resource,
1044 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1048 AFSAcquireShared( IN PERESOURCE Resource,
1052 AFSReleaseResource( IN PERESOURCE Resource);
1055 AFSConvertToShared( IN PERESOURCE Resource);
1058 AFSCompleteRequest( IN PIRP Irp,
1062 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1063 IN BOOLEAN UpperCaseName);
1066 AFSLockSystemBuffer( IN PIRP Irp,
1070 AFSLockUserBuffer( IN void *UserBuffer,
1071 IN ULONG BufferLength,
1075 AFSMapToService( IN PIRP Irp,
1076 IN ULONG ByteCount);
1079 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1083 AFSInitializeLibraryDevice( void);
1086 AFSRemoveLibraryDevice( void);
1089 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1093 AFSInitializeGlobalDirectoryEntries( void);
1096 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1097 IN PUNICODE_STRING FileName,
1098 IN PUNICODE_STRING TargetName,
1099 IN AFSDirEnumEntry *DirEnumEntry,
1100 IN ULONG FileIndex);
1103 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1104 IN BOOLEAN DirectoryEntry);
1107 AFSEvaluateNode( IN GUID *AuthGroup,
1108 IN AFSDirectoryCB *DirEntry);
1111 AFSValidateSymLink( IN GUID *AuthGroup,
1112 IN AFSDirectoryCB *DirEntry);
1115 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1118 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1122 AFSIsChildOfParent( IN AFSFcb *Dcb,
1127 AFSCreateHighIndex( IN AFSFileID *FileID);
1131 AFSCreateLowIndex( IN AFSFileID *FileID);
1134 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1135 IN ACCESS_MASK GrantedAccess,
1136 IN BOOLEAN DirectoryEntry);
1139 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1142 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1143 IN UNICODE_STRING *SubstituteName,
1144 IN ULONG StringIndex);
1147 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1148 IN OUT UNICODE_STRING *ComponentName,
1149 IN UNICODE_STRING *SubstituteName,
1150 IN OUT UNICODE_STRING *RemainingPath,
1151 IN BOOLEAN FreePathName);
1154 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1158 AFSVerifyEntry( IN GUID *AuthGroup,
1159 IN AFSDirectoryCB *DirectoryCB);
1162 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1165 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1168 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1169 IN GUID *AuthGroup);
1172 AFSIsVolumeFID( IN AFSFileID *FileID);
1175 AFSIsFinalNode( IN AFSFcb *Fcb);
1178 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1179 IN AFSDirEnumEntry *DirEnumEntry);
1182 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1184 IN BOOLEAN PurgeContent,
1185 IN BOOLEAN FastCall);
1188 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1189 IN UNICODE_STRING *SecondaryName);
1192 AFSInitializeSpecialShareNameList( void);
1195 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1198 AFSWaitOnQueuedReleases( void);
1201 AFSIsEqualFID( IN AFSFileID *FileId1,
1202 IN AFSFileID *FileId2);
1205 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1208 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1211 AFSIsRelativeName( IN UNICODE_STRING *Name);
1214 AFSUpdateName( IN UNICODE_STRING *Name);
1217 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1218 IN OUT ULONG *Flags,
1219 IN WCHAR *NameBuffer,
1220 IN USHORT NameLength);
1223 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1224 IN ULONG InitialElementCount);
1227 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1228 IN UNICODE_STRING *Path,
1229 IN AFSDirectoryCB *DirectoryCB);
1232 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1233 IN AFSNameArrayHdr *RelatedNameArray,
1234 IN AFSDirectoryCB *DirectoryCB);
1237 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1240 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1241 IN AFSDirectoryCB *DirEntry);
1244 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1245 IN AFSDirectoryCB *DirectoryCB);
1248 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1251 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1254 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1255 IN AFSDirectoryCB *DirEntry);
1258 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1261 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1264 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1267 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1270 AFSVerifyVolume( IN ULONGLONG ProcessId,
1271 IN AFSVolumeCB *VolumeCB);
1274 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1277 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1278 IN AFSDirectoryCB *DirectoryCB,
1279 IN UNICODE_STRING *ParentPathName,
1280 IN AFSNameArrayHdr *RelatedNameArray,
1282 OUT AFSFileInfoCB *FileInfo);
1285 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1286 IN ULONGLONG HashIndex);
1289 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1292 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1293 OUT AFSDirectoryCB **TargetDirEntry);
1296 AFSCleanupFcb( IN AFSFcb *Fcb,
1297 IN BOOLEAN ForceFlush);
1300 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1301 IN UNICODE_STRING *NewFileName);
1304 AFSReadCacheFile( IN void *ReadBuffer,
1305 IN LARGE_INTEGER *ReadOffset,
1306 IN ULONG RequestedDataLength,
1307 IN OUT PULONG BytesRead);
1310 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1315 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1318 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1319 IN AFSDirectoryCB *DirEntry);
1322 AFSGetAuthenticationId( void);
1325 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1329 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1332 AFSReferenceCacheFileObject( void);
1335 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1338 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1341 AFSCloseLibrary( void);
1344 AFSDefaultLogMsg( IN ULONG Subsystem,
1350 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1351 IN ULONG InputBufferLength,
1352 IN AFSStatusInfoCB *StatusInfo,
1353 OUT ULONG *ReturnLength);
1356 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1357 IN UNICODE_STRING *ComponentName);
1360 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1361 OUT UNICODE_STRING *ComponentName);
1364 AFSDumpTraceFiles_Default( void);
1367 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1368 IN SIZE_T NumberOfBytes,
1372 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1375 AFSCreateDefaultSecurityDescriptor( void);
1378 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1379 OUT UNICODE_STRING *ParentPath);
1382 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1383 IN AFSObjectInfoCB *ObjectInfo,
1384 IN BOOLEAN WriteAccess,
1385 OUT GUID *AuthGroup);
1388 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1389 IN ULONG InvalidateReason);
1392 // AFSWorker.cpp Prototypes
1396 AFSInitializeWorkerPool( void);
1399 AFSRemoveWorkerPool( void);
1402 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1403 IN PKSTART_ROUTINE WorkerRoutine);
1406 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1409 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1412 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1415 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1418 AFSWorkerThread( IN PVOID Context);
1421 AFSIOWorkerThread( IN PVOID Context);
1424 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1427 AFSVolumeWorkerThread( IN PVOID Context);
1430 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1433 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1436 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1439 AFSRemoveWorkItem( void);
1442 AFSRemoveIOWorkItem( void);
1445 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1448 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1451 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1454 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1457 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1458 IN GUID *AuthGroup);
1461 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1463 IN HANDLE CallerProcess);
1466 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1468 IN HANDLE CallerProcess);
1471 AFSQueueGlobalRootEnumeration( void);
1474 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1477 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1478 IN UCHAR FunctionCode,
1479 IN ULONG RequestFLags,
1480 IN AFSIoRun *IoRuns,
1482 IN AFSGatherIo *GatherIo);
1485 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1486 IN ULONG InvalidateReason);
1489 // AFSMD5Support.cpp Prototypes
1493 AFSGenerateMD5( IN char *DataBuffer,
1495 OUT UCHAR *MD5Digest);
1499 #endif /* _AFS_COMMON_H */