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 AFSGetFullFileName( IN AFSFcb *Fcb,
643 OUT ULONG *FileNameLength,
645 IN OUT LONG *RemainingLength);
648 // AFSNetworkProviderSupport.cpp
652 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
653 IN OUT PULONG ResultStatus,
654 IN OUT ULONG_PTR *ReturnOutputBufferLength);
657 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
658 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
659 IN OUT ULONG_PTR *ReturnOutputBufferLength);
662 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
663 IN OUT WCHAR *RemoteName,
664 IN ULONG RemoteNameBufferLength,
665 IN OUT ULONG_PTR *ReturnOutputBufferLength);
668 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
669 IN ULONG ConnectionBufferLength,
670 IN OUT ULONG_PTR *ReturnOutputBufferLength);
673 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
674 IN ULONG DisplayType);
676 AFSProviderConnectionCB *
677 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
680 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
681 IN AFSProviderConnectionCB *RootConnection,
682 IN ULONG BufferLength,
683 OUT PULONG CopiedLength);
686 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
687 IN ULONG BufferLength,
688 IN OUT ULONG_PTR *ReturnOutputBufferLength);
691 AFSIsDriveMapped( IN WCHAR DriveMapping);
694 // AFSRead.cpp Prototypes
698 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
700 IN HANDLE OnBehalfOf);
703 AFSRead( IN PDEVICE_OBJECT DeviceObject,
708 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
712 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
716 // AFSWrite.cpp Prototypes
720 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
722 IN HANDLE CallingUser,
726 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
730 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
734 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
738 AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
739 IN PFILE_OBJECT FileObject,
740 IN HANDLE CallingUser,
742 IN ULONG BytesToWrite,
743 IN BOOLEAN Retrying);
746 // AFSFileInfo.cpp Prototypes
750 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
754 AFSQueryBasicInfo( IN PIRP Irp,
755 IN AFSDirectoryCB *DirectoryCB,
756 IN OUT PFILE_BASIC_INFORMATION Buffer,
757 IN OUT PLONG Length);
760 AFSQueryStandardInfo( IN PIRP Irp,
761 IN AFSDirectoryCB *DirectoryCB,
762 IN OUT PFILE_STANDARD_INFORMATION Buffer,
763 IN OUT PLONG Length);
766 AFSQueryInternalInfo( IN PIRP Irp,
768 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
769 IN OUT PLONG Length);
772 AFSQueryEaInfo( IN PIRP Irp,
773 IN AFSDirectoryCB *DirectoryCB,
774 IN OUT PFILE_EA_INFORMATION Buffer,
775 IN OUT PLONG Length);
778 AFSQueryPositionInfo( IN PIRP Irp,
780 IN OUT PFILE_POSITION_INFORMATION Buffer,
781 IN OUT PLONG Length);
784 AFSQueryNameInfo( IN PIRP Irp,
785 IN AFSDirectoryCB *DirectoryCB,
786 IN OUT PFILE_NAME_INFORMATION Buffer,
787 IN OUT PLONG Length);
790 AFSQueryShortNameInfo( IN PIRP Irp,
791 IN AFSDirectoryCB *DirectoryCB,
792 IN OUT PFILE_NAME_INFORMATION Buffer,
793 IN OUT PLONG Length);
796 AFSQueryNetworkInfo( IN PIRP Irp,
797 IN AFSDirectoryCB *DirectoryCB,
798 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
799 IN OUT PLONG Length);
802 AFSQueryStreamInfo( IN PIRP Irp,
803 IN AFSDirectoryCB *DirectoryCB,
804 IN OUT FILE_STREAM_INFORMATION *Buffer,
805 IN OUT PLONG Length);
808 AFSQueryAttribTagInfo( IN PIRP Irp,
809 IN AFSDirectoryCB *DirectoryCB,
810 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
811 IN OUT PLONG Length);
814 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
815 IN AFSDirectoryCB *DirectoryCB,
816 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
817 IN OUT PLONG Length);
820 AFSQueryPhysicalNameInfo( IN PIRP Irp,
821 IN AFSDirectoryCB *DirectoryCB,
822 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
823 IN OUT PLONG Length);
826 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
830 AFSSetBasicInfo( IN PIRP Irp,
831 IN AFSDirectoryCB *DirectoryCB,
832 OUT BOOLEAN *bUpdateFileInfo);
835 AFSSetDispositionInfo( IN PIRP Irp,
836 IN AFSDirectoryCB *DirectoryCB);
839 AFSSetRenameInfo( IN PIRP Irp);
842 AFSSetFileLinkInfo( IN PIRP Irp);
845 AFSSetPositionInfo( IN PIRP Irp,
846 IN AFSDirectoryCB *DirectoryCB);
849 AFSSetAllocationInfo( IN PIRP Irp,
850 IN AFSDirectoryCB *DirectoryCB);
853 AFSSetEndOfFileInfo( IN PIRP Irp,
854 IN AFSDirectoryCB *DirectoryCB);
857 AFSProcessShareSetInfo( IN IRP *Irp,
862 AFSProcessShareQueryInfo( IN IRP *Irp,
867 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
870 IN OUT LONG *Length);
873 // AFSEa.cpp Prototypes
877 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
881 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
885 // AFSFlushBuffers.cpp Prototypes
889 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
893 // AFSVolume.cpp Prototypes
897 AFSInitVolume( IN GUID *AuthGroup,
898 IN AFSFileID *RootFid,
899 IN LONG VolumeReferenceReason,
900 OUT AFSVolumeCB **VolumeCB);
903 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
906 AFSVolumeIncrement( IN AFSVolumeCB *VolumeCB,
910 AFSVolumeDecrement( IN AFSVolumeCB *VolumeCB,
914 // AFSVolumeInfo.cpp Prototypes
918 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
922 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
926 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
927 IN PFILE_FS_VOLUME_INFORMATION Buffer,
928 IN BOOLEAN bDosDevice,
929 IN OUT PULONG Length);
932 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
933 IN PFILE_FS_SIZE_INFORMATION Buffer,
934 IN OUT PULONG Length);
937 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
938 IN PFILE_FS_DEVICE_INFORMATION Buffer,
939 IN OUT PULONG Length);
942 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
943 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
944 IN OUT PULONG Length);
947 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
948 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
949 IN OUT PULONG Length);
952 // AFSDirControl.cpp Prototypes
956 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
960 AFSQueryDirectory( IN PIRP Irp);
963 AFSNotifyChangeDirectory( IN PIRP Irp);
966 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
970 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
975 AFSSnapshotDirectory( IN AFSFcb *Fcb,
977 IN BOOLEAN ResetIndex);
980 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
982 IN BOOLEAN WatchTree,
983 IN ULONG CompletionFilter,
987 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
989 IN ULONG NotifyFilter,
990 IN ULONG NotificationAction);
993 AFSNotifyReportChangeCallback( IN void *NotifyContext,
994 IN void *FilterContext);
997 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
1001 AFSProcessDirectoryQueryDirect( IN AFSFcb *Fcb,
1006 // AFSFSControl.cpp Prototypes
1010 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
1014 AFSProcessUserFsRequest( IN PIRP Irp);
1017 AFSProcessShareFsCtrl( IN IRP *Irp,
1022 // AFSDevControl.cpp Prototypes
1026 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
1030 // AFSInternalDevControl.cpp Prototypes
1034 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
1038 // AFSShutdown.cpp Prototypes
1042 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1047 AFSShutdownFilesystem( void);
1050 // AFSLockControl.cpp Prototypes
1054 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1058 // AFSCleanup.cpp Prototypes
1062 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1066 // AFSSecurity.cpp Prototypes
1070 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1074 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1078 // AFSSystemControl.cpp Prototypes
1082 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1086 // AFSQuota.cpp Prototypes
1090 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1094 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1098 // AFSGeneric.cpp Prototypes
1102 AFSExceptionFilter( IN CHAR *FunctionString,
1104 IN PEXCEPTION_POINTERS ExceptPtrs);
1107 AFSAcquireExcl( IN PERESOURCE Resource,
1111 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1115 AFSAcquireShared( IN PERESOURCE Resource,
1119 AFSReleaseResource( IN PERESOURCE Resource);
1122 AFSConvertToShared( IN PERESOURCE Resource);
1125 AFSCompleteRequest( IN PIRP Irp,
1129 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1130 IN BOOLEAN UpperCaseName);
1133 AFSLockSystemBuffer( IN PIRP Irp,
1137 AFSLockUserBuffer( IN void *UserBuffer,
1138 IN ULONG BufferLength,
1142 AFSMapToService( IN PIRP Irp,
1143 IN ULONG ByteCount);
1146 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1150 AFSInitializeLibraryDevice( void);
1153 AFSRemoveLibraryDevice( void);
1156 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1160 AFSInitializeGlobalDirectoryEntries( void);
1163 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1164 IN PUNICODE_STRING FileName,
1165 IN PUNICODE_STRING TargetName,
1166 IN AFSDirEnumEntry *DirEnumEntry,
1167 IN ULONG FileIndex);
1170 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1171 IN BOOLEAN DirectoryEntry);
1174 AFSEvaluateNode( IN GUID *AuthGroup,
1175 IN AFSDirectoryCB *DirEntry);
1178 AFSValidateSymLink( IN GUID *AuthGroup,
1179 IN AFSDirectoryCB *DirEntry);
1182 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1185 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1189 AFSIsChildOfParent( IN AFSFcb *Dcb,
1194 AFSCreateHighIndex( IN AFSFileID *FileID);
1198 AFSCreateLowIndex( IN AFSFileID *FileID);
1201 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1202 IN ACCESS_MASK GrantedAccess,
1203 IN BOOLEAN DirectoryEntry);
1206 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1209 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1210 IN UNICODE_STRING *SubstituteName,
1211 IN ULONG StringIndex);
1214 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1215 IN OUT UNICODE_STRING *ComponentName,
1216 IN UNICODE_STRING *SubstituteName,
1217 IN OUT UNICODE_STRING *RemainingPath,
1218 IN BOOLEAN FreePathName);
1221 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1225 AFSInvalidateAllVolumes( VOID);
1228 AFSVerifyEntry( IN GUID *AuthGroup,
1229 IN AFSDirectoryCB *DirectoryCB,
1230 IN BOOLEAN bFollowMountPoint);
1233 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1236 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1239 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1240 IN GUID *AuthGroup);
1243 AFSIsVolumeFID( IN AFSFileID *FileID);
1246 AFSIsFinalNode( IN AFSFcb *Fcb);
1249 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1250 IN AFSDirEnumEntry *DirEnumEntry);
1253 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1255 IN BOOLEAN FastCall,
1256 IN BOOLEAN SafeToPurge);
1259 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1260 IN UNICODE_STRING *SecondaryName);
1263 AFSInitializeSpecialShareNameList( void);
1266 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1269 AFSWaitOnQueuedReleases( void);
1272 AFSIsEqualFID( IN AFSFileID *FileId1,
1273 IN AFSFileID *FileId2);
1276 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1279 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1282 AFSIsRelativeName( IN UNICODE_STRING *Name);
1285 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1288 AFSUpdateName( IN UNICODE_STRING *Name);
1291 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1292 IN OUT ULONG *Flags,
1293 IN WCHAR *NameBuffer,
1294 IN USHORT NameLength);
1297 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1300 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1303 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1306 AFSVerifyVolume( IN ULONGLONG ProcessId,
1307 IN AFSVolumeCB *VolumeCB);
1310 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1313 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1314 IN AFSDirectoryCB *DirectoryCB,
1315 IN UNICODE_STRING *ParentPathName,
1316 IN AFSNameArrayHdr *RelatedNameArray,
1318 OUT AFSFileInfoCB *FileInfo);
1321 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1322 IN ULONGLONG HashIndex);
1325 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
1329 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
1333 AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
1336 AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
1337 IN AFSFileID * FileID,
1338 IN BOOLEAN bUpdateLastUse);
1341 AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
1344 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1345 OUT AFSDirectoryCB **TargetDirEntry);
1348 AFSCleanupFcb( IN AFSFcb *Fcb,
1349 IN BOOLEAN ForceFlush);
1352 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1353 IN UNICODE_STRING *NewFileName);
1356 AFSReadCacheFile( IN void *ReadBuffer,
1357 IN LARGE_INTEGER *ReadOffset,
1358 IN ULONG RequestedDataLength,
1359 IN OUT PULONG BytesRead);
1362 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1367 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1370 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1371 IN AFSDirectoryCB *DirEntry);
1374 AFSGetAuthenticationId( void);
1377 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1381 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1384 AFSReferenceCacheFileObject( void);
1387 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1390 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1393 AFSCloseLibrary( void);
1396 AFSDefaultLogMsg( IN ULONG Subsystem,
1402 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1403 IN ULONG InputBufferLength,
1404 IN AFSStatusInfoCB *StatusInfo,
1405 OUT ULONG *ReturnLength);
1408 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1409 IN UNICODE_STRING *ComponentName);
1412 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1413 OUT UNICODE_STRING *ComponentName);
1416 AFSDumpTraceFiles_Default( void);
1419 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1420 IN SIZE_T NumberOfBytes,
1423 #define AFSLibExFreePool(x) ExFreePool(x)
1425 #define AFSLibExFreePoolWithTag(x,y) ExFreePoolWithTag(x,y)
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 AFSIgnoreReparsePointToFile( void);
1451 AFSRetrieveTargetFileInfo( IN PUNICODE_STRING TargetName,
1452 OUT AFSFileInfoCB *FileInfo);
1455 // AFSNameArray.cpp Prototypes
1459 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1460 IN ULONG InitialElementCount);
1463 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1464 IN UNICODE_STRING *Path,
1465 IN AFSDirectoryCB *DirectoryCB);
1468 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1469 IN AFSNameArrayHdr *RelatedNameArray,
1470 IN AFSDirectoryCB *DirectoryCB);
1473 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1476 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1477 IN AFSDirectoryCB *DirEntry);
1480 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1483 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1486 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1487 IN AFSDirectoryCB *DirEntry);
1490 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1493 // AFSWorker.cpp Prototypes
1497 AFSInitializeWorkerPool( void);
1500 AFSRemoveWorkerPool( void);
1503 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1504 IN PKSTART_ROUTINE WorkerRoutine);
1507 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1510 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1513 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1516 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1519 AFSWorkerThread( IN PVOID Context);
1522 AFSIOWorkerThread( IN PVOID Context);
1525 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1528 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1531 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1534 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1537 AFSRemoveWorkItem( void);
1540 AFSRemoveIOWorkItem( void);
1543 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1546 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1549 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1552 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1555 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1556 IN GUID *AuthGroup);
1559 AFSQueueGlobalRootEnumeration( void);
1562 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1565 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1566 IN UCHAR FunctionCode,
1567 IN ULONG RequestFLags,
1568 IN AFSIoRun *IoRuns,
1570 IN AFSGatherIo *GatherIo);
1573 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1574 IN ULONG InvalidateReason);
1577 // AFSMD5Support.cpp Prototypes
1581 AFSGenerateMD5( IN char *DataBuffer,
1583 OUT UCHAR *MD5Digest);
1587 #endif /* _AFS_COMMON_H */