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 AFSNotifyHardLink( IN AFSObjectInfoCB *ObjectInfo,
208 IN AFSObjectInfoCB *ParentObjectInfo,
209 IN AFSObjectInfoCB *TargetParentObjectInfo,
210 IN AFSDirectoryCB *SourceDirectoryCB,
211 IN UNICODE_STRING *TargetName,
212 IN BOOLEAN bReplaceIfExists,
213 OUT AFSDirectoryCB **TargetDirectoryCB);
216 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
219 OUT AFSDirEnumEntry **DirEnumEntry);
222 AFSEvaluateTargetByName( IN GUID *AuthGroup,
223 IN AFSObjectInfoCB *ParentObjectInfo,
224 IN PUNICODE_STRING SourceName,
226 OUT AFSDirEnumEntry **DirEnumEntry);
229 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
230 IN AFSFileID *FileID,
231 OUT AFSVolumeInfoCB *VolumeInformation);
234 AFSRetrieveVolumeSizeInformation( IN GUID *AuthGroup,
235 IN AFSFileID *FileID,
236 OUT AFSVolumeSizeInfoCB *VolumeSizeInformation);
239 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
240 IN ULONG InputLength,
241 IN ULONG OutputLength,
242 IN void *InputDataBuffer,
243 OUT void *OutputDataBuffer,
244 OUT ULONG *BytesReturned);
247 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
248 IN ULONG InformationClass,
249 IN ULONG InputLength,
250 IN void *DataBuffer);
253 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
254 IN ULONG InformationClass,
255 IN ULONG OutputLength,
257 OUT ULONG *BytesReturned);
260 AFSReleaseFid( IN AFSFileID *FileId);
263 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
264 IN LARGE_INTEGER *ExtentOffset,
268 // AFSCreate.cpp Prototypes
272 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
276 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
280 AFSOpenRedirector( IN PIRP Irp,
285 AFSOpenAFSRoot( IN PIRP Irp,
290 AFSOpenRoot( IN PIRP Irp,
291 IN AFSVolumeCB *VolumeCB,
297 AFSProcessCreate( IN PIRP Irp,
299 IN AFSVolumeCB *VolumeCB,
300 IN AFSDirectoryCB *ParentDirCB,
301 IN PUNICODE_STRING FileName,
302 IN PUNICODE_STRING ComponentName,
303 IN PUNICODE_STRING FullFileName,
308 AFSOpenTargetDirectory( IN PIRP Irp,
309 IN AFSVolumeCB *VolumeCB,
310 IN AFSDirectoryCB *ParentDirectoryCB,
311 IN AFSDirectoryCB *TargetDirectoryCB,
312 IN UNICODE_STRING *TargetName,
317 AFSProcessOpen( IN PIRP Irp,
319 IN AFSVolumeCB *VolumeCB,
320 IN AFSDirectoryCB *ParentDirCB,
321 IN AFSDirectoryCB *DirectoryCB,
326 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
328 IN AFSVolumeCB *VolumeCB,
330 IN AFSDirectoryCB *ParentDirCB,
331 IN AFSDirectoryCB *DirectoryCB,
336 AFSControlDeviceCreate( IN PIRP Irp);
339 AFSOpenIOCtlFcb( IN PIRP Irp,
341 IN AFSDirectoryCB *ParentDirCB,
346 AFSOpenSpecialShareFcb( IN PIRP Irp,
348 IN AFSDirectoryCB *DirectoryCB,
353 // AFSExtentsSupport.cpp Prototypes
356 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
359 AFSExtentForOffset( IN AFSFcb *Fcb,
360 IN PLARGE_INTEGER Offset,
361 IN BOOLEAN ReturnPrevious);
363 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
367 AFSRequestExtents( IN AFSFcb *Fcb,
369 IN PLARGE_INTEGER Offset,
371 OUT BOOLEAN *FullyMApped);
373 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
374 IN PLARGE_INTEGER Offset,
376 IN OUT AFSExtent **FirstExtent,
377 OUT AFSExtent **LastExtent);
380 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
382 IN PLARGE_INTEGER Offset,
386 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
390 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
393 AFSProcessReleaseFileExtents( IN PIRP Irp);
396 AFSProcessExtentFailure( PIRP Irp);
399 AFSProcessSetExtents( IN AFSFcb *pFcb,
401 IN AFSFileExtentCB *Result);
404 AFSFlushExtents( IN AFSFcb *pFcb,
408 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
410 IN BOOLEAN bReleaseAll);
413 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
417 AFSMarkDirty( IN AFSFcb *pFcb,
418 IN AFSExtent *StartExtent,
419 IN ULONG ExtentsCount,
420 IN LARGE_INTEGER *StartingByte,
421 IN BOOLEAN DerefExtents);
424 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
428 AFSDeleteFcbExtents( IN AFSFcb *Fcb);
431 AFSTrimExtents( IN AFSFcb *Fcb,
432 IN PLARGE_INTEGER FileSize);
435 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
437 IN AFSFileExtentCB *Result);
440 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
441 IN ULONG ExtentsCount);
444 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
445 IN ULONG ExtentsCount);
448 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
449 IN AFSExtent *Extent);
452 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
455 NextExtent( AFSExtent *Extent, ULONG SkipList );
458 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
459 AFSByteRange ** pByteRangeList);
463 AFSSetupMD5Hash( IN AFSFcb *Fcb,
464 IN AFSExtent *StartExtent,
465 IN ULONG ExtentsCount,
466 IN void *SystemBuffer,
467 IN LARGE_INTEGER *ByteOffset,
473 // AFSIoSupp.cpp Prototypes
476 AFSGetExtents( IN AFSFcb *pFcb,
477 IN PLARGE_INTEGER Offset,
480 OUT ULONG *ExtentCount,
481 OUT ULONG *RunCount);
484 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
486 IN PVOID SystemBuffer,
487 IN OUT AFSIoRun *IoRun,
488 IN PLARGE_INTEGER Start,
491 IN OUT ULONG *RunCount);
494 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
495 IN UCHAR FunctionCode,
499 IN OUT AFSGatherIo *Gather);
502 AFSCompleteIo( IN AFSGatherIo *Gather,
506 AFSProcessExtentRun( IN PVOID SystemBuffer,
507 IN PLARGE_INTEGER Start,
510 IN BOOLEAN WriteRequest);
513 // AFSClose.cpp Prototypes
518 AFSClose( IN PDEVICE_OBJECT DeviceObject,
522 // AFSFcbSupport.cpp Prototypes
526 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
529 AFSInitVolume( IN GUID *AuthGroup,
530 IN AFSFileID *RootFid,
531 IN LONG VolumeReferenceReason,
532 OUT AFSVolumeCB **VolumeCB);
535 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
538 AFSVolumeIncrement( IN AFSVolumeCB *VolumeCB,
542 AFSVolumeDecrement( IN AFSVolumeCB *VolumeCB,
546 AFSInitRootFcb( IN ULONGLONG ProcessID,
547 IN AFSVolumeCB *VolumeCB);
550 AFSRemoveRootFcb( IN AFSVolumeCB *VolumeCB);
553 AFSInitCcb( IN OUT AFSCcb **Ccb,
554 IN AFSDirectoryCB *DirectoryCB,
555 IN ACCESS_MASK GrantedAccess,
556 IN ULONG FileAccess);
559 AFSRemoveFcb( IN AFSFcb **Fcb);
562 AFSRemoveCcb( IN AFSFcb *Fcb,
566 AFSInsertCcb( IN AFSFcb *Fcb,
570 // AFSNameSupport.cpp Prototypes
574 AFSLocateNameEntry( IN GUID *AuthGroup,
575 IN PFILE_OBJECT FileObject,
576 IN OUT UNICODE_STRING *RootPathName,
577 IN UNICODE_STRING *ParsedPathName,
578 IN AFSNameArrayHdr *NameArray,
580 IN AFSVolumeCB *VolumeCB,
581 IN AFSDirectoryCB *ParentDirectoryCB,
582 OUT AFSVolumeCB **OutVolumeCB,
583 OUT LONG *OutVolumeReferenceReason,
584 OUT AFSDirectoryCB **OutParentDirectoryCB,
585 OUT AFSDirectoryCB **OutDirectoryCB,
586 OUT PUNICODE_STRING ComponentName);
589 AFSCreateDirEntry( IN GUID *AuthGroup,
590 IN AFSObjectInfoCB *ParentObjectInfo,
591 IN AFSDirectoryCB *ParentDirCB,
592 IN PUNICODE_STRING FileName,
593 IN PUNICODE_STRING ComponentName,
595 IN OUT AFSDirectoryCB **DirEntry);
598 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
599 IN AFSDirectoryCB *DirEntry,
600 IN BOOLEAN InsertInEnumList);
603 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
604 IN AFSDirectoryCB *DirEntry);
607 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
608 IN AFSDirectoryCB *DirEntry,
609 IN BOOLEAN RemoveFromEnumList);
612 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
613 IN OUT PUNICODE_STRING TargetFileName);
616 AFSParseName( IN PIRP Irp,
618 OUT PUNICODE_STRING FileName,
619 OUT PUNICODE_STRING ParsedFileName,
620 OUT PUNICODE_STRING RootFileName,
621 OUT ULONG *ParseFlags,
622 OUT AFSVolumeCB **VolumeCB,
623 OUT AFSDirectoryCB **ParentDirectoryCB,
624 OUT AFSNameArrayHdr **NameArray);
627 AFSCheckCellName( IN GUID *AuthGroup,
628 IN UNICODE_STRING *CellName,
629 OUT AFSDirectoryCB **ShareDirEntry);
632 AFSBuildMountPointTarget( IN GUID *AuthGroup,
633 IN AFSDirectoryCB *DirectoryCB,
634 OUT AFSVolumeCB **VolumeCB);
637 AFSBuildRootVolume( IN GUID *AuthGroup,
638 IN AFSFileID *FileId,
639 OUT AFSVolumeCB **TargetVolumeCB);
642 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
643 IN PFILE_OBJECT FileObject,
644 IN UNICODE_STRING *RemainingPath,
648 // AFSNetworkProviderSupport.cpp
652 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
653 IN OUT PULONG ResultStatus,
654 IN OUT ULONG_PTR *ReturnOutputBufferLength);
657 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
658 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
659 IN OUT ULONG_PTR *ReturnOutputBufferLength);
662 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
663 IN OUT WCHAR *RemoteName,
664 IN ULONG RemoteNameBufferLength,
665 IN OUT ULONG_PTR *ReturnOutputBufferLength);
668 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
669 IN ULONG ConnectionBufferLength,
670 IN OUT ULONG_PTR *ReturnOutputBufferLength);
673 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
674 IN ULONG DisplayType);
676 AFSProviderConnectionCB *
677 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
680 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
681 IN AFSProviderConnectionCB *RootConnection,
682 IN ULONG BufferLength,
683 OUT PULONG CopiedLength);
686 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
687 IN ULONG BufferLength,
688 IN OUT ULONG_PTR *ReturnOutputBufferLength);
691 AFSIsDriveMapped( IN WCHAR DriveMapping);
694 // AFSRead.cpp Prototypes
698 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
700 IN HANDLE OnBehalfOf);
703 AFSRead( IN PDEVICE_OBJECT DeviceObject,
708 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
712 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
716 // AFSWrite.cpp Prototypes
720 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
722 IN HANDLE CallingUser,
726 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
730 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
734 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
738 AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
739 IN PFILE_OBJECT FileObject,
740 IN HANDLE CallingUser,
742 IN ULONG BytesToWrite,
743 IN BOOLEAN Retrying);
746 // AFSFileInfo.cpp Prototypes
750 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
754 AFSQueryBasicInfo( IN PIRP Irp,
755 IN AFSDirectoryCB *DirectoryCB,
756 IN OUT PFILE_BASIC_INFORMATION Buffer,
757 IN OUT PLONG Length);
760 AFSQueryStandardInfo( IN PIRP Irp,
761 IN AFSDirectoryCB *DirectoryCB,
762 IN OUT PFILE_STANDARD_INFORMATION Buffer,
763 IN OUT PLONG Length);
766 AFSQueryInternalInfo( IN PIRP Irp,
768 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
769 IN OUT PLONG Length);
772 AFSQueryEaInfo( IN PIRP Irp,
773 IN AFSDirectoryCB *DirectoryCB,
774 IN OUT PFILE_EA_INFORMATION Buffer,
775 IN OUT PLONG Length);
778 AFSQueryPositionInfo( IN PIRP Irp,
780 IN OUT PFILE_POSITION_INFORMATION Buffer,
781 IN OUT PLONG Length);
784 AFSQueryNameInfo( IN PIRP Irp,
785 IN AFSDirectoryCB *DirectoryCB,
786 IN OUT PFILE_NAME_INFORMATION Buffer,
787 IN OUT PLONG Length);
790 AFSQueryShortNameInfo( IN PIRP Irp,
791 IN AFSDirectoryCB *DirectoryCB,
792 IN OUT PFILE_NAME_INFORMATION Buffer,
793 IN OUT PLONG Length);
796 AFSQueryNetworkInfo( IN PIRP Irp,
797 IN AFSDirectoryCB *DirectoryCB,
798 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
799 IN OUT PLONG Length);
802 AFSQueryStreamInfo( IN PIRP Irp,
803 IN AFSDirectoryCB *DirectoryCB,
804 IN OUT FILE_STREAM_INFORMATION *Buffer,
805 IN OUT PLONG Length);
808 AFSQueryAccess( IN PIRP Irp,
810 IN OUT PFILE_ACCESS_INFORMATION Buffer,
811 IN OUT PLONG Length);
814 AFSQueryMode( IN PIRP Irp,
816 IN OUT PFILE_MODE_INFORMATION Buffer,
817 IN OUT PLONG Length);
820 AFSQueryAlignment( IN PIRP Irp,
822 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
823 IN OUT PLONG Length);
826 AFSQueryAttribTagInfo( IN PIRP Irp,
827 IN AFSDirectoryCB *DirectoryCB,
828 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
829 IN OUT PLONG Length);
832 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
833 IN AFSDirectoryCB *DirectoryCB,
834 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
835 IN OUT PLONG Length);
838 AFSQueryPhysicalNameInfo( IN PIRP Irp,
839 IN AFSDirectoryCB *DirectoryCB,
840 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
841 IN OUT PLONG Length);
844 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
848 AFSSetBasicInfo( IN PIRP Irp,
849 IN AFSDirectoryCB *DirectoryCB);
852 AFSSetDispositionInfo( IN PIRP Irp,
853 IN AFSDirectoryCB *DirectoryCB);
856 AFSSetRenameInfo( IN PIRP Irp);
859 AFSSetFileLinkInfo( IN PIRP Irp);
862 AFSSetPositionInfo( IN PIRP Irp,
863 IN AFSDirectoryCB *DirectoryCB);
866 AFSSetAllocationInfo( IN PIRP Irp,
867 IN AFSDirectoryCB *DirectoryCB);
870 AFSSetEndOfFileInfo( IN PIRP Irp,
871 IN AFSDirectoryCB *DirectoryCB);
874 AFSProcessShareSetInfo( IN IRP *Irp,
879 AFSProcessShareQueryInfo( IN IRP *Irp,
884 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
887 IN OUT LONG *Length);
890 // AFSEa.cpp Prototypes
894 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
898 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
902 // AFSFlushBuffers.cpp Prototypes
906 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
910 // AFSVolumeInfo.cpp Prototypes
914 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
918 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
922 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
923 IN PFILE_FS_VOLUME_INFORMATION Buffer,
924 IN OUT PULONG Length);
927 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
928 IN PFILE_FS_SIZE_INFORMATION Buffer,
929 IN OUT PULONG Length);
932 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
933 IN PFILE_FS_DEVICE_INFORMATION Buffer,
934 IN OUT PULONG Length);
937 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
938 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
939 IN OUT PULONG Length);
942 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
943 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
944 IN OUT PULONG Length);
947 // AFSDirControl.cpp Prototypes
951 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
955 AFSQueryDirectory( IN PIRP Irp);
958 AFSNotifyChangeDirectory( IN PIRP Irp);
961 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
965 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
970 AFSSnapshotDirectory( IN AFSFcb *Fcb,
972 IN BOOLEAN ResetIndex);
975 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
977 IN BOOLEAN WatchTree,
978 IN ULONG CompletionFilter,
982 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
984 IN ULONG NotifyFilter,
985 IN ULONG NotificationAction);
988 AFSNotifyReportChangeCallback( IN void *NotifyContext,
989 IN void *FilterContext);
992 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
996 // AFSFSControl.cpp Prototypes
1000 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
1004 AFSProcessUserFsRequest( IN PIRP Irp);
1007 AFSProcessShareFsCtrl( IN IRP *Irp,
1012 // AFSDevControl.cpp Prototypes
1016 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
1020 // AFSInternalDevControl.cpp Prototypes
1024 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
1028 // AFSShutdown.cpp Prototypes
1032 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1037 AFSShutdownFilesystem( void);
1040 // AFSLockControl.cpp Prototypes
1044 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1048 // AFSCleanup.cpp Prototypes
1052 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1056 // AFSSecurity.cpp Prototypes
1060 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1064 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1068 // AFSSystemControl.cpp Prototypes
1072 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1076 // AFSQuota.cpp Prototypes
1080 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1084 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1088 // AFSGeneric.cpp Prototypes
1092 AFSExceptionFilter( IN CHAR *FunctionString,
1094 IN PEXCEPTION_POINTERS ExceptPtrs);
1097 AFSAcquireExcl( IN PERESOURCE Resource,
1101 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1105 AFSAcquireShared( IN PERESOURCE Resource,
1109 AFSReleaseResource( IN PERESOURCE Resource);
1112 AFSConvertToShared( IN PERESOURCE Resource);
1115 AFSCompleteRequest( IN PIRP Irp,
1119 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1120 IN BOOLEAN UpperCaseName);
1123 AFSLockSystemBuffer( IN PIRP Irp,
1127 AFSLockUserBuffer( IN void *UserBuffer,
1128 IN ULONG BufferLength,
1132 AFSMapToService( IN PIRP Irp,
1133 IN ULONG ByteCount);
1136 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1140 AFSInitializeLibraryDevice( void);
1143 AFSRemoveLibraryDevice( void);
1146 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1150 AFSInitializeGlobalDirectoryEntries( void);
1153 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1154 IN PUNICODE_STRING FileName,
1155 IN PUNICODE_STRING TargetName,
1156 IN AFSDirEnumEntry *DirEnumEntry,
1157 IN ULONG FileIndex);
1160 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1161 IN BOOLEAN DirectoryEntry);
1164 AFSEvaluateNode( IN GUID *AuthGroup,
1165 IN AFSDirectoryCB *DirEntry);
1168 AFSValidateSymLink( IN GUID *AuthGroup,
1169 IN AFSDirectoryCB *DirEntry);
1172 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1175 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1179 AFSIsChildOfParent( IN AFSFcb *Dcb,
1184 AFSCreateHighIndex( IN AFSFileID *FileID);
1188 AFSCreateLowIndex( IN AFSFileID *FileID);
1191 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1192 IN ACCESS_MASK GrantedAccess,
1193 IN BOOLEAN DirectoryEntry);
1196 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1199 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1200 IN UNICODE_STRING *SubstituteName,
1201 IN ULONG StringIndex);
1204 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1205 IN OUT UNICODE_STRING *ComponentName,
1206 IN UNICODE_STRING *SubstituteName,
1207 IN OUT UNICODE_STRING *RemainingPath,
1208 IN BOOLEAN FreePathName);
1211 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1215 AFSInvalidateAllVolumes( VOID);
1218 AFSVerifyEntry( IN GUID *AuthGroup,
1219 IN AFSDirectoryCB *DirectoryCB);
1222 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1225 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1228 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1229 IN GUID *AuthGroup);
1232 AFSIsVolumeFID( IN AFSFileID *FileID);
1235 AFSIsFinalNode( IN AFSFcb *Fcb);
1238 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1239 IN AFSDirEnumEntry *DirEnumEntry);
1242 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1244 IN BOOLEAN FastCall,
1245 IN BOOLEAN SafeToPurge);
1248 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1249 IN UNICODE_STRING *SecondaryName);
1252 AFSInitializeSpecialShareNameList( void);
1255 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1258 AFSWaitOnQueuedReleases( void);
1261 AFSIsEqualFID( IN AFSFileID *FileId1,
1262 IN AFSFileID *FileId2);
1265 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1268 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1271 AFSIsRelativeName( IN UNICODE_STRING *Name);
1274 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1277 AFSUpdateName( IN UNICODE_STRING *Name);
1280 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1281 IN OUT ULONG *Flags,
1282 IN WCHAR *NameBuffer,
1283 IN USHORT NameLength);
1286 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1287 IN ULONG InitialElementCount);
1290 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1291 IN UNICODE_STRING *Path,
1292 IN AFSDirectoryCB *DirectoryCB);
1295 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1296 IN AFSNameArrayHdr *RelatedNameArray,
1297 IN AFSDirectoryCB *DirectoryCB);
1300 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1303 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1304 IN AFSDirectoryCB *DirEntry);
1307 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1310 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1313 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1314 IN AFSDirectoryCB *DirEntry);
1317 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1320 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1323 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1326 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1329 AFSVerifyVolume( IN ULONGLONG ProcessId,
1330 IN AFSVolumeCB *VolumeCB);
1333 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1336 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1337 IN AFSDirectoryCB *DirectoryCB,
1338 IN UNICODE_STRING *ParentPathName,
1339 IN AFSNameArrayHdr *RelatedNameArray,
1341 OUT AFSFileInfoCB *FileInfo);
1344 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1345 IN ULONGLONG HashIndex);
1348 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
1352 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
1356 AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
1359 AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
1360 IN AFSFileID * FileID);
1363 AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
1366 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1367 OUT AFSDirectoryCB **TargetDirEntry);
1370 AFSCleanupFcb( IN AFSFcb *Fcb,
1371 IN BOOLEAN ForceFlush);
1374 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1375 IN UNICODE_STRING *NewFileName);
1378 AFSReadCacheFile( IN void *ReadBuffer,
1379 IN LARGE_INTEGER *ReadOffset,
1380 IN ULONG RequestedDataLength,
1381 IN OUT PULONG BytesRead);
1384 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1389 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1392 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1393 IN AFSDirectoryCB *DirEntry);
1396 AFSGetAuthenticationId( void);
1399 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1403 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1406 AFSReferenceCacheFileObject( void);
1409 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1412 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1415 AFSCloseLibrary( void);
1418 AFSDefaultLogMsg( IN ULONG Subsystem,
1424 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1425 IN ULONG InputBufferLength,
1426 IN AFSStatusInfoCB *StatusInfo,
1427 OUT ULONG *ReturnLength);
1430 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1431 IN UNICODE_STRING *ComponentName);
1434 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1435 OUT UNICODE_STRING *ComponentName);
1438 AFSDumpTraceFiles_Default( void);
1441 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1442 IN SIZE_T NumberOfBytes,
1446 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1449 AFSCreateDefaultSecurityDescriptor( void);
1452 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1453 OUT UNICODE_STRING *ParentPath);
1456 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1457 IN AFSObjectInfoCB *ObjectInfo,
1458 IN BOOLEAN WriteAccess,
1459 OUT GUID *AuthGroup);
1462 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1463 IN ULONG InvalidateReason);
1466 // AFSWorker.cpp Prototypes
1470 AFSInitializeWorkerPool( void);
1473 AFSRemoveWorkerPool( void);
1476 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1477 IN PKSTART_ROUTINE WorkerRoutine);
1480 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1483 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1486 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1489 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1492 AFSWorkerThread( IN PVOID Context);
1495 AFSIOWorkerThread( IN PVOID Context);
1498 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1501 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1504 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1507 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1510 AFSRemoveWorkItem( void);
1513 AFSRemoveIOWorkItem( void);
1516 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1519 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1522 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1525 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1528 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1529 IN GUID *AuthGroup);
1532 AFSQueueGlobalRootEnumeration( void);
1535 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1538 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1539 IN UCHAR FunctionCode,
1540 IN ULONG RequestFLags,
1541 IN AFSIoRun *IoRuns,
1543 IN AFSGatherIo *GatherIo);
1546 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1547 IN ULONG InvalidateReason);
1550 // AFSMD5Support.cpp Prototypes
1554 AFSGenerateMD5( IN char *DataBuffer,
1556 OUT UCHAR *MD5Digest);
1560 #endif /* _AFS_COMMON_H */