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 AFSInvalidateAllVolumes( VOID);
1161 AFSVerifyEntry( IN GUID *AuthGroup,
1162 IN AFSDirectoryCB *DirectoryCB);
1165 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1168 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1171 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1172 IN GUID *AuthGroup);
1175 AFSIsVolumeFID( IN AFSFileID *FileID);
1178 AFSIsFinalNode( IN AFSFcb *Fcb);
1181 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1182 IN AFSDirEnumEntry *DirEnumEntry);
1185 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1187 IN BOOLEAN PurgeContent,
1188 IN BOOLEAN FastCall);
1191 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1192 IN UNICODE_STRING *SecondaryName);
1195 AFSInitializeSpecialShareNameList( void);
1198 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1201 AFSWaitOnQueuedReleases( void);
1204 AFSIsEqualFID( IN AFSFileID *FileId1,
1205 IN AFSFileID *FileId2);
1208 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1211 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1214 AFSIsRelativeName( IN UNICODE_STRING *Name);
1217 AFSUpdateName( IN UNICODE_STRING *Name);
1220 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1221 IN OUT ULONG *Flags,
1222 IN WCHAR *NameBuffer,
1223 IN USHORT NameLength);
1226 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1227 IN ULONG InitialElementCount);
1230 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1231 IN UNICODE_STRING *Path,
1232 IN AFSDirectoryCB *DirectoryCB);
1235 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1236 IN AFSNameArrayHdr *RelatedNameArray,
1237 IN AFSDirectoryCB *DirectoryCB);
1240 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1243 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1244 IN AFSDirectoryCB *DirEntry);
1247 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1248 IN AFSDirectoryCB *DirectoryCB);
1251 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1254 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1257 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1258 IN AFSDirectoryCB *DirEntry);
1261 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1264 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1267 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1270 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1273 AFSVerifyVolume( IN ULONGLONG ProcessId,
1274 IN AFSVolumeCB *VolumeCB);
1277 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1280 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1281 IN AFSDirectoryCB *DirectoryCB,
1282 IN UNICODE_STRING *ParentPathName,
1283 IN AFSNameArrayHdr *RelatedNameArray,
1285 OUT AFSFileInfoCB *FileInfo);
1288 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1289 IN ULONGLONG HashIndex);
1292 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1295 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1296 OUT AFSDirectoryCB **TargetDirEntry);
1299 AFSCleanupFcb( IN AFSFcb *Fcb,
1300 IN BOOLEAN ForceFlush);
1303 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1304 IN UNICODE_STRING *NewFileName);
1307 AFSReadCacheFile( IN void *ReadBuffer,
1308 IN LARGE_INTEGER *ReadOffset,
1309 IN ULONG RequestedDataLength,
1310 IN OUT PULONG BytesRead);
1313 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1318 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1321 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1322 IN AFSDirectoryCB *DirEntry);
1325 AFSGetAuthenticationId( void);
1328 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1332 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1335 AFSReferenceCacheFileObject( void);
1338 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1341 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1344 AFSCloseLibrary( void);
1347 AFSDefaultLogMsg( IN ULONG Subsystem,
1353 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1354 IN ULONG InputBufferLength,
1355 IN AFSStatusInfoCB *StatusInfo,
1356 OUT ULONG *ReturnLength);
1359 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1360 IN UNICODE_STRING *ComponentName);
1363 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1364 OUT UNICODE_STRING *ComponentName);
1367 AFSDumpTraceFiles_Default( void);
1370 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1371 IN SIZE_T NumberOfBytes,
1375 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1378 AFSCreateDefaultSecurityDescriptor( void);
1381 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1382 OUT UNICODE_STRING *ParentPath);
1385 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1386 IN AFSObjectInfoCB *ObjectInfo,
1387 IN BOOLEAN WriteAccess,
1388 OUT GUID *AuthGroup);
1391 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1392 IN ULONG InvalidateReason);
1395 // AFSWorker.cpp Prototypes
1399 AFSInitializeWorkerPool( void);
1402 AFSRemoveWorkerPool( void);
1405 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1406 IN PKSTART_ROUTINE WorkerRoutine);
1409 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1412 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1415 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1418 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1421 AFSWorkerThread( IN PVOID Context);
1424 AFSIOWorkerThread( IN PVOID Context);
1427 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1430 AFSVolumeWorkerThread( IN PVOID Context);
1433 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1436 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1439 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1442 AFSRemoveWorkItem( void);
1445 AFSRemoveIOWorkItem( void);
1448 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1451 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1454 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1457 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1460 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1461 IN GUID *AuthGroup);
1464 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1466 IN HANDLE CallerProcess);
1469 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1471 IN HANDLE CallerProcess);
1474 AFSQueueGlobalRootEnumeration( void);
1477 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1480 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1481 IN UCHAR FunctionCode,
1482 IN ULONG RequestFLags,
1483 IN AFSIoRun *IoRuns,
1485 IN AFSGatherIo *GatherIo);
1488 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1489 IN ULONG InvalidateReason);
1492 // AFSMD5Support.cpp Prototypes
1496 AFSGenerateMD5( IN char *DataBuffer,
1498 OUT UCHAR *MD5Digest);
1502 #endif /* _AFS_COMMON_H */