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 **ppDirEntry);
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 BOOLEAN bDosDevice,
936 IN OUT PULONG Length);
939 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
940 IN PFILE_FS_SIZE_INFORMATION Buffer,
941 IN OUT PULONG Length);
944 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
945 IN PFILE_FS_DEVICE_INFORMATION Buffer,
946 IN OUT PULONG Length);
949 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
950 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
951 IN OUT PULONG Length);
954 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
955 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
956 IN OUT PULONG Length);
959 // AFSDirControl.cpp Prototypes
963 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
967 AFSQueryDirectory( IN PIRP Irp);
970 AFSNotifyChangeDirectory( IN PIRP Irp);
973 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
977 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
982 AFSSnapshotDirectory( IN AFSFcb *Fcb,
984 IN BOOLEAN ResetIndex);
987 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
989 IN BOOLEAN WatchTree,
990 IN ULONG CompletionFilter,
994 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
996 IN ULONG NotifyFilter,
997 IN ULONG NotificationAction);
1000 AFSNotifyReportChangeCallback( IN void *NotifyContext,
1001 IN void *FilterContext);
1004 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
1005 IN ULONG HashIndex);
1008 AFSProcessDirectoryQueryDirect( IN AFSFcb *Fcb,
1013 // AFSFSControl.cpp Prototypes
1017 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
1021 AFSProcessUserFsRequest( IN PIRP Irp);
1024 AFSProcessShareFsCtrl( IN IRP *Irp,
1029 // AFSDevControl.cpp Prototypes
1033 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
1037 // AFSInternalDevControl.cpp Prototypes
1041 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
1045 // AFSShutdown.cpp Prototypes
1049 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1054 AFSShutdownFilesystem( void);
1057 // AFSLockControl.cpp Prototypes
1061 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1065 // AFSCleanup.cpp Prototypes
1069 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1073 // AFSSecurity.cpp Prototypes
1077 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1081 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1085 // AFSSystemControl.cpp Prototypes
1089 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1093 // AFSQuota.cpp Prototypes
1097 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1101 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1105 // AFSGeneric.cpp Prototypes
1109 AFSExceptionFilter( IN CHAR *FunctionString,
1111 IN PEXCEPTION_POINTERS ExceptPtrs);
1114 AFSAcquireExcl( IN PERESOURCE Resource,
1118 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1122 AFSAcquireShared( IN PERESOURCE Resource,
1126 AFSReleaseResource( IN PERESOURCE Resource);
1129 AFSConvertToShared( IN PERESOURCE Resource);
1132 AFSCompleteRequest( IN PIRP Irp,
1136 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1137 IN BOOLEAN UpperCaseName);
1140 AFSLockSystemBuffer( IN PIRP Irp,
1144 AFSLockUserBuffer( IN void *UserBuffer,
1145 IN ULONG BufferLength,
1149 AFSMapToService( IN PIRP Irp,
1150 IN ULONG ByteCount);
1153 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1157 AFSInitializeLibraryDevice( void);
1160 AFSRemoveLibraryDevice( void);
1163 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1167 AFSInitializeGlobalDirectoryEntries( void);
1170 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1171 IN PUNICODE_STRING FileName,
1172 IN PUNICODE_STRING TargetName,
1173 IN AFSDirEnumEntry *DirEnumEntry,
1174 IN ULONG FileIndex);
1177 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1178 IN BOOLEAN DirectoryEntry);
1181 AFSEvaluateNode( IN GUID *AuthGroup,
1182 IN AFSDirectoryCB *DirEntry);
1185 AFSValidateSymLink( IN GUID *AuthGroup,
1186 IN AFSDirectoryCB *DirEntry);
1189 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1192 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1196 AFSIsChildOfParent( IN AFSFcb *Dcb,
1201 AFSCreateHighIndex( IN AFSFileID *FileID);
1205 AFSCreateLowIndex( IN AFSFileID *FileID);
1208 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1209 IN ACCESS_MASK GrantedAccess,
1210 IN BOOLEAN DirectoryEntry);
1213 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1216 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1217 IN UNICODE_STRING *SubstituteName,
1218 IN ULONG StringIndex);
1221 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1222 IN OUT UNICODE_STRING *ComponentName,
1223 IN UNICODE_STRING *SubstituteName,
1224 IN OUT UNICODE_STRING *RemainingPath,
1225 IN BOOLEAN FreePathName);
1228 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1232 AFSInvalidateAllVolumes( VOID);
1235 AFSVerifyEntry( IN GUID *AuthGroup,
1236 IN AFSDirectoryCB *DirectoryCB);
1239 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1242 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1245 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1246 IN GUID *AuthGroup);
1249 AFSIsVolumeFID( IN AFSFileID *FileID);
1252 AFSIsFinalNode( IN AFSFcb *Fcb);
1255 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1256 IN AFSDirEnumEntry *DirEnumEntry);
1259 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1261 IN BOOLEAN FastCall,
1262 IN BOOLEAN SafeToPurge);
1265 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1266 IN UNICODE_STRING *SecondaryName);
1269 AFSInitializeSpecialShareNameList( void);
1272 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1275 AFSWaitOnQueuedReleases( void);
1278 AFSIsEqualFID( IN AFSFileID *FileId1,
1279 IN AFSFileID *FileId2);
1282 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1285 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1288 AFSIsRelativeName( IN UNICODE_STRING *Name);
1291 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1294 AFSUpdateName( IN UNICODE_STRING *Name);
1297 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1298 IN OUT ULONG *Flags,
1299 IN WCHAR *NameBuffer,
1300 IN USHORT NameLength);
1303 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1306 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1309 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1312 AFSVerifyVolume( IN ULONGLONG ProcessId,
1313 IN AFSVolumeCB *VolumeCB);
1316 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1319 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1320 IN AFSDirectoryCB *DirectoryCB,
1321 IN UNICODE_STRING *ParentPathName,
1322 IN AFSNameArrayHdr *RelatedNameArray,
1324 OUT AFSFileInfoCB *FileInfo);
1327 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1328 IN ULONGLONG HashIndex);
1331 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
1335 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
1339 AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
1342 AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
1343 IN AFSFileID * FileID);
1346 AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
1349 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1350 OUT AFSDirectoryCB **TargetDirEntry);
1353 AFSCleanupFcb( IN AFSFcb *Fcb,
1354 IN BOOLEAN ForceFlush);
1357 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1358 IN UNICODE_STRING *NewFileName);
1361 AFSReadCacheFile( IN void *ReadBuffer,
1362 IN LARGE_INTEGER *ReadOffset,
1363 IN ULONG RequestedDataLength,
1364 IN OUT PULONG BytesRead);
1367 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1372 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1375 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1376 IN AFSDirectoryCB *DirEntry);
1379 AFSGetAuthenticationId( void);
1382 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1386 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1389 AFSReferenceCacheFileObject( void);
1392 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1395 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1398 AFSCloseLibrary( void);
1401 AFSDefaultLogMsg( IN ULONG Subsystem,
1407 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1408 IN ULONG InputBufferLength,
1409 IN AFSStatusInfoCB *StatusInfo,
1410 OUT ULONG *ReturnLength);
1413 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1414 IN UNICODE_STRING *ComponentName);
1417 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1418 OUT UNICODE_STRING *ComponentName);
1421 AFSDumpTraceFiles_Default( void);
1424 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1425 IN SIZE_T NumberOfBytes,
1429 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1432 AFSCreateDefaultSecurityDescriptor( void);
1435 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1436 OUT UNICODE_STRING *ParentPath);
1439 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1440 IN AFSObjectInfoCB *ObjectInfo,
1441 IN BOOLEAN WriteAccess,
1442 OUT GUID *AuthGroup);
1445 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1446 IN ULONG InvalidateReason);
1449 // AFSNameArray.cpp Prototypes
1453 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1454 IN ULONG InitialElementCount);
1457 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1458 IN UNICODE_STRING *Path,
1459 IN AFSDirectoryCB *DirectoryCB);
1462 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1463 IN AFSNameArrayHdr *RelatedNameArray,
1464 IN AFSDirectoryCB *DirectoryCB);
1467 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1470 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1471 IN AFSDirectoryCB *DirEntry);
1474 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1477 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1480 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1481 IN AFSDirectoryCB *DirEntry);
1484 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1487 // AFSWorker.cpp Prototypes
1491 AFSInitializeWorkerPool( void);
1494 AFSRemoveWorkerPool( void);
1497 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1498 IN PKSTART_ROUTINE WorkerRoutine);
1501 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1504 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1507 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1510 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1513 AFSWorkerThread( IN PVOID Context);
1516 AFSIOWorkerThread( IN PVOID Context);
1519 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1522 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1525 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1528 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1531 AFSRemoveWorkItem( void);
1534 AFSRemoveIOWorkItem( void);
1537 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1540 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1543 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1546 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1549 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1550 IN GUID *AuthGroup);
1553 AFSQueueGlobalRootEnumeration( void);
1556 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1559 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1560 IN UCHAR FunctionCode,
1561 IN ULONG RequestFLags,
1562 IN AFSIoRun *IoRuns,
1564 IN AFSGatherIo *GatherIo);
1567 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1568 IN ULONG InvalidateReason);
1571 // AFSMD5Support.cpp Prototypes
1575 AFSGenerateMD5( IN char *DataBuffer,
1577 OUT UCHAR *MD5Digest);
1581 #endif /* _AFS_COMMON_H */