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
50 #include <ntintsafe.h>
52 #include "AFSDefines.h"
54 #include "AFSUserDefines.h"
56 #include "AFSUserIoctl.h"
58 #include "AFSUserStructs.h"
60 #include "AFSRedirCommonDefines.h"
62 #include "AFSRedirCommonStructs.h"
64 #include "AFSStructs.h"
66 #include "AFSProvider.h"
69 #include "AFSExtern.h"
73 #include "ntstrsafe.h"
76 ZwQueryInformationProcess(
77 __in HANDLE ProcessHandle,
78 __in PROCESSINFOCLASS ProcessInformationClass,
79 __out PVOID ProcessInformation,
80 __in ULONG ProcessInformationLength,
81 __out_opt PULONG ReturnLength
87 RtlAbsoluteToSelfRelativeSD( IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
88 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
89 IN OUT PULONG BufferLength );
91 #ifndef FILE_OPEN_REPARSE_POINT
92 #define FILE_OPEN_REPARSE_POINT 0x00200000
95 // AFSBTreeSupport.cpp Prototypes
99 AFSLocateCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
101 IN OUT AFSDirectoryCB **DirEntry);
104 AFSLocateCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
106 IN OUT AFSDirectoryCB **DirEntry);
109 AFSInsertCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
110 IN AFSDirectoryCB *DirEntry);
113 AFSInsertCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
114 IN AFSDirectoryCB *DirEntry);
117 AFSRemoveCaseSensitiveDirEntry( IN AFSDirectoryCB **RootNode,
118 IN AFSDirectoryCB *DirEntry);
121 AFSRemoveCaseInsensitiveDirEntry( IN AFSDirectoryCB **RootNode,
122 IN AFSDirectoryCB *DirEntry);
125 AFSLocateShortNameDirEntry( IN AFSDirectoryCB *RootNode,
127 IN OUT AFSDirectoryCB **DirEntry);
130 AFSInsertShortNameDirEntry( IN AFSDirectoryCB *RootNode,
131 IN AFSDirectoryCB *DirEntry);
134 AFSRemoveShortNameDirEntry( IN AFSDirectoryCB **RootNode,
135 IN AFSDirectoryCB *DirEntry);
138 AFSLocateHashEntry( IN AFSBTreeEntry *TopNode,
139 IN ULONGLONG HashIndex,
140 IN OUT AFSBTreeEntry **TreeEntry);
143 AFSInsertHashEntry( IN AFSBTreeEntry *TopNode,
144 IN AFSBTreeEntry *FileIDEntry);
147 AFSRemoveHashEntry( IN AFSBTreeEntry **TopNode,
148 IN AFSBTreeEntry *FileIDEntry);
151 // AFSInit.cpp Prototypes
155 DriverEntry( IN PDRIVER_OBJECT DriverObj,
156 IN PUNICODE_STRING RegPath);
159 AFSUnload( IN PDRIVER_OBJECT DriverObject);
162 // AFSCommSupport.cpp Prototypes
166 AFSEnumerateDirectory( IN GUID *AuthGroup,
167 IN AFSObjectInfoCB *ObjectInfoCB,
168 IN BOOLEAN FastQuery);
171 AFSEnumerateDirectoryNoResponse( IN GUID *AuthGroup,
172 IN AFSFileID *FileId);
175 AFSVerifyDirectoryContent( IN AFSObjectInfoCB *ObjectInfo,
179 AFSNotifyFileCreate( IN GUID *AuthGroup,
180 IN AFSObjectInfoCB *ParentObjectInfo,
181 IN PLARGE_INTEGER FileSize,
182 IN ULONG FileAttributes,
183 IN UNICODE_STRING *FileName,
184 OUT AFSDirectoryCB **DirNode);
187 AFSUpdateFileInformation( IN AFSFileID *ParentFid,
188 IN AFSObjectInfoCB *ObjectInfo,
192 AFSNotifyDelete( IN AFSDirectoryCB *DirectoryCB,
194 IN BOOLEAN CheckOnly);
197 AFSNotifyRename( IN AFSObjectInfoCB *ObjectInfo,
199 IN AFSObjectInfoCB *ParentObjectInfo,
200 IN AFSObjectInfoCB *TargetParentObjectInfo,
201 IN AFSDirectoryCB *DirectoryCB,
202 IN UNICODE_STRING *TargetName,
203 OUT AFSFileID *UpdatedFID);
206 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
209 OUT AFSDirEnumEntry **DirEnumEntry);
212 AFSEvaluateTargetByName( IN GUID *AuthGroup,
213 IN AFSObjectInfoCB *ParentObjectInfo,
214 IN PUNICODE_STRING SourceName,
215 OUT AFSDirEnumEntry **DirEnumEntry);
218 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
219 IN AFSFileID *FileID,
220 OUT AFSVolumeInfoCB *VolumeInformation);
223 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
224 IN ULONG InputLength,
225 IN ULONG OutputLength,
226 IN void *InputDataBuffer,
227 OUT void *OutputDataBuffer,
228 OUT ULONG *BytesReturned);
231 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
232 IN ULONG InformationClass,
233 IN ULONG InputLength,
234 IN void *DataBuffer);
237 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
238 IN ULONG InformationClass,
239 IN ULONG OutputLength,
241 OUT ULONG *BytesReturned);
244 AFSReleaseFid( IN AFSFileID *FileId);
247 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
248 IN LARGE_INTEGER *ExtentOffset,
252 // AFSCreate.cpp Prototypes
256 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
260 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
264 AFSOpenRedirector( IN PIRP Irp,
269 AFSOpenAFSRoot( IN PIRP Irp,
274 AFSOpenRoot( IN PIRP Irp,
275 IN AFSVolumeCB *VolumeCB,
281 AFSProcessCreate( IN PIRP Irp,
283 IN AFSVolumeCB *VolumeCB,
284 IN AFSDirectoryCB *ParentDirCB,
285 IN PUNICODE_STRING FileName,
286 IN PUNICODE_STRING ComponentName,
287 IN PUNICODE_STRING FullFileName,
292 AFSOpenTargetDirectory( IN PIRP Irp,
293 IN AFSVolumeCB *VolumeCB,
294 IN AFSDirectoryCB *ParentDirectoryCB,
295 IN AFSDirectoryCB *TargetDirectoryCB,
296 IN UNICODE_STRING *TargetName,
301 AFSProcessOpen( IN PIRP Irp,
303 IN AFSVolumeCB *VolumeCB,
304 IN AFSDirectoryCB *ParentDirCB,
305 IN AFSDirectoryCB *DirectoryCB,
310 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
312 IN AFSVolumeCB *VolumeCB,
314 IN AFSDirectoryCB *ParentDirCB,
315 IN AFSDirectoryCB *DirectoryCB,
320 AFSControlDeviceCreate( IN PIRP Irp);
323 AFSOpenIOCtlFcb( IN PIRP Irp,
325 IN AFSDirectoryCB *ParentDirCB,
330 AFSOpenSpecialShareFcb( IN PIRP Irp,
332 IN AFSDirectoryCB *DirectoryCB,
337 // AFSExtentsSupport.cpp Prototypes
340 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
343 AFSExtentForOffset( IN AFSFcb *Fcb,
344 IN PLARGE_INTEGER Offset,
345 IN BOOLEAN ReturnPrevious);
347 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
351 AFSRequestExtents( IN AFSFcb *Fcb,
353 IN PLARGE_INTEGER Offset,
355 OUT BOOLEAN *FullyMApped);
357 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
358 IN PLARGE_INTEGER Offset,
360 IN OUT AFSExtent **FirstExtent,
361 OUT AFSExtent **LastExtent);
364 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
366 IN PLARGE_INTEGER Offset,
370 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
374 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
377 AFSProcessReleaseFileExtents( IN PIRP Irp);
380 AFSProcessExtentFailure( PIRP Irp);
383 AFSProcessSetExtents( IN AFSFcb *pFcb,
385 IN AFSFileExtentCB *Result);
388 AFSFlushExtents( IN AFSFcb *pFcb,
392 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
396 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
400 AFSMarkDirty( IN AFSFcb *pFcb,
401 IN AFSExtent *StartExtent,
402 IN ULONG ExtentsCount,
403 IN LARGE_INTEGER *StartingByte,
404 IN BOOLEAN DerefExtents);
407 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
411 AFSTrimExtents( IN AFSFcb *Fcb,
412 IN PLARGE_INTEGER FileSize);
415 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
417 IN AFSFileExtentCB *Result);
420 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
421 IN ULONG ExtentsCount);
424 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
425 IN ULONG ExtentsCount);
428 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
429 IN AFSExtent *Extent);
432 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
435 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
436 AFSByteRange ** pByteRangeList);
440 AFSSetupMD5Hash( IN AFSFcb *Fcb,
441 IN AFSExtent *StartExtent,
442 IN ULONG ExtentsCount,
443 IN void *SystemBuffer,
444 IN LARGE_INTEGER *ByteOffset,
450 // AFSIoSupp.cpp Prototypes
453 AFSGetExtents( IN AFSFcb *pFcb,
454 IN PLARGE_INTEGER Offset,
457 OUT ULONG *ExtentCount,
458 OUT ULONG *RunCount);
461 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
463 IN PVOID SystemBuffer,
464 IN OUT AFSIoRun *IoRun,
465 IN PLARGE_INTEGER Start,
468 IN OUT ULONG *RunCount);
471 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
472 IN UCHAR FunctionCode,
476 IN OUT AFSGatherIo *Gather);
479 AFSCompleteIo( IN AFSGatherIo *Gather,
483 AFSProcessExtentRun( IN PVOID SystemBuffer,
484 IN PLARGE_INTEGER Start,
487 IN BOOLEAN WriteRequest);
490 // AFSClose.cpp Prototypes
494 AFSClose( IN PDEVICE_OBJECT DeviceObject,
498 // AFSFcbSupport.cpp Prototypes
502 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
505 AFSInitVolume( IN GUID *AuthGroup,
506 IN AFSFileID *RootFid,
507 OUT AFSVolumeCB **VolumeCB);
510 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
513 AFSInitRootFcb( IN ULONGLONG ProcessID,
514 IN AFSVolumeCB *VolumeCB);
517 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
520 AFSInitCcb( IN OUT AFSCcb **Ccb);
523 AFSRemoveFcb( IN AFSFcb **Fcb);
526 AFSRemoveCcb( IN AFSFcb *Fcb,
530 AFSInsertCcb( IN AFSFcb *Fcb,
534 // AFSNameSupport.cpp Prototypes
538 AFSLocateNameEntry( IN GUID *AuthGroup,
539 IN PFILE_OBJECT FileObject,
540 IN UNICODE_STRING *RootPathName,
541 IN UNICODE_STRING *ParsedPathName,
542 IN AFSNameArrayHdr *NameArray,
544 OUT AFSVolumeCB **VolumeCB,
545 IN OUT AFSDirectoryCB **ParentDirectoryCB,
546 OUT AFSDirectoryCB **DirectoryCB,
547 OUT PUNICODE_STRING ComponentName);
550 AFSCreateDirEntry( IN GUID *AuthGroup,
551 IN AFSObjectInfoCB *ParentObjectInfo,
552 IN AFSDirectoryCB *ParentDirCB,
553 IN PUNICODE_STRING FileName,
554 IN PUNICODE_STRING ComponentName,
556 IN OUT AFSDirectoryCB **DirEntry);
559 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
560 IN AFSDirectoryCB *DirEntry,
561 IN BOOLEAN InsertInEnumList);
564 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
565 IN AFSDirectoryCB *DirEntry);
568 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
569 IN AFSDirectoryCB *DirEntry,
570 IN BOOLEAN RemoveFromEnumList);
573 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
574 IN OUT PUNICODE_STRING TargetFileName);
577 AFSParseName( IN PIRP Irp,
579 OUT PUNICODE_STRING FileName,
580 OUT PUNICODE_STRING ParsedFileName,
581 OUT PUNICODE_STRING RootFileName,
582 OUT ULONG *ParseFlags,
583 OUT AFSVolumeCB **VolumeCB,
584 OUT AFSDirectoryCB **ParentDirectoryCB,
585 OUT AFSNameArrayHdr **NameArray);
588 AFSCheckCellName( IN GUID *AuthGroup,
589 IN UNICODE_STRING *CellName,
590 OUT AFSDirectoryCB **ShareDirEntry);
593 AFSBuildMountPointTarget( IN GUID *AuthGroup,
594 IN AFSDirectoryCB *DirectoryCB,
595 OUT AFSVolumeCB **VolumeCB);
598 AFSBuildRootVolume( IN GUID *AuthGroup,
599 IN AFSFileID *FileId,
600 OUT AFSVolumeCB **TargetVolumeCB);
603 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
604 IN PFILE_OBJECT FileObject,
605 IN UNICODE_STRING *RemainingPath,
609 // AFSNetworkProviderSupport.cpp
613 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
614 IN OUT PULONG ResultStatus,
615 IN OUT ULONG_PTR *ReturnOutputBufferLength);
618 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
619 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
620 IN OUT ULONG_PTR *ReturnOutputBufferLength);
623 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
624 IN OUT WCHAR *RemoteName,
625 IN ULONG RemoteNameBufferLength,
626 IN OUT ULONG_PTR *ReturnOutputBufferLength);
629 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
630 IN ULONG ConnectionBufferLength,
631 IN OUT ULONG_PTR *ReturnOutputBufferLength);
634 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
635 IN ULONG DisplayType);
637 AFSProviderConnectionCB *
638 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
641 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
642 IN AFSProviderConnectionCB *RootConnection,
643 IN ULONG BufferLength,
644 OUT PULONG CopiedLength);
647 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
648 IN ULONG BufferLength,
649 IN OUT ULONG_PTR *ReturnOutputBufferLength);
652 AFSIsDriveMapped( IN WCHAR DriveMapping);
655 // AFSRead.cpp Prototypes
659 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
661 IN HANDLE OnBehalfOf);
664 AFSRead( IN PDEVICE_OBJECT DeviceObject,
669 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
673 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
677 // AFSWrite.cpp Prototypes
681 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
683 IN HANDLE CallingUser);
686 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
690 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
694 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
698 // AFSFileInfo.cpp Prototypes
702 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
706 AFSQueryBasicInfo( IN PIRP Irp,
707 IN AFSDirectoryCB *DirectoryCB,
708 IN OUT PFILE_BASIC_INFORMATION Buffer,
709 IN OUT PLONG Length);
712 AFSQueryStandardInfo( IN PIRP Irp,
713 IN AFSDirectoryCB *DirectoryCB,
714 IN OUT PFILE_STANDARD_INFORMATION Buffer,
715 IN OUT PLONG Length);
718 AFSQueryInternalInfo( IN PIRP Irp,
720 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
721 IN OUT PLONG Length);
724 AFSQueryEaInfo( IN PIRP Irp,
725 IN AFSDirectoryCB *DirectoryCB,
726 IN OUT PFILE_EA_INFORMATION Buffer,
727 IN OUT PLONG Length);
730 AFSQueryPositionInfo( IN PIRP Irp,
732 IN OUT PFILE_POSITION_INFORMATION Buffer,
733 IN OUT PLONG Length);
736 AFSQueryNameInfo( IN PIRP Irp,
737 IN AFSDirectoryCB *DirectoryCB,
738 IN OUT PFILE_NAME_INFORMATION Buffer,
739 IN OUT PLONG Length);
742 AFSQueryShortNameInfo( IN PIRP Irp,
743 IN AFSDirectoryCB *DirectoryCB,
744 IN OUT PFILE_NAME_INFORMATION Buffer,
745 IN OUT PLONG Length);
748 AFSQueryNetworkInfo( IN PIRP Irp,
749 IN AFSDirectoryCB *DirectoryCB,
750 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
751 IN OUT PLONG Length);
754 AFSQueryStreamInfo( IN PIRP Irp,
755 IN AFSDirectoryCB *DirectoryCB,
756 IN OUT FILE_STREAM_INFORMATION *Buffer,
757 IN OUT PLONG Length);
760 AFSQueryAccess( IN PIRP Irp,
762 IN OUT PFILE_ACCESS_INFORMATION Buffer,
763 IN OUT PLONG Length);
766 AFSQueryMode( IN PIRP Irp,
768 IN OUT PFILE_MODE_INFORMATION Buffer,
769 IN OUT PLONG Length);
772 AFSQueryAlignment( IN PIRP Irp,
774 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
775 IN OUT PLONG Length);
778 AFSQueryAttribTagInfo( IN PIRP Irp,
779 IN AFSDirectoryCB *DirectoryCB,
780 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
781 IN OUT PLONG Length);
784 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
785 IN AFSDirectoryCB *DirectoryCB,
786 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
787 IN OUT PLONG Length);
790 AFSQueryPhysicalNameInfo( IN PIRP Irp,
791 IN AFSDirectoryCB *DirectoryCB,
792 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
793 IN OUT PLONG Length);
796 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
800 AFSSetBasicInfo( IN PIRP Irp,
801 IN AFSDirectoryCB *DirectoryCB);
804 AFSSetDispositionInfo( IN PIRP Irp,
805 IN AFSDirectoryCB *DirectoryCB);
808 AFSSetRenameInfo( IN PIRP Irp);
811 AFSSetPositionInfo( IN PIRP Irp,
812 IN AFSDirectoryCB *DirectoryCB);
815 AFSSetAllocationInfo( IN PIRP Irp,
816 IN AFSDirectoryCB *DirectoryCB);
819 AFSSetEndOfFileInfo( IN PIRP Irp,
820 IN AFSDirectoryCB *DirectoryCB);
823 AFSProcessShareSetInfo( IN IRP *Irp,
828 AFSProcessShareQueryInfo( IN IRP *Irp,
833 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
836 IN OUT LONG *Length);
839 // AFSEa.cpp Prototypes
843 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
847 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
851 // AFSFlushBuffers.cpp Prototypes
855 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
859 // AFSVolumeInfo.cpp Prototypes
863 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
867 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
871 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
872 IN PFILE_FS_VOLUME_INFORMATION Buffer,
873 IN OUT PULONG Length);
876 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
877 IN PFILE_FS_SIZE_INFORMATION Buffer,
878 IN OUT PULONG Length);
881 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
882 IN PFILE_FS_DEVICE_INFORMATION Buffer,
883 IN OUT PULONG Length);
886 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
887 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
888 IN OUT PULONG Length);
891 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
892 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
893 IN OUT PULONG Length);
896 // AFSDirControl.cpp Prototypes
900 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
904 AFSQueryDirectory( IN PIRP Irp);
907 AFSNotifyChangeDirectory( IN PIRP Irp);
910 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
914 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
919 AFSSnapshotDirectory( IN AFSFcb *Fcb,
921 IN BOOLEAN ResetIndex);
924 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
926 IN BOOLEAN WatchTree,
927 IN ULONG CompletionFilter,
931 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
933 IN ULONG NotifyFilter,
934 IN ULONG NotificationAction);
937 AFSNotifyReportChangeCallback( IN void *NotifyContext,
938 IN void *FilterContext);
941 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
945 // AFSFSControl.cpp Prototypes
949 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
953 AFSProcessUserFsRequest( IN PIRP Irp);
956 AFSProcessShareFsCtrl( IN IRP *Irp,
961 // AFSDevControl.cpp Prototypes
965 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
969 // AFSInternalDevControl.cpp Prototypes
973 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
977 // AFSShutdown.cpp Prototypes
981 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
986 AFSShutdownFilesystem( void);
989 // AFSLockControl.cpp Prototypes
993 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
997 // AFSCleanup.cpp Prototypes
1001 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1005 // AFSSecurity.cpp Prototypes
1009 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1013 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1017 // AFSSystemControl.cpp Prototypes
1021 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1025 // AFSQuota.cpp Prototypes
1029 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1033 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1037 // AFSGeneric.cpp Prototypes
1041 AFSExceptionFilter( IN ULONG Code,
1042 IN PEXCEPTION_POINTERS ExceptPtrs);
1045 AFSAcquireExcl( IN PERESOURCE Resource,
1049 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1053 AFSAcquireShared( IN PERESOURCE Resource,
1057 AFSReleaseResource( IN PERESOURCE Resource);
1060 AFSConvertToShared( IN PERESOURCE Resource);
1063 AFSCompleteRequest( IN PIRP Irp,
1067 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1068 IN BOOLEAN UpperCaseName);
1071 AFSLockSystemBuffer( IN PIRP Irp,
1075 AFSLockUserBuffer( IN void *UserBuffer,
1076 IN ULONG BufferLength,
1080 AFSMapToService( IN PIRP Irp,
1081 IN ULONG ByteCount);
1084 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1088 AFSInitializeLibraryDevice( void);
1091 AFSRemoveLibraryDevice( void);
1094 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1098 AFSInitializeGlobalDirectoryEntries( void);
1101 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1102 IN PUNICODE_STRING FileName,
1103 IN PUNICODE_STRING TargetName,
1104 IN AFSDirEnumEntry *DirEnumEntry,
1105 IN ULONG FileIndex);
1108 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1109 IN BOOLEAN DirectoryEntry);
1112 AFSEvaluateNode( IN GUID *AuthGroup,
1113 IN AFSDirectoryCB *DirEntry);
1116 AFSValidateSymLink( IN GUID *AuthGroup,
1117 IN AFSDirectoryCB *DirEntry);
1120 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1123 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1127 AFSIsChildOfParent( IN AFSFcb *Dcb,
1132 AFSCreateHighIndex( IN AFSFileID *FileID);
1136 AFSCreateLowIndex( IN AFSFileID *FileID);
1139 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1140 IN ACCESS_MASK GrantedAccess,
1141 IN BOOLEAN DirectoryEntry);
1144 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1147 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1148 IN UNICODE_STRING *SubstituteName,
1149 IN ULONG StringIndex);
1152 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1153 IN OUT UNICODE_STRING *ComponentName,
1154 IN UNICODE_STRING *SubstituteName,
1155 IN OUT UNICODE_STRING *RemainingPath,
1156 IN BOOLEAN FreePathName);
1159 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1163 AFSInvalidateAllVolumes( VOID);
1166 AFSVerifyEntry( IN GUID *AuthGroup,
1167 IN AFSDirectoryCB *DirectoryCB);
1170 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1173 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1176 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1177 IN GUID *AuthGroup);
1180 AFSIsVolumeFID( IN AFSFileID *FileID);
1183 AFSIsFinalNode( IN AFSFcb *Fcb);
1186 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1187 IN AFSDirEnumEntry *DirEnumEntry);
1190 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1192 IN BOOLEAN PurgeContent,
1193 IN BOOLEAN FastCall);
1196 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1197 IN UNICODE_STRING *SecondaryName);
1200 AFSInitializeSpecialShareNameList( void);
1203 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1206 AFSWaitOnQueuedReleases( void);
1209 AFSIsEqualFID( IN AFSFileID *FileId1,
1210 IN AFSFileID *FileId2);
1213 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1216 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1219 AFSIsRelativeName( IN UNICODE_STRING *Name);
1222 AFSUpdateName( IN UNICODE_STRING *Name);
1225 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1226 IN OUT ULONG *Flags,
1227 IN WCHAR *NameBuffer,
1228 IN USHORT NameLength);
1231 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1232 IN ULONG InitialElementCount);
1235 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1236 IN UNICODE_STRING *Path,
1237 IN AFSDirectoryCB *DirectoryCB);
1240 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1241 IN AFSNameArrayHdr *RelatedNameArray,
1242 IN AFSDirectoryCB *DirectoryCB);
1245 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1248 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1249 IN AFSDirectoryCB *DirEntry);
1252 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1253 IN AFSDirectoryCB *DirectoryCB);
1256 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1259 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1262 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1263 IN AFSDirectoryCB *DirEntry);
1266 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1269 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1272 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1275 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1278 AFSVerifyVolume( IN ULONGLONG ProcessId,
1279 IN AFSVolumeCB *VolumeCB);
1282 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1285 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1286 IN AFSDirectoryCB *DirectoryCB,
1287 IN UNICODE_STRING *ParentPathName,
1288 IN AFSNameArrayHdr *RelatedNameArray,
1290 OUT AFSFileInfoCB *FileInfo);
1293 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1294 IN ULONGLONG HashIndex);
1297 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1300 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1301 OUT AFSDirectoryCB **TargetDirEntry);
1304 AFSCleanupFcb( IN AFSFcb *Fcb,
1305 IN BOOLEAN ForceFlush);
1308 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1309 IN UNICODE_STRING *NewFileName);
1312 AFSReadCacheFile( IN void *ReadBuffer,
1313 IN LARGE_INTEGER *ReadOffset,
1314 IN ULONG RequestedDataLength,
1315 IN OUT PULONG BytesRead);
1318 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1323 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1326 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1327 IN AFSDirectoryCB *DirEntry);
1330 AFSGetAuthenticationId( void);
1333 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1337 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1340 AFSReferenceCacheFileObject( void);
1343 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1346 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1349 AFSCloseLibrary( void);
1352 AFSDefaultLogMsg( IN ULONG Subsystem,
1358 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1359 IN ULONG InputBufferLength,
1360 IN AFSStatusInfoCB *StatusInfo,
1361 OUT ULONG *ReturnLength);
1364 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1365 IN UNICODE_STRING *ComponentName);
1368 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1369 OUT UNICODE_STRING *ComponentName);
1372 AFSDumpTraceFiles_Default( void);
1375 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1376 IN SIZE_T NumberOfBytes,
1380 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1383 AFSCreateDefaultSecurityDescriptor( void);
1386 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1387 OUT UNICODE_STRING *ParentPath);
1390 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1391 IN AFSObjectInfoCB *ObjectInfo,
1392 IN BOOLEAN WriteAccess,
1393 OUT GUID *AuthGroup);
1396 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1397 IN ULONG InvalidateReason);
1400 // AFSWorker.cpp Prototypes
1404 AFSInitializeWorkerPool( void);
1407 AFSRemoveWorkerPool( void);
1410 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1411 IN PKSTART_ROUTINE WorkerRoutine);
1414 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1417 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1420 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1423 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1426 AFSWorkerThread( IN PVOID Context);
1429 AFSIOWorkerThread( IN PVOID Context);
1432 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1435 AFSVolumeWorkerThread( IN PVOID Context);
1438 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1441 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1444 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1447 AFSRemoveWorkItem( void);
1450 AFSRemoveIOWorkItem( void);
1453 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1456 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1459 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1462 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1465 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1466 IN GUID *AuthGroup);
1469 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1471 IN HANDLE CallerProcess);
1474 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1476 IN HANDLE CallerProcess);
1479 AFSQueueGlobalRootEnumeration( void);
1482 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1485 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1486 IN UCHAR FunctionCode,
1487 IN ULONG RequestFLags,
1488 IN AFSIoRun *IoRuns,
1490 IN AFSGatherIo *GatherIo);
1493 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1494 IN ULONG InvalidateReason);
1497 // AFSMD5Support.cpp Prototypes
1501 AFSGenerateMD5( IN char *DataBuffer,
1503 OUT UCHAR *MD5Digest);
1507 #endif /* _AFS_COMMON_H */