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 AFSCreateSymlink( IN GUID *AuthGroup,
269 IN AFSObjectInfoCB *ParentObjectInfo,
270 IN UNICODE_STRING *FileName,
271 IN AFSObjectInfoCB *ObjectInfo,
272 IN UNICODE_STRING *TargetName);
275 // AFSCreate.cpp Prototypes
279 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
283 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
287 AFSOpenRedirector( IN PIRP Irp,
292 AFSOpenAFSRoot( IN PIRP Irp,
297 AFSOpenRoot( IN PIRP Irp,
298 IN AFSVolumeCB *VolumeCB,
304 AFSProcessCreate( IN PIRP Irp,
306 IN AFSVolumeCB *VolumeCB,
307 IN AFSDirectoryCB *ParentDirCB,
308 IN PUNICODE_STRING FileName,
309 IN PUNICODE_STRING ComponentName,
310 IN PUNICODE_STRING FullFileName,
315 AFSOpenTargetDirectory( IN PIRP Irp,
316 IN AFSVolumeCB *VolumeCB,
317 IN AFSDirectoryCB *ParentDirectoryCB,
318 IN AFSDirectoryCB *TargetDirectoryCB,
319 IN UNICODE_STRING *TargetName,
324 AFSProcessOpen( IN PIRP Irp,
326 IN AFSVolumeCB *VolumeCB,
327 IN AFSDirectoryCB *ParentDirCB,
328 IN AFSDirectoryCB *DirectoryCB,
333 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
335 IN AFSVolumeCB *VolumeCB,
337 IN AFSDirectoryCB *ParentDirCB,
338 IN AFSDirectoryCB *DirectoryCB,
343 AFSControlDeviceCreate( IN PIRP Irp);
346 AFSOpenIOCtlFcb( IN PIRP Irp,
348 IN AFSDirectoryCB *ParentDirCB,
353 AFSOpenSpecialShareFcb( IN PIRP Irp,
355 IN AFSDirectoryCB *DirectoryCB,
360 // AFSExtentsSupport.cpp Prototypes
363 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
366 AFSExtentForOffset( IN AFSFcb *Fcb,
367 IN PLARGE_INTEGER Offset,
368 IN BOOLEAN ReturnPrevious);
370 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
374 AFSRequestExtents( IN AFSFcb *Fcb,
376 IN PLARGE_INTEGER Offset,
378 OUT BOOLEAN *FullyMApped);
380 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
381 IN PLARGE_INTEGER Offset,
383 IN OUT AFSExtent **FirstExtent,
384 OUT AFSExtent **LastExtent);
387 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
389 IN PLARGE_INTEGER Offset,
393 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
397 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
400 AFSProcessReleaseFileExtents( IN PIRP Irp);
403 AFSProcessExtentFailure( PIRP Irp);
406 AFSProcessSetExtents( IN AFSFcb *pFcb,
408 IN AFSFileExtentCB *Result);
411 AFSFlushExtents( IN AFSFcb *pFcb,
415 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
417 IN BOOLEAN bReleaseAll);
420 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
424 AFSMarkDirty( IN AFSFcb *pFcb,
425 IN AFSExtent *StartExtent,
426 IN ULONG ExtentsCount,
427 IN LARGE_INTEGER *StartingByte,
428 IN BOOLEAN DerefExtents);
431 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
435 AFSDeleteFcbExtents( IN AFSFcb *Fcb);
438 AFSTrimExtents( IN AFSFcb *Fcb,
439 IN PLARGE_INTEGER FileSize);
442 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
444 IN AFSFileExtentCB *Result);
447 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
448 IN ULONG ExtentsCount);
451 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
452 IN ULONG ExtentsCount);
455 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
456 IN AFSExtent *Extent);
459 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
462 NextExtent( AFSExtent *Extent, ULONG SkipList );
465 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
466 AFSByteRange ** pByteRangeList);
470 AFSSetupMD5Hash( IN AFSFcb *Fcb,
471 IN AFSExtent *StartExtent,
472 IN ULONG ExtentsCount,
473 IN void *SystemBuffer,
474 IN LARGE_INTEGER *ByteOffset,
480 // AFSIoSupp.cpp Prototypes
483 AFSGetExtents( IN AFSFcb *pFcb,
484 IN PLARGE_INTEGER Offset,
487 OUT ULONG *ExtentCount,
488 OUT ULONG *RunCount);
491 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
493 IN PVOID SystemBuffer,
494 IN OUT AFSIoRun *IoRun,
495 IN PLARGE_INTEGER Start,
498 IN OUT ULONG *RunCount);
501 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
502 IN UCHAR FunctionCode,
506 IN OUT AFSGatherIo *Gather);
509 AFSCompleteIo( IN AFSGatherIo *Gather,
513 AFSProcessExtentRun( IN PVOID SystemBuffer,
514 IN PLARGE_INTEGER Start,
517 IN BOOLEAN WriteRequest);
520 // AFSClose.cpp Prototypes
525 AFSClose( IN PDEVICE_OBJECT DeviceObject,
529 // AFSFcbSupport.cpp Prototypes
533 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
536 AFSInitRootFcb( IN ULONGLONG ProcessID,
537 IN AFSVolumeCB *VolumeCB);
540 AFSRemoveRootFcb( IN AFSVolumeCB *VolumeCB);
543 AFSInitCcb( IN OUT AFSCcb **Ccb,
544 IN AFSDirectoryCB *DirectoryCB,
545 IN ACCESS_MASK GrantedAccess,
546 IN ULONG FileAccess);
549 AFSRemoveFcb( IN AFSFcb **Fcb);
552 AFSRemoveCcb( IN AFSFcb *Fcb,
556 AFSInsertCcb( IN AFSFcb *Fcb,
560 // AFSNameSupport.cpp Prototypes
564 AFSLocateNameEntry( IN GUID *AuthGroup,
565 IN PFILE_OBJECT FileObject,
566 IN OUT UNICODE_STRING *RootPathName,
567 IN UNICODE_STRING *ParsedPathName,
568 IN AFSNameArrayHdr *NameArray,
570 IN AFSVolumeCB *VolumeCB,
571 IN AFSDirectoryCB *ParentDirectoryCB,
572 OUT AFSVolumeCB **OutVolumeCB,
573 OUT LONG *OutVolumeReferenceReason,
574 OUT AFSDirectoryCB **OutParentDirectoryCB,
575 OUT AFSDirectoryCB **OutDirectoryCB,
576 OUT PUNICODE_STRING ComponentName);
579 AFSCreateDirEntry( IN GUID *AuthGroup,
580 IN AFSObjectInfoCB *ParentObjectInfo,
581 IN AFSDirectoryCB *ParentDirCB,
582 IN PUNICODE_STRING FileName,
583 IN PUNICODE_STRING ComponentName,
585 IN OUT AFSDirectoryCB **DirEntry);
588 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
589 IN AFSDirectoryCB *DirEntry,
590 IN BOOLEAN InsertInEnumList);
593 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
594 IN AFSDirectoryCB *DirEntry);
597 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
598 IN AFSDirectoryCB *DirEntry,
599 IN BOOLEAN RemoveFromEnumList);
602 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
603 IN OUT PUNICODE_STRING TargetFileName);
606 AFSParseName( IN PIRP Irp,
608 OUT PUNICODE_STRING FileName,
609 OUT PUNICODE_STRING ParsedFileName,
610 OUT PUNICODE_STRING RootFileName,
611 OUT ULONG *ParseFlags,
612 OUT AFSVolumeCB **VolumeCB,
613 OUT AFSDirectoryCB **ParentDirectoryCB,
614 OUT AFSNameArrayHdr **NameArray);
617 AFSCheckCellName( IN GUID *AuthGroup,
618 IN UNICODE_STRING *CellName,
619 OUT AFSDirectoryCB **ShareDirEntry);
622 AFSBuildMountPointTarget( IN GUID *AuthGroup,
623 IN AFSDirectoryCB *DirectoryCB,
624 OUT AFSVolumeCB **VolumeCB);
627 AFSBuildRootVolume( IN GUID *AuthGroup,
628 IN AFSFileID *FileId,
629 OUT AFSVolumeCB **TargetVolumeCB);
632 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
633 IN PFILE_OBJECT FileObject,
634 IN UNICODE_STRING *RemainingPath,
638 // AFSNetworkProviderSupport.cpp
642 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
643 IN OUT PULONG ResultStatus,
644 IN OUT ULONG_PTR *ReturnOutputBufferLength);
647 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
648 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
649 IN OUT ULONG_PTR *ReturnOutputBufferLength);
652 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
653 IN OUT WCHAR *RemoteName,
654 IN ULONG RemoteNameBufferLength,
655 IN OUT ULONG_PTR *ReturnOutputBufferLength);
658 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
659 IN ULONG ConnectionBufferLength,
660 IN OUT ULONG_PTR *ReturnOutputBufferLength);
663 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
664 IN ULONG DisplayType);
666 AFSProviderConnectionCB *
667 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
670 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
671 IN AFSProviderConnectionCB *RootConnection,
672 IN ULONG BufferLength,
673 OUT PULONG CopiedLength);
676 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
677 IN ULONG BufferLength,
678 IN OUT ULONG_PTR *ReturnOutputBufferLength);
681 AFSIsDriveMapped( IN WCHAR DriveMapping);
684 // AFSRead.cpp Prototypes
688 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
690 IN HANDLE OnBehalfOf);
693 AFSRead( IN PDEVICE_OBJECT DeviceObject,
698 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
702 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
706 // AFSWrite.cpp Prototypes
710 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
712 IN HANDLE CallingUser,
716 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
720 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
724 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
728 AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
729 IN PFILE_OBJECT FileObject,
730 IN HANDLE CallingUser,
732 IN ULONG BytesToWrite,
733 IN BOOLEAN Retrying);
736 // AFSFileInfo.cpp Prototypes
740 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
744 AFSQueryBasicInfo( IN PIRP Irp,
745 IN AFSDirectoryCB *DirectoryCB,
746 IN OUT PFILE_BASIC_INFORMATION Buffer,
747 IN OUT PLONG Length);
750 AFSQueryStandardInfo( IN PIRP Irp,
751 IN AFSDirectoryCB *DirectoryCB,
752 IN OUT PFILE_STANDARD_INFORMATION Buffer,
753 IN OUT PLONG Length);
756 AFSQueryInternalInfo( IN PIRP Irp,
758 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
759 IN OUT PLONG Length);
762 AFSQueryEaInfo( IN PIRP Irp,
763 IN AFSDirectoryCB *DirectoryCB,
764 IN OUT PFILE_EA_INFORMATION Buffer,
765 IN OUT PLONG Length);
768 AFSQueryPositionInfo( IN PIRP Irp,
770 IN OUT PFILE_POSITION_INFORMATION Buffer,
771 IN OUT PLONG Length);
774 AFSQueryNameInfo( IN PIRP Irp,
775 IN AFSDirectoryCB *DirectoryCB,
776 IN OUT PFILE_NAME_INFORMATION Buffer,
777 IN OUT PLONG Length);
780 AFSQueryShortNameInfo( IN PIRP Irp,
781 IN AFSDirectoryCB *DirectoryCB,
782 IN OUT PFILE_NAME_INFORMATION Buffer,
783 IN OUT PLONG Length);
786 AFSQueryNetworkInfo( IN PIRP Irp,
787 IN AFSDirectoryCB *DirectoryCB,
788 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
789 IN OUT PLONG Length);
792 AFSQueryStreamInfo( IN PIRP Irp,
793 IN AFSDirectoryCB *DirectoryCB,
794 IN OUT FILE_STREAM_INFORMATION *Buffer,
795 IN OUT PLONG Length);
798 AFSQueryAccess( IN PIRP Irp,
800 IN OUT PFILE_ACCESS_INFORMATION Buffer,
801 IN OUT PLONG Length);
804 AFSQueryMode( IN PIRP Irp,
806 IN OUT PFILE_MODE_INFORMATION Buffer,
807 IN OUT PLONG Length);
810 AFSQueryAlignment( IN PIRP Irp,
812 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
813 IN OUT PLONG Length);
816 AFSQueryAttribTagInfo( IN PIRP Irp,
817 IN AFSDirectoryCB *DirectoryCB,
818 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
819 IN OUT PLONG Length);
822 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
823 IN AFSDirectoryCB *DirectoryCB,
824 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
825 IN OUT PLONG Length);
828 AFSQueryPhysicalNameInfo( IN PIRP Irp,
829 IN AFSDirectoryCB *DirectoryCB,
830 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
831 IN OUT PLONG Length);
834 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
838 AFSSetBasicInfo( IN PIRP Irp,
839 IN AFSDirectoryCB *DirectoryCB);
842 AFSSetDispositionInfo( IN PIRP Irp,
843 IN AFSDirectoryCB *DirectoryCB);
846 AFSSetRenameInfo( IN PIRP Irp);
849 AFSSetFileLinkInfo( IN PIRP Irp);
852 AFSSetPositionInfo( IN PIRP Irp,
853 IN AFSDirectoryCB *DirectoryCB);
856 AFSSetAllocationInfo( IN PIRP Irp,
857 IN AFSDirectoryCB *DirectoryCB);
860 AFSSetEndOfFileInfo( IN PIRP Irp,
861 IN AFSDirectoryCB *DirectoryCB);
864 AFSProcessShareSetInfo( IN IRP *Irp,
869 AFSProcessShareQueryInfo( IN IRP *Irp,
874 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
877 IN OUT LONG *Length);
880 // AFSEa.cpp Prototypes
884 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
888 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
892 // AFSFlushBuffers.cpp Prototypes
896 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
900 // AFSVolume.cpp Prototypes
904 AFSInitVolume( IN GUID *AuthGroup,
905 IN AFSFileID *RootFid,
906 IN LONG VolumeReferenceReason,
907 OUT AFSVolumeCB **VolumeCB);
910 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
913 AFSVolumeIncrement( IN AFSVolumeCB *VolumeCB,
917 AFSVolumeDecrement( IN AFSVolumeCB *VolumeCB,
921 // AFSVolumeInfo.cpp Prototypes
925 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
929 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
933 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
934 IN PFILE_FS_VOLUME_INFORMATION Buffer,
935 IN OUT PULONG Length);
938 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
939 IN PFILE_FS_SIZE_INFORMATION Buffer,
940 IN OUT PULONG Length);
943 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
944 IN PFILE_FS_DEVICE_INFORMATION Buffer,
945 IN OUT PULONG Length);
948 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
949 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
950 IN OUT PULONG Length);
953 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
954 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
955 IN OUT PULONG Length);
958 // AFSDirControl.cpp Prototypes
962 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
966 AFSQueryDirectory( IN PIRP Irp);
969 AFSNotifyChangeDirectory( IN PIRP Irp);
972 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
976 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
981 AFSSnapshotDirectory( IN AFSFcb *Fcb,
983 IN BOOLEAN ResetIndex);
986 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
988 IN BOOLEAN WatchTree,
989 IN ULONG CompletionFilter,
993 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
995 IN ULONG NotifyFilter,
996 IN ULONG NotificationAction);
999 AFSNotifyReportChangeCallback( IN void *NotifyContext,
1000 IN void *FilterContext);
1003 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
1004 IN ULONG HashIndex);
1007 AFSProcessDirectoryQueryDirect( IN AFSFcb *Fcb,
1012 // AFSFSControl.cpp Prototypes
1016 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
1020 AFSProcessUserFsRequest( IN PIRP Irp);
1023 AFSProcessShareFsCtrl( IN IRP *Irp,
1028 // AFSDevControl.cpp Prototypes
1032 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
1036 // AFSInternalDevControl.cpp Prototypes
1040 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
1044 // AFSShutdown.cpp Prototypes
1048 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1053 AFSShutdownFilesystem( void);
1056 // AFSLockControl.cpp Prototypes
1060 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1064 // AFSCleanup.cpp Prototypes
1068 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1072 // AFSSecurity.cpp Prototypes
1076 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1080 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1084 // AFSSystemControl.cpp Prototypes
1088 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1092 // AFSQuota.cpp Prototypes
1096 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1100 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1104 // AFSGeneric.cpp Prototypes
1108 AFSExceptionFilter( IN CHAR *FunctionString,
1110 IN PEXCEPTION_POINTERS ExceptPtrs);
1113 AFSAcquireExcl( IN PERESOURCE Resource,
1117 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1121 AFSAcquireShared( IN PERESOURCE Resource,
1125 AFSReleaseResource( IN PERESOURCE Resource);
1128 AFSConvertToShared( IN PERESOURCE Resource);
1131 AFSCompleteRequest( IN PIRP Irp,
1135 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1136 IN BOOLEAN UpperCaseName);
1139 AFSLockSystemBuffer( IN PIRP Irp,
1143 AFSLockUserBuffer( IN void *UserBuffer,
1144 IN ULONG BufferLength,
1148 AFSMapToService( IN PIRP Irp,
1149 IN ULONG ByteCount);
1152 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1156 AFSInitializeLibraryDevice( void);
1159 AFSRemoveLibraryDevice( void);
1162 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1166 AFSInitializeGlobalDirectoryEntries( void);
1169 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1170 IN PUNICODE_STRING FileName,
1171 IN PUNICODE_STRING TargetName,
1172 IN AFSDirEnumEntry *DirEnumEntry,
1173 IN ULONG FileIndex);
1176 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1177 IN BOOLEAN DirectoryEntry);
1180 AFSEvaluateNode( IN GUID *AuthGroup,
1181 IN AFSDirectoryCB *DirEntry);
1184 AFSValidateSymLink( IN GUID *AuthGroup,
1185 IN AFSDirectoryCB *DirEntry);
1188 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1191 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1195 AFSIsChildOfParent( IN AFSFcb *Dcb,
1200 AFSCreateHighIndex( IN AFSFileID *FileID);
1204 AFSCreateLowIndex( IN AFSFileID *FileID);
1207 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1208 IN ACCESS_MASK GrantedAccess,
1209 IN BOOLEAN DirectoryEntry);
1212 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1215 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1216 IN UNICODE_STRING *SubstituteName,
1217 IN ULONG StringIndex);
1220 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1221 IN OUT UNICODE_STRING *ComponentName,
1222 IN UNICODE_STRING *SubstituteName,
1223 IN OUT UNICODE_STRING *RemainingPath,
1224 IN BOOLEAN FreePathName);
1227 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1231 AFSInvalidateAllVolumes( VOID);
1234 AFSVerifyEntry( IN GUID *AuthGroup,
1235 IN AFSDirectoryCB *DirectoryCB);
1238 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1241 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1244 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1245 IN GUID *AuthGroup);
1248 AFSIsVolumeFID( IN AFSFileID *FileID);
1251 AFSIsFinalNode( IN AFSFcb *Fcb);
1254 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1255 IN AFSDirEnumEntry *DirEnumEntry);
1258 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1260 IN BOOLEAN FastCall,
1261 IN BOOLEAN SafeToPurge);
1264 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1265 IN UNICODE_STRING *SecondaryName);
1268 AFSInitializeSpecialShareNameList( void);
1271 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1274 AFSWaitOnQueuedReleases( void);
1277 AFSIsEqualFID( IN AFSFileID *FileId1,
1278 IN AFSFileID *FileId2);
1281 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1284 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1287 AFSIsRelativeName( IN UNICODE_STRING *Name);
1290 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1293 AFSUpdateName( IN UNICODE_STRING *Name);
1296 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1297 IN OUT ULONG *Flags,
1298 IN WCHAR *NameBuffer,
1299 IN USHORT NameLength);
1302 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1305 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1308 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1311 AFSVerifyVolume( IN ULONGLONG ProcessId,
1312 IN AFSVolumeCB *VolumeCB);
1315 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1318 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1319 IN AFSDirectoryCB *DirectoryCB,
1320 IN UNICODE_STRING *ParentPathName,
1321 IN AFSNameArrayHdr *RelatedNameArray,
1323 OUT AFSFileInfoCB *FileInfo);
1326 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1327 IN ULONGLONG HashIndex);
1330 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
1334 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
1338 AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
1341 AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
1342 IN AFSFileID * FileID);
1345 AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
1348 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1349 OUT AFSDirectoryCB **TargetDirEntry);
1352 AFSCleanupFcb( IN AFSFcb *Fcb,
1353 IN BOOLEAN ForceFlush);
1356 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1357 IN UNICODE_STRING *NewFileName);
1360 AFSReadCacheFile( IN void *ReadBuffer,
1361 IN LARGE_INTEGER *ReadOffset,
1362 IN ULONG RequestedDataLength,
1363 IN OUT PULONG BytesRead);
1366 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1371 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1374 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1375 IN AFSDirectoryCB *DirEntry);
1378 AFSGetAuthenticationId( void);
1381 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1385 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1388 AFSReferenceCacheFileObject( void);
1391 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1394 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1397 AFSCloseLibrary( void);
1400 AFSDefaultLogMsg( IN ULONG Subsystem,
1406 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1407 IN ULONG InputBufferLength,
1408 IN AFSStatusInfoCB *StatusInfo,
1409 OUT ULONG *ReturnLength);
1412 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1413 IN UNICODE_STRING *ComponentName);
1416 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1417 OUT UNICODE_STRING *ComponentName);
1420 AFSDumpTraceFiles_Default( void);
1423 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1424 IN SIZE_T NumberOfBytes,
1428 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1431 AFSCreateDefaultSecurityDescriptor( void);
1434 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1435 OUT UNICODE_STRING *ParentPath);
1438 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1439 IN AFSObjectInfoCB *ObjectInfo,
1440 IN BOOLEAN WriteAccess,
1441 OUT GUID *AuthGroup);
1444 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1445 IN ULONG InvalidateReason);
1448 // AFSNameArray.cpp Prototypes
1452 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1453 IN ULONG InitialElementCount);
1456 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1457 IN UNICODE_STRING *Path,
1458 IN AFSDirectoryCB *DirectoryCB);
1461 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1462 IN AFSNameArrayHdr *RelatedNameArray,
1463 IN AFSDirectoryCB *DirectoryCB);
1466 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1469 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1470 IN AFSDirectoryCB *DirEntry);
1473 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1476 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1479 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1480 IN AFSDirectoryCB *DirEntry);
1483 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1486 // AFSWorker.cpp Prototypes
1490 AFSInitializeWorkerPool( void);
1493 AFSRemoveWorkerPool( void);
1496 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1497 IN PKSTART_ROUTINE WorkerRoutine);
1500 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1503 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1506 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1509 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1512 AFSWorkerThread( IN PVOID Context);
1515 AFSIOWorkerThread( IN PVOID Context);
1518 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1521 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1524 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1527 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1530 AFSRemoveWorkItem( void);
1533 AFSRemoveIOWorkItem( void);
1536 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1539 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1542 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1545 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1548 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1549 IN GUID *AuthGroup);
1552 AFSQueueGlobalRootEnumeration( void);
1555 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1558 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1559 IN UCHAR FunctionCode,
1560 IN ULONG RequestFLags,
1561 IN AFSIoRun *IoRuns,
1563 IN AFSGatherIo *GatherIo);
1566 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1567 IN ULONG InvalidateReason);
1570 // AFSMD5Support.cpp Prototypes
1574 AFSGenerateMD5( IN char *DataBuffer,
1576 OUT UCHAR *MD5Digest);
1580 #endif /* _AFS_COMMON_H */