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,
329 IN BOOLEAN bOpenedReparsePoint,
334 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
336 IN AFSVolumeCB *VolumeCB,
338 IN AFSDirectoryCB *ParentDirCB,
339 IN AFSDirectoryCB *DirectoryCB,
344 AFSControlDeviceCreate( IN PIRP Irp);
347 AFSOpenIOCtlFcb( IN PIRP Irp,
349 IN AFSDirectoryCB *ParentDirCB,
354 AFSOpenSpecialShareFcb( IN PIRP Irp,
356 IN AFSDirectoryCB *DirectoryCB,
361 // AFSExtentsSupport.cpp Prototypes
364 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
367 AFSExtentForOffset( IN AFSFcb *Fcb,
368 IN PLARGE_INTEGER Offset,
369 IN BOOLEAN ReturnPrevious);
371 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
375 AFSRequestExtents( IN AFSFcb *Fcb,
377 IN PLARGE_INTEGER Offset,
379 OUT BOOLEAN *FullyMApped);
381 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
382 IN PLARGE_INTEGER Offset,
384 IN OUT AFSExtent **FirstExtent,
385 OUT AFSExtent **LastExtent);
388 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
390 IN PLARGE_INTEGER Offset,
394 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
398 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
401 AFSProcessReleaseFileExtents( IN PIRP Irp);
404 AFSProcessExtentFailure( PIRP Irp);
407 AFSProcessSetExtents( IN AFSFcb *pFcb,
409 IN AFSFileExtentCB *Result);
412 AFSFlushExtents( IN AFSFcb *pFcb,
416 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
418 IN BOOLEAN bReleaseAll);
421 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
425 AFSMarkDirty( IN AFSFcb *pFcb,
426 IN AFSExtent *StartExtent,
427 IN ULONG ExtentsCount,
428 IN LARGE_INTEGER *StartingByte,
429 IN BOOLEAN DerefExtents);
432 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
436 AFSDeleteFcbExtents( IN AFSFcb *Fcb);
439 AFSTrimExtents( IN AFSFcb *Fcb,
440 IN PLARGE_INTEGER FileSize);
443 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
445 IN AFSFileExtentCB *Result);
448 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
449 IN ULONG ExtentsCount);
452 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
453 IN ULONG ExtentsCount);
456 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
457 IN AFSExtent *Extent);
460 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
463 NextExtent( AFSExtent *Extent, ULONG SkipList );
466 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
467 AFSByteRange ** pByteRangeList);
471 AFSSetupMD5Hash( IN AFSFcb *Fcb,
472 IN AFSExtent *StartExtent,
473 IN ULONG ExtentsCount,
474 IN void *SystemBuffer,
475 IN LARGE_INTEGER *ByteOffset,
481 // AFSIoSupp.cpp Prototypes
484 AFSGetExtents( IN AFSFcb *pFcb,
485 IN PLARGE_INTEGER Offset,
488 OUT ULONG *ExtentCount,
489 OUT ULONG *RunCount);
492 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
494 IN PVOID SystemBuffer,
495 IN OUT AFSIoRun *IoRun,
496 IN PLARGE_INTEGER Start,
499 IN OUT ULONG *RunCount);
502 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
503 IN UCHAR FunctionCode,
507 IN OUT AFSGatherIo *Gather);
510 AFSCompleteIo( IN AFSGatherIo *Gather,
514 AFSProcessExtentRun( IN PVOID SystemBuffer,
515 IN PLARGE_INTEGER Start,
518 IN BOOLEAN WriteRequest);
521 // AFSClose.cpp Prototypes
526 AFSClose( IN PDEVICE_OBJECT DeviceObject,
530 // AFSFcbSupport.cpp Prototypes
534 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
537 AFSInitRootFcb( IN ULONGLONG ProcessID,
538 IN AFSVolumeCB *VolumeCB);
541 AFSRemoveRootFcb( IN AFSVolumeCB *VolumeCB);
544 AFSInitCcb( IN OUT AFSCcb **Ccb,
545 IN AFSDirectoryCB *DirectoryCB,
546 IN ACCESS_MASK GrantedAccess,
547 IN ULONG FileAccess);
550 AFSRemoveFcb( IN AFSFcb **Fcb);
553 AFSRemoveCcb( IN AFSFcb *Fcb,
557 AFSInsertCcb( IN AFSFcb *Fcb,
561 // AFSNameSupport.cpp Prototypes
565 AFSLocateNameEntry( IN GUID *AuthGroup,
566 IN PFILE_OBJECT FileObject,
567 IN OUT UNICODE_STRING *RootPathName,
568 IN UNICODE_STRING *ParsedPathName,
569 IN AFSNameArrayHdr *NameArray,
571 IN AFSVolumeCB *VolumeCB,
572 IN AFSDirectoryCB *ParentDirectoryCB,
573 OUT AFSVolumeCB **OutVolumeCB,
574 OUT LONG *OutVolumeReferenceReason,
575 OUT AFSDirectoryCB **OutParentDirectoryCB,
576 OUT AFSDirectoryCB **OutDirectoryCB,
577 OUT PUNICODE_STRING ComponentName,
578 OUT PUNICODE_STRING TargetName);
581 AFSCreateDirEntry( IN GUID *AuthGroup,
582 IN AFSObjectInfoCB *ParentObjectInfo,
583 IN AFSDirectoryCB *ParentDirCB,
584 IN PUNICODE_STRING FileName,
585 IN PUNICODE_STRING ComponentName,
587 IN OUT AFSDirectoryCB **DirEntry);
590 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
591 IN AFSDirectoryCB *DirEntry,
592 IN BOOLEAN InsertInEnumList);
595 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
596 IN AFSDirectoryCB **ppDirEntry);
599 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
600 IN AFSDirectoryCB *DirEntry,
601 IN BOOLEAN RemoveFromEnumList);
604 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
605 IN OUT PUNICODE_STRING TargetFileName);
608 AFSParseName( IN PIRP Irp,
610 OUT PUNICODE_STRING FileName,
611 OUT PUNICODE_STRING ParsedFileName,
612 OUT PUNICODE_STRING RootFileName,
613 OUT ULONG *ParseFlags,
614 OUT AFSVolumeCB **VolumeCB,
615 OUT AFSDirectoryCB **ParentDirectoryCB,
616 OUT AFSNameArrayHdr **NameArray);
619 AFSCheckCellName( IN GUID *AuthGroup,
620 IN UNICODE_STRING *CellName,
621 OUT AFSDirectoryCB **ShareDirEntry);
624 AFSBuildMountPointTarget( IN GUID *AuthGroup,
625 IN AFSDirectoryCB *DirectoryCB,
626 OUT AFSVolumeCB **VolumeCB);
629 AFSBuildRootVolume( IN GUID *AuthGroup,
630 IN AFSFileID *FileId,
631 OUT AFSVolumeCB **TargetVolumeCB);
634 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
635 IN PFILE_OBJECT FileObject,
636 IN PUNICODE_STRING RemainingPath,
638 OUT PUNICODE_STRING TargetName);
641 // AFSNetworkProviderSupport.cpp
645 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
646 IN OUT PULONG ResultStatus,
647 IN OUT ULONG_PTR *ReturnOutputBufferLength);
650 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
651 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
652 IN OUT ULONG_PTR *ReturnOutputBufferLength);
655 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
656 IN OUT WCHAR *RemoteName,
657 IN ULONG RemoteNameBufferLength,
658 IN OUT ULONG_PTR *ReturnOutputBufferLength);
661 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
662 IN ULONG ConnectionBufferLength,
663 IN OUT ULONG_PTR *ReturnOutputBufferLength);
666 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
667 IN ULONG DisplayType);
669 AFSProviderConnectionCB *
670 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
673 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
674 IN AFSProviderConnectionCB *RootConnection,
675 IN ULONG BufferLength,
676 OUT PULONG CopiedLength);
679 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
680 IN ULONG BufferLength,
681 IN OUT ULONG_PTR *ReturnOutputBufferLength);
684 AFSIsDriveMapped( IN WCHAR DriveMapping);
687 // AFSRead.cpp Prototypes
691 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
693 IN HANDLE OnBehalfOf);
696 AFSRead( IN PDEVICE_OBJECT DeviceObject,
701 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
705 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
709 // AFSWrite.cpp Prototypes
713 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
715 IN HANDLE CallingUser,
719 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
723 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
727 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
731 AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
732 IN PFILE_OBJECT FileObject,
733 IN HANDLE CallingUser,
735 IN ULONG BytesToWrite,
736 IN BOOLEAN Retrying);
739 // AFSFileInfo.cpp Prototypes
743 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
747 AFSQueryBasicInfo( IN PIRP Irp,
748 IN AFSDirectoryCB *DirectoryCB,
749 IN OUT PFILE_BASIC_INFORMATION Buffer,
750 IN OUT PLONG Length);
753 AFSQueryStandardInfo( IN PIRP Irp,
754 IN AFSDirectoryCB *DirectoryCB,
755 IN OUT PFILE_STANDARD_INFORMATION Buffer,
756 IN OUT PLONG Length);
759 AFSQueryInternalInfo( IN PIRP Irp,
761 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
762 IN OUT PLONG Length);
765 AFSQueryEaInfo( IN PIRP Irp,
766 IN AFSDirectoryCB *DirectoryCB,
767 IN OUT PFILE_EA_INFORMATION Buffer,
768 IN OUT PLONG Length);
771 AFSQueryPositionInfo( IN PIRP Irp,
773 IN OUT PFILE_POSITION_INFORMATION Buffer,
774 IN OUT PLONG Length);
777 AFSQueryNameInfo( IN PIRP Irp,
778 IN AFSDirectoryCB *DirectoryCB,
779 IN OUT PFILE_NAME_INFORMATION Buffer,
780 IN OUT PLONG Length);
783 AFSQueryShortNameInfo( IN PIRP Irp,
784 IN AFSDirectoryCB *DirectoryCB,
785 IN OUT PFILE_NAME_INFORMATION Buffer,
786 IN OUT PLONG Length);
789 AFSQueryNetworkInfo( IN PIRP Irp,
790 IN AFSDirectoryCB *DirectoryCB,
791 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
792 IN OUT PLONG Length);
795 AFSQueryStreamInfo( IN PIRP Irp,
796 IN AFSDirectoryCB *DirectoryCB,
797 IN OUT FILE_STREAM_INFORMATION *Buffer,
798 IN OUT PLONG Length);
801 AFSQueryAccess( IN PIRP Irp,
803 IN OUT PFILE_ACCESS_INFORMATION Buffer,
804 IN OUT PLONG Length);
807 AFSQueryMode( IN PIRP Irp,
809 IN OUT PFILE_MODE_INFORMATION Buffer,
810 IN OUT PLONG Length);
813 AFSQueryAlignment( IN PIRP Irp,
815 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
816 IN OUT PLONG Length);
819 AFSQueryAttribTagInfo( IN PIRP Irp,
820 IN AFSDirectoryCB *DirectoryCB,
821 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
822 IN OUT PLONG Length);
825 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
826 IN AFSDirectoryCB *DirectoryCB,
827 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
828 IN OUT PLONG Length);
831 AFSQueryPhysicalNameInfo( IN PIRP Irp,
832 IN AFSDirectoryCB *DirectoryCB,
833 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
834 IN OUT PLONG Length);
837 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
841 AFSSetBasicInfo( IN PIRP Irp,
842 IN AFSDirectoryCB *DirectoryCB,
843 OUT BOOLEAN *bUpdateFileInfo);
846 AFSSetDispositionInfo( IN PIRP Irp,
847 IN AFSDirectoryCB *DirectoryCB);
850 AFSSetRenameInfo( IN PIRP Irp);
853 AFSSetFileLinkInfo( IN PIRP Irp);
856 AFSSetPositionInfo( IN PIRP Irp,
857 IN AFSDirectoryCB *DirectoryCB);
860 AFSSetAllocationInfo( IN PIRP Irp,
861 IN AFSDirectoryCB *DirectoryCB);
864 AFSSetEndOfFileInfo( IN PIRP Irp,
865 IN AFSDirectoryCB *DirectoryCB);
868 AFSProcessShareSetInfo( IN IRP *Irp,
873 AFSProcessShareQueryInfo( IN IRP *Irp,
878 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
881 IN OUT LONG *Length);
884 // AFSEa.cpp Prototypes
888 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
892 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
896 // AFSFlushBuffers.cpp Prototypes
900 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
904 // AFSVolume.cpp Prototypes
908 AFSInitVolume( IN GUID *AuthGroup,
909 IN AFSFileID *RootFid,
910 IN LONG VolumeReferenceReason,
911 OUT AFSVolumeCB **VolumeCB);
914 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
917 AFSVolumeIncrement( IN AFSVolumeCB *VolumeCB,
921 AFSVolumeDecrement( IN AFSVolumeCB *VolumeCB,
925 // AFSVolumeInfo.cpp Prototypes
929 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
933 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
937 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
938 IN PFILE_FS_VOLUME_INFORMATION Buffer,
939 IN BOOLEAN bDosDevice,
940 IN OUT PULONG Length);
943 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
944 IN PFILE_FS_SIZE_INFORMATION Buffer,
945 IN OUT PULONG Length);
948 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
949 IN PFILE_FS_DEVICE_INFORMATION Buffer,
950 IN OUT PULONG Length);
953 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
954 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
955 IN OUT PULONG Length);
958 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
959 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
960 IN OUT PULONG Length);
963 // AFSDirControl.cpp Prototypes
967 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
971 AFSQueryDirectory( IN PIRP Irp);
974 AFSNotifyChangeDirectory( IN PIRP Irp);
977 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
981 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
986 AFSSnapshotDirectory( IN AFSFcb *Fcb,
988 IN BOOLEAN ResetIndex);
991 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
993 IN BOOLEAN WatchTree,
994 IN ULONG CompletionFilter,
998 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
1000 IN ULONG NotifyFilter,
1001 IN ULONG NotificationAction);
1004 AFSNotifyReportChangeCallback( IN void *NotifyContext,
1005 IN void *FilterContext);
1008 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
1009 IN ULONG HashIndex);
1012 AFSProcessDirectoryQueryDirect( IN AFSFcb *Fcb,
1017 // AFSFSControl.cpp Prototypes
1021 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
1025 AFSProcessUserFsRequest( IN PIRP Irp);
1028 AFSProcessShareFsCtrl( IN IRP *Irp,
1033 // AFSDevControl.cpp Prototypes
1037 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
1041 // AFSInternalDevControl.cpp Prototypes
1045 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
1049 // AFSShutdown.cpp Prototypes
1053 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1058 AFSShutdownFilesystem( void);
1061 // AFSLockControl.cpp Prototypes
1065 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1069 // AFSCleanup.cpp Prototypes
1073 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1077 // AFSSecurity.cpp Prototypes
1081 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1085 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1089 // AFSSystemControl.cpp Prototypes
1093 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1097 // AFSQuota.cpp Prototypes
1101 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1105 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1109 // AFSGeneric.cpp Prototypes
1113 AFSExceptionFilter( IN CHAR *FunctionString,
1115 IN PEXCEPTION_POINTERS ExceptPtrs);
1118 AFSAcquireExcl( IN PERESOURCE Resource,
1122 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1126 AFSAcquireShared( IN PERESOURCE Resource,
1130 AFSReleaseResource( IN PERESOURCE Resource);
1133 AFSConvertToShared( IN PERESOURCE Resource);
1136 AFSCompleteRequest( IN PIRP Irp,
1140 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1141 IN BOOLEAN UpperCaseName);
1144 AFSLockSystemBuffer( IN PIRP Irp,
1148 AFSLockUserBuffer( IN void *UserBuffer,
1149 IN ULONG BufferLength,
1153 AFSMapToService( IN PIRP Irp,
1154 IN ULONG ByteCount);
1157 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1161 AFSInitializeLibraryDevice( void);
1164 AFSRemoveLibraryDevice( void);
1167 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1171 AFSInitializeGlobalDirectoryEntries( void);
1174 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1175 IN PUNICODE_STRING FileName,
1176 IN PUNICODE_STRING TargetName,
1177 IN AFSDirEnumEntry *DirEnumEntry,
1178 IN ULONG FileIndex);
1181 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1182 IN BOOLEAN DirectoryEntry);
1185 AFSEvaluateNode( IN GUID *AuthGroup,
1186 IN AFSDirectoryCB *DirEntry);
1189 AFSValidateSymLink( IN GUID *AuthGroup,
1190 IN AFSDirectoryCB *DirEntry);
1193 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1196 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1200 AFSIsChildOfParent( IN AFSFcb *Dcb,
1205 AFSCreateHighIndex( IN AFSFileID *FileID);
1209 AFSCreateLowIndex( IN AFSFileID *FileID);
1212 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1213 IN ACCESS_MASK GrantedAccess,
1214 IN BOOLEAN DirectoryEntry);
1217 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1220 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1221 IN UNICODE_STRING *SubstituteName,
1222 IN ULONG StringIndex);
1225 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1226 IN OUT UNICODE_STRING *ComponentName,
1227 IN UNICODE_STRING *SubstituteName,
1228 IN OUT UNICODE_STRING *RemainingPath,
1229 IN BOOLEAN FreePathName);
1232 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1236 AFSInvalidateAllVolumes( VOID);
1239 AFSVerifyEntry( IN GUID *AuthGroup,
1240 IN AFSDirectoryCB *DirectoryCB,
1241 IN BOOLEAN bFollowMountPoint);
1244 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1247 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1250 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1251 IN GUID *AuthGroup);
1254 AFSIsVolumeFID( IN AFSFileID *FileID);
1257 AFSIsFinalNode( IN AFSFcb *Fcb);
1260 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1261 IN AFSDirEnumEntry *DirEnumEntry);
1264 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1266 IN BOOLEAN FastCall,
1267 IN BOOLEAN SafeToPurge);
1270 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1271 IN UNICODE_STRING *SecondaryName);
1274 AFSInitializeSpecialShareNameList( void);
1277 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1280 AFSWaitOnQueuedReleases( void);
1283 AFSIsEqualFID( IN AFSFileID *FileId1,
1284 IN AFSFileID *FileId2);
1287 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1290 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1293 AFSIsRelativeName( IN UNICODE_STRING *Name);
1296 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1299 AFSUpdateName( IN UNICODE_STRING *Name);
1302 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1303 IN OUT ULONG *Flags,
1304 IN WCHAR *NameBuffer,
1305 IN USHORT NameLength);
1308 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1311 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1314 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1317 AFSVerifyVolume( IN ULONGLONG ProcessId,
1318 IN AFSVolumeCB *VolumeCB);
1321 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1324 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1325 IN AFSDirectoryCB *DirectoryCB,
1326 IN UNICODE_STRING *ParentPathName,
1327 IN AFSNameArrayHdr *RelatedNameArray,
1329 OUT AFSFileInfoCB *FileInfo);
1332 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1333 IN ULONGLONG HashIndex);
1336 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
1340 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
1344 AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
1347 AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
1348 IN AFSFileID * FileID,
1349 IN BOOLEAN bUpdateLastUse);
1352 AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
1355 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1356 OUT AFSDirectoryCB **TargetDirEntry);
1359 AFSCleanupFcb( IN AFSFcb *Fcb,
1360 IN BOOLEAN ForceFlush);
1363 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1364 IN UNICODE_STRING *NewFileName);
1367 AFSReadCacheFile( IN void *ReadBuffer,
1368 IN LARGE_INTEGER *ReadOffset,
1369 IN ULONG RequestedDataLength,
1370 IN OUT PULONG BytesRead);
1373 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1378 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1381 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1382 IN AFSDirectoryCB *DirEntry);
1385 AFSGetAuthenticationId( void);
1388 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1392 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1395 AFSReferenceCacheFileObject( void);
1398 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1401 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1404 AFSCloseLibrary( void);
1407 AFSDefaultLogMsg( IN ULONG Subsystem,
1413 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1414 IN ULONG InputBufferLength,
1415 IN AFSStatusInfoCB *StatusInfo,
1416 OUT ULONG *ReturnLength);
1419 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1420 IN UNICODE_STRING *ComponentName);
1423 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1424 OUT UNICODE_STRING *ComponentName);
1427 AFSDumpTraceFiles_Default( void);
1430 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1431 IN SIZE_T NumberOfBytes,
1434 #define AFSLibExFreePool(x) ExFreePool(x)
1436 #define AFSLibExFreePoolWithTag(x,y) ExFreePoolWithTag(x,y)
1439 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1442 AFSCreateDefaultSecurityDescriptor( void);
1445 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1446 OUT UNICODE_STRING *ParentPath);
1449 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1450 IN AFSObjectInfoCB *ObjectInfo,
1451 IN BOOLEAN WriteAccess,
1452 OUT GUID *AuthGroup);
1455 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1456 IN ULONG InvalidateReason);
1459 AFSIgnoreReparsePointToFile( void);
1462 AFSRetrieveTargetFileInfo( IN PUNICODE_STRING TargetName,
1463 OUT AFSFileInfoCB *FileInfo);
1466 // AFSNameArray.cpp Prototypes
1470 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1471 IN ULONG InitialElementCount);
1474 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1475 IN UNICODE_STRING *Path,
1476 IN AFSDirectoryCB *DirectoryCB);
1479 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1480 IN AFSNameArrayHdr *RelatedNameArray,
1481 IN AFSDirectoryCB *DirectoryCB);
1484 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1487 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1488 IN AFSDirectoryCB *DirEntry);
1491 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1494 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1497 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1498 IN AFSDirectoryCB *DirEntry);
1501 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1504 // AFSWorker.cpp Prototypes
1508 AFSInitializeWorkerPool( void);
1511 AFSRemoveWorkerPool( void);
1514 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1515 IN PKSTART_ROUTINE WorkerRoutine);
1518 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1521 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1524 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1527 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1530 AFSWorkerThread( IN PVOID Context);
1533 AFSIOWorkerThread( IN PVOID Context);
1536 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1539 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1542 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1545 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1548 AFSRemoveWorkItem( void);
1551 AFSRemoveIOWorkItem( void);
1554 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1557 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1560 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1563 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1566 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1567 IN GUID *AuthGroup);
1570 AFSQueueGlobalRootEnumeration( void);
1573 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1576 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1577 IN UCHAR FunctionCode,
1578 IN ULONG RequestFLags,
1579 IN AFSIoRun *IoRuns,
1581 IN AFSGatherIo *GatherIo);
1584 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1585 IN ULONG InvalidateReason);
1588 // AFSMD5Support.cpp Prototypes
1592 AFSGenerateMD5( IN char *DataBuffer,
1594 OUT UCHAR *MD5Digest);
1598 #endif /* _AFS_COMMON_H */