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);
580 AFSCreateDirEntry( IN GUID *AuthGroup,
581 IN AFSObjectInfoCB *ParentObjectInfo,
582 IN AFSDirectoryCB *ParentDirCB,
583 IN PUNICODE_STRING FileName,
584 IN PUNICODE_STRING ComponentName,
586 IN OUT AFSDirectoryCB **DirEntry);
589 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
590 IN AFSDirectoryCB *DirEntry,
591 IN BOOLEAN InsertInEnumList);
594 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
595 IN AFSDirectoryCB **ppDirEntry);
598 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
599 IN AFSDirectoryCB *DirEntry,
600 IN BOOLEAN RemoveFromEnumList);
603 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
604 IN OUT PUNICODE_STRING TargetFileName);
607 AFSParseName( IN PIRP Irp,
609 OUT PUNICODE_STRING FileName,
610 OUT PUNICODE_STRING ParsedFileName,
611 OUT PUNICODE_STRING RootFileName,
612 OUT ULONG *ParseFlags,
613 OUT AFSVolumeCB **VolumeCB,
614 OUT AFSDirectoryCB **ParentDirectoryCB,
615 OUT AFSNameArrayHdr **NameArray);
618 AFSCheckCellName( IN GUID *AuthGroup,
619 IN UNICODE_STRING *CellName,
620 OUT AFSDirectoryCB **ShareDirEntry);
623 AFSBuildMountPointTarget( IN GUID *AuthGroup,
624 IN AFSDirectoryCB *DirectoryCB,
625 OUT AFSVolumeCB **VolumeCB);
628 AFSBuildRootVolume( IN GUID *AuthGroup,
629 IN AFSFileID *FileId,
630 OUT AFSVolumeCB **TargetVolumeCB);
633 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
634 IN PFILE_OBJECT FileObject,
635 IN UNICODE_STRING *RemainingPath,
639 // AFSNetworkProviderSupport.cpp
643 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
644 IN OUT PULONG ResultStatus,
645 IN OUT ULONG_PTR *ReturnOutputBufferLength);
648 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
649 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
650 IN OUT ULONG_PTR *ReturnOutputBufferLength);
653 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
654 IN OUT WCHAR *RemoteName,
655 IN ULONG RemoteNameBufferLength,
656 IN OUT ULONG_PTR *ReturnOutputBufferLength);
659 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
660 IN ULONG ConnectionBufferLength,
661 IN OUT ULONG_PTR *ReturnOutputBufferLength);
664 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
665 IN ULONG DisplayType);
667 AFSProviderConnectionCB *
668 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
671 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
672 IN AFSProviderConnectionCB *RootConnection,
673 IN ULONG BufferLength,
674 OUT PULONG CopiedLength);
677 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
678 IN ULONG BufferLength,
679 IN OUT ULONG_PTR *ReturnOutputBufferLength);
682 AFSIsDriveMapped( IN WCHAR DriveMapping);
685 // AFSRead.cpp Prototypes
689 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
691 IN HANDLE OnBehalfOf);
694 AFSRead( IN PDEVICE_OBJECT DeviceObject,
699 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
703 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
707 // AFSWrite.cpp Prototypes
711 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
713 IN HANDLE CallingUser,
717 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
721 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
725 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
729 AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
730 IN PFILE_OBJECT FileObject,
731 IN HANDLE CallingUser,
733 IN ULONG BytesToWrite,
734 IN BOOLEAN Retrying);
737 // AFSFileInfo.cpp Prototypes
741 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
745 AFSQueryBasicInfo( IN PIRP Irp,
746 IN AFSDirectoryCB *DirectoryCB,
747 IN OUT PFILE_BASIC_INFORMATION Buffer,
748 IN OUT PLONG Length);
751 AFSQueryStandardInfo( IN PIRP Irp,
752 IN AFSDirectoryCB *DirectoryCB,
753 IN OUT PFILE_STANDARD_INFORMATION Buffer,
754 IN OUT PLONG Length);
757 AFSQueryInternalInfo( IN PIRP Irp,
759 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
760 IN OUT PLONG Length);
763 AFSQueryEaInfo( IN PIRP Irp,
764 IN AFSDirectoryCB *DirectoryCB,
765 IN OUT PFILE_EA_INFORMATION Buffer,
766 IN OUT PLONG Length);
769 AFSQueryPositionInfo( IN PIRP Irp,
771 IN OUT PFILE_POSITION_INFORMATION Buffer,
772 IN OUT PLONG Length);
775 AFSQueryNameInfo( IN PIRP Irp,
776 IN AFSDirectoryCB *DirectoryCB,
777 IN OUT PFILE_NAME_INFORMATION Buffer,
778 IN OUT PLONG Length);
781 AFSQueryShortNameInfo( IN PIRP Irp,
782 IN AFSDirectoryCB *DirectoryCB,
783 IN OUT PFILE_NAME_INFORMATION Buffer,
784 IN OUT PLONG Length);
787 AFSQueryNetworkInfo( IN PIRP Irp,
788 IN AFSDirectoryCB *DirectoryCB,
789 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
790 IN OUT PLONG Length);
793 AFSQueryStreamInfo( IN PIRP Irp,
794 IN AFSDirectoryCB *DirectoryCB,
795 IN OUT FILE_STREAM_INFORMATION *Buffer,
796 IN OUT PLONG Length);
799 AFSQueryAccess( IN PIRP Irp,
801 IN OUT PFILE_ACCESS_INFORMATION Buffer,
802 IN OUT PLONG Length);
805 AFSQueryMode( IN PIRP Irp,
807 IN OUT PFILE_MODE_INFORMATION Buffer,
808 IN OUT PLONG Length);
811 AFSQueryAlignment( IN PIRP Irp,
813 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
814 IN OUT PLONG Length);
817 AFSQueryAttribTagInfo( IN PIRP Irp,
818 IN AFSDirectoryCB *DirectoryCB,
819 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
820 IN OUT PLONG Length);
823 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
824 IN AFSDirectoryCB *DirectoryCB,
825 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
826 IN OUT PLONG Length);
829 AFSQueryPhysicalNameInfo( IN PIRP Irp,
830 IN AFSDirectoryCB *DirectoryCB,
831 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
832 IN OUT PLONG Length);
835 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
839 AFSSetBasicInfo( IN PIRP Irp,
840 IN AFSDirectoryCB *DirectoryCB);
843 AFSSetDispositionInfo( IN PIRP Irp,
844 IN AFSDirectoryCB *DirectoryCB);
847 AFSSetRenameInfo( IN PIRP Irp);
850 AFSSetFileLinkInfo( IN PIRP Irp);
853 AFSSetPositionInfo( IN PIRP Irp,
854 IN AFSDirectoryCB *DirectoryCB);
857 AFSSetAllocationInfo( IN PIRP Irp,
858 IN AFSDirectoryCB *DirectoryCB);
861 AFSSetEndOfFileInfo( IN PIRP Irp,
862 IN AFSDirectoryCB *DirectoryCB);
865 AFSProcessShareSetInfo( IN IRP *Irp,
870 AFSProcessShareQueryInfo( IN IRP *Irp,
875 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
878 IN OUT LONG *Length);
881 // AFSEa.cpp Prototypes
885 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
889 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
893 // AFSFlushBuffers.cpp Prototypes
897 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
901 // AFSVolume.cpp Prototypes
905 AFSInitVolume( IN GUID *AuthGroup,
906 IN AFSFileID *RootFid,
907 IN LONG VolumeReferenceReason,
908 OUT AFSVolumeCB **VolumeCB);
911 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
914 AFSVolumeIncrement( IN AFSVolumeCB *VolumeCB,
918 AFSVolumeDecrement( IN AFSVolumeCB *VolumeCB,
922 // AFSVolumeInfo.cpp Prototypes
926 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
930 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
934 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
935 IN PFILE_FS_VOLUME_INFORMATION Buffer,
936 IN BOOLEAN bDosDevice,
937 IN OUT PULONG Length);
940 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
941 IN PFILE_FS_SIZE_INFORMATION Buffer,
942 IN OUT PULONG Length);
945 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
946 IN PFILE_FS_DEVICE_INFORMATION Buffer,
947 IN OUT PULONG Length);
950 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
951 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
952 IN OUT PULONG Length);
955 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
956 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
957 IN OUT PULONG Length);
960 // AFSDirControl.cpp Prototypes
964 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
968 AFSQueryDirectory( IN PIRP Irp);
971 AFSNotifyChangeDirectory( IN PIRP Irp);
974 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
978 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
983 AFSSnapshotDirectory( IN AFSFcb *Fcb,
985 IN BOOLEAN ResetIndex);
988 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
990 IN BOOLEAN WatchTree,
991 IN ULONG CompletionFilter,
995 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
997 IN ULONG NotifyFilter,
998 IN ULONG NotificationAction);
1001 AFSNotifyReportChangeCallback( IN void *NotifyContext,
1002 IN void *FilterContext);
1005 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
1006 IN ULONG HashIndex);
1009 AFSProcessDirectoryQueryDirect( IN AFSFcb *Fcb,
1014 // AFSFSControl.cpp Prototypes
1018 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
1022 AFSProcessUserFsRequest( IN PIRP Irp);
1025 AFSProcessShareFsCtrl( IN IRP *Irp,
1030 // AFSDevControl.cpp Prototypes
1034 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
1038 // AFSInternalDevControl.cpp Prototypes
1042 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
1046 // AFSShutdown.cpp Prototypes
1050 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1055 AFSShutdownFilesystem( void);
1058 // AFSLockControl.cpp Prototypes
1062 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1066 // AFSCleanup.cpp Prototypes
1070 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1074 // AFSSecurity.cpp Prototypes
1078 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1082 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1086 // AFSSystemControl.cpp Prototypes
1090 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1094 // AFSQuota.cpp Prototypes
1098 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1102 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1106 // AFSGeneric.cpp Prototypes
1110 AFSExceptionFilter( IN CHAR *FunctionString,
1112 IN PEXCEPTION_POINTERS ExceptPtrs);
1115 AFSAcquireExcl( IN PERESOURCE Resource,
1119 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1123 AFSAcquireShared( IN PERESOURCE Resource,
1127 AFSReleaseResource( IN PERESOURCE Resource);
1130 AFSConvertToShared( IN PERESOURCE Resource);
1133 AFSCompleteRequest( IN PIRP Irp,
1137 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1138 IN BOOLEAN UpperCaseName);
1141 AFSLockSystemBuffer( IN PIRP Irp,
1145 AFSLockUserBuffer( IN void *UserBuffer,
1146 IN ULONG BufferLength,
1150 AFSMapToService( IN PIRP Irp,
1151 IN ULONG ByteCount);
1154 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1158 AFSInitializeLibraryDevice( void);
1161 AFSRemoveLibraryDevice( void);
1164 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1168 AFSInitializeGlobalDirectoryEntries( void);
1171 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1172 IN PUNICODE_STRING FileName,
1173 IN PUNICODE_STRING TargetName,
1174 IN AFSDirEnumEntry *DirEnumEntry,
1175 IN ULONG FileIndex);
1178 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1179 IN BOOLEAN DirectoryEntry);
1182 AFSEvaluateNode( IN GUID *AuthGroup,
1183 IN AFSDirectoryCB *DirEntry);
1186 AFSValidateSymLink( IN GUID *AuthGroup,
1187 IN AFSDirectoryCB *DirEntry);
1190 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1193 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1197 AFSIsChildOfParent( IN AFSFcb *Dcb,
1202 AFSCreateHighIndex( IN AFSFileID *FileID);
1206 AFSCreateLowIndex( IN AFSFileID *FileID);
1209 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1210 IN ACCESS_MASK GrantedAccess,
1211 IN BOOLEAN DirectoryEntry);
1214 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1217 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1218 IN UNICODE_STRING *SubstituteName,
1219 IN ULONG StringIndex);
1222 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1223 IN OUT UNICODE_STRING *ComponentName,
1224 IN UNICODE_STRING *SubstituteName,
1225 IN OUT UNICODE_STRING *RemainingPath,
1226 IN BOOLEAN FreePathName);
1229 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1233 AFSInvalidateAllVolumes( VOID);
1236 AFSVerifyEntry( IN GUID *AuthGroup,
1237 IN AFSDirectoryCB *DirectoryCB,
1238 IN BOOLEAN bFollowMountPoint);
1241 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1244 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1247 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1248 IN GUID *AuthGroup);
1251 AFSIsVolumeFID( IN AFSFileID *FileID);
1254 AFSIsFinalNode( IN AFSFcb *Fcb);
1257 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1258 IN AFSDirEnumEntry *DirEnumEntry);
1261 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1263 IN BOOLEAN FastCall,
1264 IN BOOLEAN SafeToPurge);
1267 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1268 IN UNICODE_STRING *SecondaryName);
1271 AFSInitializeSpecialShareNameList( void);
1274 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1277 AFSWaitOnQueuedReleases( void);
1280 AFSIsEqualFID( IN AFSFileID *FileId1,
1281 IN AFSFileID *FileId2);
1284 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1287 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1290 AFSIsRelativeName( IN UNICODE_STRING *Name);
1293 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1296 AFSUpdateName( IN UNICODE_STRING *Name);
1299 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1300 IN OUT ULONG *Flags,
1301 IN WCHAR *NameBuffer,
1302 IN USHORT NameLength);
1305 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1308 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1311 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1314 AFSVerifyVolume( IN ULONGLONG ProcessId,
1315 IN AFSVolumeCB *VolumeCB);
1318 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1321 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1322 IN AFSDirectoryCB *DirectoryCB,
1323 IN UNICODE_STRING *ParentPathName,
1324 IN AFSNameArrayHdr *RelatedNameArray,
1326 OUT AFSFileInfoCB *FileInfo);
1329 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1330 IN ULONGLONG HashIndex);
1333 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
1337 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
1341 AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
1344 AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
1345 IN AFSFileID * FileID,
1346 IN BOOLEAN bUpdateLastUse);
1349 AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
1352 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1353 OUT AFSDirectoryCB **TargetDirEntry);
1356 AFSCleanupFcb( IN AFSFcb *Fcb,
1357 IN BOOLEAN ForceFlush);
1360 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1361 IN UNICODE_STRING *NewFileName);
1364 AFSReadCacheFile( IN void *ReadBuffer,
1365 IN LARGE_INTEGER *ReadOffset,
1366 IN ULONG RequestedDataLength,
1367 IN OUT PULONG BytesRead);
1370 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1375 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1378 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1379 IN AFSDirectoryCB *DirEntry);
1382 AFSGetAuthenticationId( void);
1385 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1389 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1392 AFSReferenceCacheFileObject( void);
1395 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1398 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1401 AFSCloseLibrary( void);
1404 AFSDefaultLogMsg( IN ULONG Subsystem,
1410 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1411 IN ULONG InputBufferLength,
1412 IN AFSStatusInfoCB *StatusInfo,
1413 OUT ULONG *ReturnLength);
1416 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1417 IN UNICODE_STRING *ComponentName);
1420 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1421 OUT UNICODE_STRING *ComponentName);
1424 AFSDumpTraceFiles_Default( void);
1427 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1428 IN SIZE_T NumberOfBytes,
1431 #define AFSLibExFreePool(x) ExFreePool(x)
1433 #define AFSLibExFreePoolWithTag(x,y) ExFreePoolWithTag(x,y)
1436 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1439 AFSCreateDefaultSecurityDescriptor( void);
1442 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1443 OUT UNICODE_STRING *ParentPath);
1446 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1447 IN AFSObjectInfoCB *ObjectInfo,
1448 IN BOOLEAN WriteAccess,
1449 OUT GUID *AuthGroup);
1452 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1453 IN ULONG InvalidateReason);
1456 AFSIgnoreReparsePointToFile( void);
1459 // AFSNameArray.cpp Prototypes
1463 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1464 IN ULONG InitialElementCount);
1467 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1468 IN UNICODE_STRING *Path,
1469 IN AFSDirectoryCB *DirectoryCB);
1472 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1473 IN AFSNameArrayHdr *RelatedNameArray,
1474 IN AFSDirectoryCB *DirectoryCB);
1477 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1480 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1481 IN AFSDirectoryCB *DirEntry);
1484 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1487 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1490 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1491 IN AFSDirectoryCB *DirEntry);
1494 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1497 // AFSWorker.cpp Prototypes
1501 AFSInitializeWorkerPool( void);
1504 AFSRemoveWorkerPool( void);
1507 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1508 IN PKSTART_ROUTINE WorkerRoutine);
1511 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1514 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1517 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1520 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1523 AFSWorkerThread( IN PVOID Context);
1526 AFSIOWorkerThread( IN PVOID Context);
1529 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1532 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1535 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1538 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1541 AFSRemoveWorkItem( void);
1544 AFSRemoveIOWorkItem( void);
1547 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1550 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1553 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1556 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1559 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1560 IN GUID *AuthGroup);
1563 AFSQueueGlobalRootEnumeration( void);
1566 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1569 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1570 IN UCHAR FunctionCode,
1571 IN ULONG RequestFLags,
1572 IN AFSIoRun *IoRuns,
1574 IN AFSGatherIo *GatherIo);
1577 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1578 IN ULONG InvalidateReason);
1581 // AFSMD5Support.cpp Prototypes
1585 AFSGenerateMD5( IN char *DataBuffer,
1587 OUT UCHAR *MD5Digest);
1591 #endif /* _AFS_COMMON_H */