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 AFSProcessDirectoryQueryDirect( IN AFSFcb *Fcb,
1001 // AFSFSControl.cpp Prototypes
1005 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
1009 AFSProcessUserFsRequest( IN PIRP Irp);
1012 AFSProcessShareFsCtrl( IN IRP *Irp,
1017 // AFSDevControl.cpp Prototypes
1021 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
1025 // AFSInternalDevControl.cpp Prototypes
1029 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
1033 // AFSShutdown.cpp Prototypes
1037 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1042 AFSShutdownFilesystem( void);
1045 // AFSLockControl.cpp Prototypes
1049 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1053 // AFSCleanup.cpp Prototypes
1057 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1061 // AFSSecurity.cpp Prototypes
1065 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1069 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1073 // AFSSystemControl.cpp Prototypes
1077 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1081 // AFSQuota.cpp Prototypes
1085 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1089 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1093 // AFSGeneric.cpp Prototypes
1097 AFSExceptionFilter( IN CHAR *FunctionString,
1099 IN PEXCEPTION_POINTERS ExceptPtrs);
1102 AFSAcquireExcl( IN PERESOURCE Resource,
1106 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1110 AFSAcquireShared( IN PERESOURCE Resource,
1114 AFSReleaseResource( IN PERESOURCE Resource);
1117 AFSConvertToShared( IN PERESOURCE Resource);
1120 AFSCompleteRequest( IN PIRP Irp,
1124 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1125 IN BOOLEAN UpperCaseName);
1128 AFSLockSystemBuffer( IN PIRP Irp,
1132 AFSLockUserBuffer( IN void *UserBuffer,
1133 IN ULONG BufferLength,
1137 AFSMapToService( IN PIRP Irp,
1138 IN ULONG ByteCount);
1141 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1145 AFSInitializeLibraryDevice( void);
1148 AFSRemoveLibraryDevice( void);
1151 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1155 AFSInitializeGlobalDirectoryEntries( void);
1158 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1159 IN PUNICODE_STRING FileName,
1160 IN PUNICODE_STRING TargetName,
1161 IN AFSDirEnumEntry *DirEnumEntry,
1162 IN ULONG FileIndex);
1165 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1166 IN BOOLEAN DirectoryEntry);
1169 AFSEvaluateNode( IN GUID *AuthGroup,
1170 IN AFSDirectoryCB *DirEntry);
1173 AFSValidateSymLink( IN GUID *AuthGroup,
1174 IN AFSDirectoryCB *DirEntry);
1177 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1180 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1184 AFSIsChildOfParent( IN AFSFcb *Dcb,
1189 AFSCreateHighIndex( IN AFSFileID *FileID);
1193 AFSCreateLowIndex( IN AFSFileID *FileID);
1196 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1197 IN ACCESS_MASK GrantedAccess,
1198 IN BOOLEAN DirectoryEntry);
1201 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1204 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1205 IN UNICODE_STRING *SubstituteName,
1206 IN ULONG StringIndex);
1209 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1210 IN OUT UNICODE_STRING *ComponentName,
1211 IN UNICODE_STRING *SubstituteName,
1212 IN OUT UNICODE_STRING *RemainingPath,
1213 IN BOOLEAN FreePathName);
1216 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1220 AFSInvalidateAllVolumes( VOID);
1223 AFSVerifyEntry( IN GUID *AuthGroup,
1224 IN AFSDirectoryCB *DirectoryCB);
1227 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1230 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1233 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1234 IN GUID *AuthGroup);
1237 AFSIsVolumeFID( IN AFSFileID *FileID);
1240 AFSIsFinalNode( IN AFSFcb *Fcb);
1243 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1244 IN AFSDirEnumEntry *DirEnumEntry);
1247 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1249 IN BOOLEAN FastCall,
1250 IN BOOLEAN SafeToPurge);
1253 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1254 IN UNICODE_STRING *SecondaryName);
1257 AFSInitializeSpecialShareNameList( void);
1260 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1263 AFSWaitOnQueuedReleases( void);
1266 AFSIsEqualFID( IN AFSFileID *FileId1,
1267 IN AFSFileID *FileId2);
1270 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1273 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1276 AFSIsRelativeName( IN UNICODE_STRING *Name);
1279 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1282 AFSUpdateName( IN UNICODE_STRING *Name);
1285 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1286 IN OUT ULONG *Flags,
1287 IN WCHAR *NameBuffer,
1288 IN USHORT NameLength);
1291 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1292 IN ULONG InitialElementCount);
1295 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1296 IN UNICODE_STRING *Path,
1297 IN AFSDirectoryCB *DirectoryCB);
1300 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1301 IN AFSNameArrayHdr *RelatedNameArray,
1302 IN AFSDirectoryCB *DirectoryCB);
1305 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1308 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1309 IN AFSDirectoryCB *DirEntry);
1312 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1315 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1318 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1319 IN AFSDirectoryCB *DirEntry);
1322 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1325 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1328 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1331 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1334 AFSVerifyVolume( IN ULONGLONG ProcessId,
1335 IN AFSVolumeCB *VolumeCB);
1338 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1341 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1342 IN AFSDirectoryCB *DirectoryCB,
1343 IN UNICODE_STRING *ParentPathName,
1344 IN AFSNameArrayHdr *RelatedNameArray,
1346 OUT AFSFileInfoCB *FileInfo);
1349 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1350 IN ULONGLONG HashIndex);
1353 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
1357 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
1361 AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
1364 AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
1365 IN AFSFileID * FileID);
1368 AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
1371 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1372 OUT AFSDirectoryCB **TargetDirEntry);
1375 AFSCleanupFcb( IN AFSFcb *Fcb,
1376 IN BOOLEAN ForceFlush);
1379 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1380 IN UNICODE_STRING *NewFileName);
1383 AFSReadCacheFile( IN void *ReadBuffer,
1384 IN LARGE_INTEGER *ReadOffset,
1385 IN ULONG RequestedDataLength,
1386 IN OUT PULONG BytesRead);
1389 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1394 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1397 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1398 IN AFSDirectoryCB *DirEntry);
1401 AFSGetAuthenticationId( void);
1404 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1408 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1411 AFSReferenceCacheFileObject( void);
1414 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1417 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1420 AFSCloseLibrary( void);
1423 AFSDefaultLogMsg( IN ULONG Subsystem,
1429 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1430 IN ULONG InputBufferLength,
1431 IN AFSStatusInfoCB *StatusInfo,
1432 OUT ULONG *ReturnLength);
1435 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1436 IN UNICODE_STRING *ComponentName);
1439 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1440 OUT UNICODE_STRING *ComponentName);
1443 AFSDumpTraceFiles_Default( void);
1446 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1447 IN SIZE_T NumberOfBytes,
1451 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1454 AFSCreateDefaultSecurityDescriptor( void);
1457 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1458 OUT UNICODE_STRING *ParentPath);
1461 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1462 IN AFSObjectInfoCB *ObjectInfo,
1463 IN BOOLEAN WriteAccess,
1464 OUT GUID *AuthGroup);
1467 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1468 IN ULONG InvalidateReason);
1471 // AFSWorker.cpp Prototypes
1475 AFSInitializeWorkerPool( void);
1478 AFSRemoveWorkerPool( void);
1481 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1482 IN PKSTART_ROUTINE WorkerRoutine);
1485 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1488 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1491 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1494 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1497 AFSWorkerThread( IN PVOID Context);
1500 AFSIOWorkerThread( IN PVOID Context);
1503 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1506 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1509 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1512 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1515 AFSRemoveWorkItem( void);
1518 AFSRemoveIOWorkItem( void);
1521 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1524 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1527 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1530 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1533 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1534 IN GUID *AuthGroup);
1537 AFSQueueGlobalRootEnumeration( void);
1540 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1543 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1544 IN UCHAR FunctionCode,
1545 IN ULONG RequestFLags,
1546 IN AFSIoRun *IoRuns,
1548 IN AFSGatherIo *GatherIo);
1551 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1552 IN ULONG InvalidateReason);
1555 // AFSMD5Support.cpp Prototypes
1559 AFSGenerateMD5( IN char *DataBuffer,
1561 OUT UCHAR *MD5Digest);
1565 #endif /* _AFS_COMMON_H */