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 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
209 OUT AFSDirEnumEntry **DirEnumEntry);
212 AFSEvaluateTargetByName( IN GUID *AuthGroup,
213 IN AFSObjectInfoCB *ParentObjectInfo,
214 IN PUNICODE_STRING SourceName,
215 OUT AFSDirEnumEntry **DirEnumEntry);
218 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
219 IN AFSFileID *FileID,
220 OUT AFSVolumeInfoCB *VolumeInformation);
223 AFSRetrieveVolumeSizeInformation( IN GUID *AuthGroup,
224 IN AFSFileID *FileID,
225 OUT AFSVolumeSizeInfoCB *VolumeSizeInformation);
228 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
229 IN ULONG InputLength,
230 IN ULONG OutputLength,
231 IN void *InputDataBuffer,
232 OUT void *OutputDataBuffer,
233 OUT ULONG *BytesReturned);
236 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
237 IN ULONG InformationClass,
238 IN ULONG InputLength,
239 IN void *DataBuffer);
242 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
243 IN ULONG InformationClass,
244 IN ULONG OutputLength,
246 OUT ULONG *BytesReturned);
249 AFSReleaseFid( IN AFSFileID *FileId);
252 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
253 IN LARGE_INTEGER *ExtentOffset,
257 // AFSCreate.cpp Prototypes
261 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
265 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
269 AFSOpenRedirector( IN PIRP Irp,
274 AFSOpenAFSRoot( IN PIRP Irp,
279 AFSOpenRoot( IN PIRP Irp,
280 IN AFSVolumeCB *VolumeCB,
286 AFSProcessCreate( IN PIRP Irp,
288 IN AFSVolumeCB *VolumeCB,
289 IN AFSDirectoryCB *ParentDirCB,
290 IN PUNICODE_STRING FileName,
291 IN PUNICODE_STRING ComponentName,
292 IN PUNICODE_STRING FullFileName,
297 AFSOpenTargetDirectory( IN PIRP Irp,
298 IN AFSVolumeCB *VolumeCB,
299 IN AFSDirectoryCB *ParentDirectoryCB,
300 IN AFSDirectoryCB *TargetDirectoryCB,
301 IN UNICODE_STRING *TargetName,
306 AFSProcessOpen( IN PIRP Irp,
308 IN AFSVolumeCB *VolumeCB,
309 IN AFSDirectoryCB *ParentDirCB,
310 IN AFSDirectoryCB *DirectoryCB,
315 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
317 IN AFSVolumeCB *VolumeCB,
319 IN AFSDirectoryCB *ParentDirCB,
320 IN AFSDirectoryCB *DirectoryCB,
325 AFSControlDeviceCreate( IN PIRP Irp);
328 AFSOpenIOCtlFcb( IN PIRP Irp,
330 IN AFSDirectoryCB *ParentDirCB,
335 AFSOpenSpecialShareFcb( IN PIRP Irp,
337 IN AFSDirectoryCB *DirectoryCB,
342 // AFSExtentsSupport.cpp Prototypes
345 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
348 AFSExtentForOffset( IN AFSFcb *Fcb,
349 IN PLARGE_INTEGER Offset,
350 IN BOOLEAN ReturnPrevious);
352 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
356 AFSRequestExtents( IN AFSFcb *Fcb,
358 IN PLARGE_INTEGER Offset,
360 OUT BOOLEAN *FullyMApped);
362 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
363 IN PLARGE_INTEGER Offset,
365 IN OUT AFSExtent **FirstExtent,
366 OUT AFSExtent **LastExtent);
369 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
371 IN PLARGE_INTEGER Offset,
375 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
379 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
382 AFSProcessReleaseFileExtents( IN PIRP Irp);
385 AFSProcessExtentFailure( PIRP Irp);
388 AFSProcessSetExtents( IN AFSFcb *pFcb,
390 IN AFSFileExtentCB *Result);
393 AFSFlushExtents( IN AFSFcb *pFcb,
397 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
399 IN BOOLEAN bReleaseAll);
402 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
406 AFSMarkDirty( IN AFSFcb *pFcb,
407 IN AFSExtent *StartExtent,
408 IN ULONG ExtentsCount,
409 IN LARGE_INTEGER *StartingByte,
410 IN BOOLEAN DerefExtents);
413 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
417 AFSTrimExtents( IN AFSFcb *Fcb,
418 IN PLARGE_INTEGER FileSize);
421 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
423 IN AFSFileExtentCB *Result);
426 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
427 IN ULONG ExtentsCount);
430 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
431 IN ULONG ExtentsCount);
434 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
435 IN AFSExtent *Extent);
438 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
441 NextExtent( AFSExtent *Extent, ULONG SkipList );
444 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
445 AFSByteRange ** pByteRangeList);
449 AFSSetupMD5Hash( IN AFSFcb *Fcb,
450 IN AFSExtent *StartExtent,
451 IN ULONG ExtentsCount,
452 IN void *SystemBuffer,
453 IN LARGE_INTEGER *ByteOffset,
459 // AFSIoSupp.cpp Prototypes
462 AFSGetExtents( IN AFSFcb *pFcb,
463 IN PLARGE_INTEGER Offset,
466 OUT ULONG *ExtentCount,
467 OUT ULONG *RunCount);
470 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
472 IN PVOID SystemBuffer,
473 IN OUT AFSIoRun *IoRun,
474 IN PLARGE_INTEGER Start,
477 IN OUT ULONG *RunCount);
480 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
481 IN UCHAR FunctionCode,
485 IN OUT AFSGatherIo *Gather);
488 AFSCompleteIo( IN AFSGatherIo *Gather,
492 AFSProcessExtentRun( IN PVOID SystemBuffer,
493 IN PLARGE_INTEGER Start,
496 IN BOOLEAN WriteRequest);
499 // AFSClose.cpp Prototypes
503 AFSClose( IN PDEVICE_OBJECT DeviceObject,
507 // AFSFcbSupport.cpp Prototypes
511 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
514 AFSInitVolume( IN GUID *AuthGroup,
515 IN AFSFileID *RootFid,
516 OUT AFSVolumeCB **VolumeCB);
519 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
522 AFSInitRootFcb( IN ULONGLONG ProcessID,
523 IN AFSVolumeCB *VolumeCB);
526 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
529 AFSInitCcb( IN OUT AFSCcb **Ccb);
532 AFSRemoveFcb( IN AFSFcb **Fcb);
535 AFSRemoveCcb( IN AFSFcb *Fcb,
539 AFSInsertCcb( IN AFSFcb *Fcb,
543 // AFSNameSupport.cpp Prototypes
547 AFSLocateNameEntry( IN GUID *AuthGroup,
548 IN PFILE_OBJECT FileObject,
549 IN UNICODE_STRING *RootPathName,
550 IN UNICODE_STRING *ParsedPathName,
551 IN AFSNameArrayHdr *NameArray,
553 OUT AFSVolumeCB **VolumeCB,
554 IN OUT AFSDirectoryCB **ParentDirectoryCB,
555 OUT AFSDirectoryCB **DirectoryCB,
556 OUT PUNICODE_STRING ComponentName);
559 AFSCreateDirEntry( IN GUID *AuthGroup,
560 IN AFSObjectInfoCB *ParentObjectInfo,
561 IN AFSDirectoryCB *ParentDirCB,
562 IN PUNICODE_STRING FileName,
563 IN PUNICODE_STRING ComponentName,
565 IN OUT AFSDirectoryCB **DirEntry);
568 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
569 IN AFSDirectoryCB *DirEntry,
570 IN BOOLEAN InsertInEnumList);
573 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
574 IN AFSDirectoryCB *DirEntry);
577 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
578 IN AFSDirectoryCB *DirEntry,
579 IN BOOLEAN RemoveFromEnumList);
582 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
583 IN OUT PUNICODE_STRING TargetFileName);
586 AFSParseName( IN PIRP Irp,
588 OUT PUNICODE_STRING FileName,
589 OUT PUNICODE_STRING ParsedFileName,
590 OUT PUNICODE_STRING RootFileName,
591 OUT ULONG *ParseFlags,
592 OUT AFSVolumeCB **VolumeCB,
593 OUT AFSDirectoryCB **ParentDirectoryCB,
594 OUT AFSNameArrayHdr **NameArray);
597 AFSCheckCellName( IN GUID *AuthGroup,
598 IN UNICODE_STRING *CellName,
599 OUT AFSDirectoryCB **ShareDirEntry);
602 AFSBuildMountPointTarget( IN GUID *AuthGroup,
603 IN AFSDirectoryCB *DirectoryCB,
604 OUT AFSVolumeCB **VolumeCB);
607 AFSBuildRootVolume( IN GUID *AuthGroup,
608 IN AFSFileID *FileId,
609 OUT AFSVolumeCB **TargetVolumeCB);
612 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
613 IN PFILE_OBJECT FileObject,
614 IN UNICODE_STRING *RemainingPath,
618 // AFSNetworkProviderSupport.cpp
622 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
623 IN OUT PULONG ResultStatus,
624 IN OUT ULONG_PTR *ReturnOutputBufferLength);
627 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
628 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
629 IN OUT ULONG_PTR *ReturnOutputBufferLength);
632 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
633 IN OUT WCHAR *RemoteName,
634 IN ULONG RemoteNameBufferLength,
635 IN OUT ULONG_PTR *ReturnOutputBufferLength);
638 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
639 IN ULONG ConnectionBufferLength,
640 IN OUT ULONG_PTR *ReturnOutputBufferLength);
643 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
644 IN ULONG DisplayType);
646 AFSProviderConnectionCB *
647 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
650 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
651 IN AFSProviderConnectionCB *RootConnection,
652 IN ULONG BufferLength,
653 OUT PULONG CopiedLength);
656 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
657 IN ULONG BufferLength,
658 IN OUT ULONG_PTR *ReturnOutputBufferLength);
661 AFSIsDriveMapped( IN WCHAR DriveMapping);
664 // AFSRead.cpp Prototypes
668 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
670 IN HANDLE OnBehalfOf);
673 AFSRead( IN PDEVICE_OBJECT DeviceObject,
678 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
682 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
686 // AFSWrite.cpp Prototypes
690 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
692 IN HANDLE CallingUser);
695 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
699 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
703 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
707 // AFSFileInfo.cpp Prototypes
711 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
715 AFSQueryBasicInfo( IN PIRP Irp,
716 IN AFSDirectoryCB *DirectoryCB,
717 IN OUT PFILE_BASIC_INFORMATION Buffer,
718 IN OUT PLONG Length);
721 AFSQueryStandardInfo( IN PIRP Irp,
722 IN AFSDirectoryCB *DirectoryCB,
723 IN OUT PFILE_STANDARD_INFORMATION Buffer,
724 IN OUT PLONG Length);
727 AFSQueryInternalInfo( IN PIRP Irp,
729 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
730 IN OUT PLONG Length);
733 AFSQueryEaInfo( IN PIRP Irp,
734 IN AFSDirectoryCB *DirectoryCB,
735 IN OUT PFILE_EA_INFORMATION Buffer,
736 IN OUT PLONG Length);
739 AFSQueryPositionInfo( IN PIRP Irp,
741 IN OUT PFILE_POSITION_INFORMATION Buffer,
742 IN OUT PLONG Length);
745 AFSQueryNameInfo( IN PIRP Irp,
746 IN AFSDirectoryCB *DirectoryCB,
747 IN OUT PFILE_NAME_INFORMATION Buffer,
748 IN OUT PLONG Length);
751 AFSQueryShortNameInfo( IN PIRP Irp,
752 IN AFSDirectoryCB *DirectoryCB,
753 IN OUT PFILE_NAME_INFORMATION Buffer,
754 IN OUT PLONG Length);
757 AFSQueryNetworkInfo( IN PIRP Irp,
758 IN AFSDirectoryCB *DirectoryCB,
759 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
760 IN OUT PLONG Length);
763 AFSQueryStreamInfo( IN PIRP Irp,
764 IN AFSDirectoryCB *DirectoryCB,
765 IN OUT FILE_STREAM_INFORMATION *Buffer,
766 IN OUT PLONG Length);
769 AFSQueryAccess( IN PIRP Irp,
771 IN OUT PFILE_ACCESS_INFORMATION Buffer,
772 IN OUT PLONG Length);
775 AFSQueryMode( IN PIRP Irp,
777 IN OUT PFILE_MODE_INFORMATION Buffer,
778 IN OUT PLONG Length);
781 AFSQueryAlignment( IN PIRP Irp,
783 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
784 IN OUT PLONG Length);
787 AFSQueryAttribTagInfo( IN PIRP Irp,
788 IN AFSDirectoryCB *DirectoryCB,
789 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
790 IN OUT PLONG Length);
793 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
794 IN AFSDirectoryCB *DirectoryCB,
795 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
796 IN OUT PLONG Length);
799 AFSQueryPhysicalNameInfo( IN PIRP Irp,
800 IN AFSDirectoryCB *DirectoryCB,
801 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
802 IN OUT PLONG Length);
805 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
809 AFSSetBasicInfo( IN PIRP Irp,
810 IN AFSDirectoryCB *DirectoryCB);
813 AFSSetDispositionInfo( IN PIRP Irp,
814 IN AFSDirectoryCB *DirectoryCB);
817 AFSSetRenameInfo( IN PIRP Irp);
820 AFSSetPositionInfo( IN PIRP Irp,
821 IN AFSDirectoryCB *DirectoryCB);
824 AFSSetAllocationInfo( IN PIRP Irp,
825 IN AFSDirectoryCB *DirectoryCB);
828 AFSSetEndOfFileInfo( IN PIRP Irp,
829 IN AFSDirectoryCB *DirectoryCB);
832 AFSProcessShareSetInfo( IN IRP *Irp,
837 AFSProcessShareQueryInfo( IN IRP *Irp,
842 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
845 IN OUT LONG *Length);
848 // AFSEa.cpp Prototypes
852 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
856 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
860 // AFSFlushBuffers.cpp Prototypes
864 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
868 // AFSVolumeInfo.cpp Prototypes
872 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
876 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
880 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
881 IN PFILE_FS_VOLUME_INFORMATION Buffer,
882 IN OUT PULONG Length);
885 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
886 IN PFILE_FS_SIZE_INFORMATION Buffer,
887 IN OUT PULONG Length);
890 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
891 IN PFILE_FS_DEVICE_INFORMATION Buffer,
892 IN OUT PULONG Length);
895 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
896 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
897 IN OUT PULONG Length);
900 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
901 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
902 IN OUT PULONG Length);
905 // AFSDirControl.cpp Prototypes
909 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
913 AFSQueryDirectory( IN PIRP Irp);
916 AFSNotifyChangeDirectory( IN PIRP Irp);
919 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
923 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
928 AFSSnapshotDirectory( IN AFSFcb *Fcb,
930 IN BOOLEAN ResetIndex);
933 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
935 IN BOOLEAN WatchTree,
936 IN ULONG CompletionFilter,
940 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
942 IN ULONG NotifyFilter,
943 IN ULONG NotificationAction);
946 AFSNotifyReportChangeCallback( IN void *NotifyContext,
947 IN void *FilterContext);
950 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
954 // AFSFSControl.cpp Prototypes
958 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
962 AFSProcessUserFsRequest( IN PIRP Irp);
965 AFSProcessShareFsCtrl( IN IRP *Irp,
970 // AFSDevControl.cpp Prototypes
974 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
978 // AFSInternalDevControl.cpp Prototypes
982 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
986 // AFSShutdown.cpp Prototypes
990 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
995 AFSShutdownFilesystem( void);
998 // AFSLockControl.cpp Prototypes
1002 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1006 // AFSCleanup.cpp Prototypes
1010 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1014 // AFSSecurity.cpp Prototypes
1018 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1022 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1026 // AFSSystemControl.cpp Prototypes
1030 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1034 // AFSQuota.cpp Prototypes
1038 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1042 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1046 // AFSGeneric.cpp Prototypes
1050 AFSExceptionFilter( IN CHAR *FunctionString,
1052 IN PEXCEPTION_POINTERS ExceptPtrs);
1055 AFSAcquireExcl( IN PERESOURCE Resource,
1059 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1063 AFSAcquireShared( IN PERESOURCE Resource,
1067 AFSReleaseResource( IN PERESOURCE Resource);
1070 AFSConvertToShared( IN PERESOURCE Resource);
1073 AFSCompleteRequest( IN PIRP Irp,
1077 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1078 IN BOOLEAN UpperCaseName);
1081 AFSLockSystemBuffer( IN PIRP Irp,
1085 AFSLockUserBuffer( IN void *UserBuffer,
1086 IN ULONG BufferLength,
1090 AFSMapToService( IN PIRP Irp,
1091 IN ULONG ByteCount);
1094 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1098 AFSInitializeLibraryDevice( void);
1101 AFSRemoveLibraryDevice( void);
1104 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1108 AFSInitializeGlobalDirectoryEntries( void);
1111 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1112 IN PUNICODE_STRING FileName,
1113 IN PUNICODE_STRING TargetName,
1114 IN AFSDirEnumEntry *DirEnumEntry,
1115 IN ULONG FileIndex);
1118 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1119 IN BOOLEAN DirectoryEntry);
1122 AFSEvaluateNode( IN GUID *AuthGroup,
1123 IN AFSDirectoryCB *DirEntry);
1126 AFSValidateSymLink( IN GUID *AuthGroup,
1127 IN AFSDirectoryCB *DirEntry);
1130 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1133 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1137 AFSIsChildOfParent( IN AFSFcb *Dcb,
1142 AFSCreateHighIndex( IN AFSFileID *FileID);
1146 AFSCreateLowIndex( IN AFSFileID *FileID);
1149 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1150 IN ACCESS_MASK GrantedAccess,
1151 IN BOOLEAN DirectoryEntry);
1154 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1157 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1158 IN UNICODE_STRING *SubstituteName,
1159 IN ULONG StringIndex);
1162 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1163 IN OUT UNICODE_STRING *ComponentName,
1164 IN UNICODE_STRING *SubstituteName,
1165 IN OUT UNICODE_STRING *RemainingPath,
1166 IN BOOLEAN FreePathName);
1169 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1173 AFSInvalidateAllVolumes( VOID);
1176 AFSVerifyEntry( IN GUID *AuthGroup,
1177 IN AFSDirectoryCB *DirectoryCB);
1180 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1183 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1186 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1187 IN GUID *AuthGroup);
1190 AFSIsVolumeFID( IN AFSFileID *FileID);
1193 AFSIsFinalNode( IN AFSFcb *Fcb);
1196 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1197 IN AFSDirEnumEntry *DirEnumEntry);
1200 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1202 IN BOOLEAN FastCall);
1205 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1206 IN UNICODE_STRING *SecondaryName);
1209 AFSInitializeSpecialShareNameList( void);
1212 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1215 AFSWaitOnQueuedReleases( void);
1218 AFSIsEqualFID( IN AFSFileID *FileId1,
1219 IN AFSFileID *FileId2);
1222 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1225 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1228 AFSIsRelativeName( IN UNICODE_STRING *Name);
1231 AFSUpdateName( IN UNICODE_STRING *Name);
1234 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1235 IN OUT ULONG *Flags,
1236 IN WCHAR *NameBuffer,
1237 IN USHORT NameLength);
1240 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1241 IN ULONG InitialElementCount);
1244 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1245 IN UNICODE_STRING *Path,
1246 IN AFSDirectoryCB *DirectoryCB);
1249 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1250 IN AFSNameArrayHdr *RelatedNameArray,
1251 IN AFSDirectoryCB *DirectoryCB);
1254 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1257 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1258 IN AFSDirectoryCB *DirEntry);
1261 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1264 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1267 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1268 IN AFSDirectoryCB *DirEntry);
1271 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1274 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1277 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1280 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1283 AFSVerifyVolume( IN ULONGLONG ProcessId,
1284 IN AFSVolumeCB *VolumeCB);
1287 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1290 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1291 IN AFSDirectoryCB *DirectoryCB,
1292 IN UNICODE_STRING *ParentPathName,
1293 IN AFSNameArrayHdr *RelatedNameArray,
1295 OUT AFSFileInfoCB *FileInfo);
1298 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1299 IN ULONGLONG HashIndex);
1302 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo);
1305 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo);
1308 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1311 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1312 OUT AFSDirectoryCB **TargetDirEntry);
1315 AFSCleanupFcb( IN AFSFcb *Fcb,
1316 IN BOOLEAN ForceFlush);
1319 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1320 IN UNICODE_STRING *NewFileName);
1323 AFSReadCacheFile( IN void *ReadBuffer,
1324 IN LARGE_INTEGER *ReadOffset,
1325 IN ULONG RequestedDataLength,
1326 IN OUT PULONG BytesRead);
1329 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1334 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1337 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1338 IN AFSDirectoryCB *DirEntry);
1341 AFSGetAuthenticationId( void);
1344 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1348 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1351 AFSReferenceCacheFileObject( void);
1354 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1357 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1360 AFSCloseLibrary( void);
1363 AFSDefaultLogMsg( IN ULONG Subsystem,
1369 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1370 IN ULONG InputBufferLength,
1371 IN AFSStatusInfoCB *StatusInfo,
1372 OUT ULONG *ReturnLength);
1375 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1376 IN UNICODE_STRING *ComponentName);
1379 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1380 OUT UNICODE_STRING *ComponentName);
1383 AFSDumpTraceFiles_Default( void);
1386 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1387 IN SIZE_T NumberOfBytes,
1391 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1394 AFSCreateDefaultSecurityDescriptor( void);
1397 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1398 OUT UNICODE_STRING *ParentPath);
1401 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1402 IN AFSObjectInfoCB *ObjectInfo,
1403 IN BOOLEAN WriteAccess,
1404 OUT GUID *AuthGroup);
1407 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1408 IN ULONG InvalidateReason);
1411 // AFSWorker.cpp Prototypes
1415 AFSInitializeWorkerPool( void);
1418 AFSRemoveWorkerPool( void);
1421 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1422 IN PKSTART_ROUTINE WorkerRoutine);
1425 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1428 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1431 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1434 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1437 AFSWorkerThread( IN PVOID Context);
1440 AFSIOWorkerThread( IN PVOID Context);
1443 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1446 AFSVolumeWorkerThread( IN PVOID Context);
1449 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1452 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1455 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1458 AFSRemoveWorkItem( void);
1461 AFSRemoveIOWorkItem( void);
1464 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1467 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1470 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1473 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1476 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1477 IN GUID *AuthGroup);
1480 AFSQueueGlobalRootEnumeration( void);
1483 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1486 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1487 IN UCHAR FunctionCode,
1488 IN ULONG RequestFLags,
1489 IN AFSIoRun *IoRuns,
1491 IN AFSGatherIo *GatherIo);
1494 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1495 IN ULONG InvalidateReason);
1498 // AFSMD5Support.cpp Prototypes
1502 AFSGenerateMD5( IN char *DataBuffer,
1504 OUT UCHAR *MD5Digest);
1508 #endif /* _AFS_COMMON_H */