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
51 #include "AFSDefines.h"
53 #include "AFSUserDefines.h"
55 #include "AFSUserIoctl.h"
57 #include "AFSUserStructs.h"
59 #include "AFSRedirCommonDefines.h"
61 #include "AFSRedirCommonStructs.h"
63 #include "AFSStructs.h"
65 #include "AFSProvider.h"
68 #include "AFSExtern.h"
72 #include "ntstrsafe.h"
75 ZwQueryInformationProcess(
76 __in HANDLE ProcessHandle,
77 __in PROCESSINFOCLASS ProcessInformationClass,
78 __out PVOID ProcessInformation,
79 __in ULONG ProcessInformationLength,
80 __out_opt PULONG ReturnLength
86 RtlAbsoluteToSelfRelativeSD( IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
87 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
88 IN OUT PULONG BufferLength );
90 #ifndef FILE_OPEN_REPARSE_POINT
91 #define FILE_OPEN_REPARSE_POINT 0x00200000
94 // AFSBTreeSupport.cpp Prototypes
98 AFSLocateCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
100 IN OUT AFSDirectoryCB **DirEntry);
103 AFSLocateCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
105 IN OUT AFSDirectoryCB **DirEntry);
108 AFSInsertCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
109 IN AFSDirectoryCB *DirEntry);
112 AFSInsertCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
113 IN AFSDirectoryCB *DirEntry);
116 AFSRemoveCaseSensitiveDirEntry( IN AFSDirectoryCB **RootNode,
117 IN AFSDirectoryCB *DirEntry);
120 AFSRemoveCaseInsensitiveDirEntry( IN AFSDirectoryCB **RootNode,
121 IN AFSDirectoryCB *DirEntry);
124 AFSLocateShortNameDirEntry( IN AFSDirectoryCB *RootNode,
126 IN OUT AFSDirectoryCB **DirEntry);
129 AFSInsertShortNameDirEntry( IN AFSDirectoryCB *RootNode,
130 IN AFSDirectoryCB *DirEntry);
133 AFSRemoveShortNameDirEntry( IN AFSDirectoryCB **RootNode,
134 IN AFSDirectoryCB *DirEntry);
137 AFSLocateHashEntry( IN AFSBTreeEntry *TopNode,
138 IN ULONGLONG HashIndex,
139 IN OUT AFSBTreeEntry **TreeEntry);
142 AFSInsertHashEntry( IN AFSBTreeEntry *TopNode,
143 IN AFSBTreeEntry *FileIDEntry);
146 AFSRemoveHashEntry( IN AFSBTreeEntry **TopNode,
147 IN AFSBTreeEntry *FileIDEntry);
150 // AFSInit.cpp Prototypes
154 DriverEntry( IN PDRIVER_OBJECT DriverObj,
155 IN PUNICODE_STRING RegPath);
158 AFSUnload( IN PDRIVER_OBJECT DriverObject);
161 // AFSCommSupport.cpp Prototypes
165 AFSEnumerateDirectory( IN GUID *AuthGroup,
166 IN AFSObjectInfoCB *ObjectInfoCB,
167 IN BOOLEAN FastQuery);
170 AFSEnumerateDirectoryNoResponse( IN GUID *AuthGroup,
171 IN AFSFileID *FileId);
174 AFSVerifyDirectoryContent( IN AFSObjectInfoCB *ObjectInfo,
178 AFSNotifyFileCreate( IN GUID *AuthGroup,
179 IN AFSObjectInfoCB *ParentObjectInfo,
180 IN PLARGE_INTEGER FileSize,
181 IN ULONG FileAttributes,
182 IN UNICODE_STRING *FileName,
183 OUT AFSDirectoryCB **DirNode);
186 AFSUpdateFileInformation( IN AFSFileID *ParentFid,
187 IN AFSObjectInfoCB *ObjectInfo,
191 AFSNotifyDelete( IN AFSDirectoryCB *DirectoryCB,
193 IN BOOLEAN CheckOnly);
196 AFSNotifyRename( IN AFSObjectInfoCB *ObjectInfo,
198 IN AFSObjectInfoCB *ParentObjectInfo,
199 IN AFSObjectInfoCB *TargetParentObjectInfo,
200 IN AFSDirectoryCB *DirectoryCB,
201 IN UNICODE_STRING *TargetName,
202 OUT AFSFileID *UpdatedFID);
205 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
208 OUT AFSDirEnumEntry **DirEnumEntry);
211 AFSEvaluateTargetByName( IN GUID *AuthGroup,
212 IN AFSObjectInfoCB *ParentObjectInfo,
213 IN PUNICODE_STRING SourceName,
214 OUT AFSDirEnumEntry **DirEnumEntry);
217 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
218 IN AFSFileID *FileID,
219 OUT AFSVolumeInfoCB *VolumeInformation);
222 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
223 IN ULONG InputLength,
224 IN ULONG OutputLength,
225 IN void *InputDataBuffer,
226 OUT void *OutputDataBuffer,
227 OUT ULONG *BytesReturned);
230 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
231 IN ULONG InformationClass,
232 IN ULONG InputLength,
233 IN void *DataBuffer);
236 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
237 IN ULONG InformationClass,
238 IN ULONG OutputLength,
240 OUT ULONG *BytesReturned);
243 AFSReleaseFid( IN AFSFileID *FileId);
246 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
247 IN LARGE_INTEGER *ExtentOffset,
251 // AFSCreate.cpp Prototypes
255 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
259 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
263 AFSOpenRedirector( IN PIRP Irp,
268 AFSOpenAFSRoot( IN PIRP Irp,
273 AFSOpenRoot( IN PIRP Irp,
274 IN AFSVolumeCB *VolumeCB,
280 AFSProcessCreate( IN PIRP Irp,
282 IN AFSVolumeCB *VolumeCB,
283 IN AFSDirectoryCB *ParentDirCB,
284 IN PUNICODE_STRING FileName,
285 IN PUNICODE_STRING ComponentName,
286 IN PUNICODE_STRING FullFileName,
291 AFSOpenTargetDirectory( IN PIRP Irp,
292 IN AFSVolumeCB *VolumeCB,
293 IN AFSDirectoryCB *ParentDirectoryCB,
294 IN AFSDirectoryCB *TargetDirectoryCB,
295 IN UNICODE_STRING *TargetName,
300 AFSProcessOpen( IN PIRP Irp,
302 IN AFSVolumeCB *VolumeCB,
303 IN AFSDirectoryCB *ParentDirCB,
304 IN AFSDirectoryCB *DirectoryCB,
309 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
311 IN AFSVolumeCB *VolumeCB,
313 IN AFSDirectoryCB *ParentDirCB,
314 IN AFSDirectoryCB *DirectoryCB,
319 AFSControlDeviceCreate( IN PIRP Irp);
322 AFSOpenIOCtlFcb( IN PIRP Irp,
324 IN AFSDirectoryCB *ParentDirCB,
329 AFSOpenSpecialShareFcb( IN PIRP Irp,
331 IN AFSDirectoryCB *DirectoryCB,
336 // AFSExtentsSupport.cpp Prototypes
339 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
342 AFSExtentForOffset( IN AFSFcb *Fcb,
343 IN PLARGE_INTEGER Offset,
344 IN BOOLEAN ReturnPrevious);
346 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
350 AFSRequestExtents( IN AFSFcb *Fcb,
352 IN PLARGE_INTEGER Offset,
354 OUT BOOLEAN *FullyMApped);
356 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
357 IN PLARGE_INTEGER Offset,
359 IN OUT AFSExtent **FirstExtent,
360 OUT AFSExtent **LastExtent);
363 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
365 IN PLARGE_INTEGER Offset,
369 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
373 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
376 AFSProcessReleaseFileExtents( IN PIRP Irp);
379 AFSProcessExtentFailure( PIRP Irp);
382 AFSProcessSetExtents( IN AFSFcb *pFcb,
384 IN AFSFileExtentCB *Result);
387 AFSFlushExtents( IN AFSFcb *pFcb,
391 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
395 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
399 AFSMarkDirty( IN AFSFcb *pFcb,
400 IN AFSExtent *StartExtent,
401 IN ULONG ExtentsCount,
402 IN LARGE_INTEGER *StartingByte,
403 IN BOOLEAN DerefExtents);
406 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
410 AFSTrimExtents( IN AFSFcb *Fcb,
411 IN PLARGE_INTEGER FileSize);
414 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
416 IN AFSFileExtentCB *Result);
419 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
420 IN ULONG ExtentsCount);
423 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
424 IN ULONG ExtentsCount);
427 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
428 IN AFSExtent *Extent);
431 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
435 AFSSetupMD5Hash( IN AFSFcb *Fcb,
436 IN AFSExtent *StartExtent,
437 IN ULONG ExtentsCount,
438 IN void *SystemBuffer,
439 IN LARGE_INTEGER *ByteOffset,
445 // AFSIoSupp.cpp Prototypes
448 AFSGetExtents( IN AFSFcb *pFcb,
449 IN PLARGE_INTEGER Offset,
452 OUT ULONG *ExtentCount,
453 OUT ULONG *RunCount);
456 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
458 IN PVOID SystemBuffer,
459 IN OUT AFSIoRun *IoRun,
460 IN PLARGE_INTEGER Start,
463 IN OUT ULONG *RunCount);
466 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
467 IN UCHAR FunctionCode,
471 IN OUT AFSGatherIo *Gather);
474 AFSCompleteIo( IN AFSGatherIo *Gather,
478 AFSProcessExtentRun( IN PVOID SystemBuffer,
479 IN PLARGE_INTEGER Start,
482 IN BOOLEAN WriteRequest);
485 // AFSClose.cpp Prototypes
489 AFSClose( IN PDEVICE_OBJECT DeviceObject,
493 // AFSFcbSupport.cpp Prototypes
497 AFSInitFcb( IN AFSDirectoryCB *DirEntry,
498 IN OUT AFSFcb **Fcb);
501 AFSInitVolume( IN GUID *AuthGroup,
502 IN AFSFileID *RootFid,
503 OUT AFSVolumeCB **VolumeCB);
506 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
509 AFSInitRootFcb( IN ULONGLONG ProcessID,
510 IN AFSVolumeCB *VolumeCB);
513 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
516 AFSInitCcb( IN OUT AFSCcb **Ccb);
519 AFSRemoveFcb( IN AFSFcb *Fcb);
522 AFSRemoveCcb( IN AFSFcb *Fcb,
526 AFSInsertCcb( IN AFSFcb *Fcb,
530 // AFSNameSupport.cpp Prototypes
534 AFSLocateNameEntry( IN GUID *AuthGroup,
535 IN PFILE_OBJECT FileObject,
536 IN UNICODE_STRING *RootPathName,
537 IN UNICODE_STRING *ParsedPathName,
538 IN AFSNameArrayHdr *NameArray,
540 OUT AFSVolumeCB **VolumeCB,
541 IN OUT AFSDirectoryCB **ParentDirectoryCB,
542 OUT AFSDirectoryCB **DirectoryCB,
543 OUT PUNICODE_STRING ComponentName);
546 AFSCreateDirEntry( IN GUID *AuthGroup,
547 IN AFSObjectInfoCB *ParentObjectInfo,
548 IN AFSDirectoryCB *ParentDirCB,
549 IN PUNICODE_STRING FileName,
550 IN PUNICODE_STRING ComponentName,
552 IN OUT AFSDirectoryCB **DirEntry);
555 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
556 IN AFSDirectoryCB *DirEntry,
557 IN BOOLEAN InsertInEnumList);
560 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
561 IN AFSDirectoryCB *DirEntry);
564 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
565 IN AFSDirectoryCB *DirEntry,
566 IN BOOLEAN RemoveFromEnumList);
569 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
570 IN OUT PUNICODE_STRING TargetFileName);
573 AFSParseName( IN PIRP Irp,
575 OUT PUNICODE_STRING FileName,
576 OUT PUNICODE_STRING ParsedFileName,
577 OUT PUNICODE_STRING RootFileName,
578 OUT ULONG *ParseFlags,
579 OUT AFSVolumeCB **VolumeCB,
580 OUT AFSDirectoryCB **ParentDirectoryCB,
581 OUT AFSNameArrayHdr **NameArray);
584 AFSCheckCellName( IN GUID *AuthGroup,
585 IN UNICODE_STRING *CellName,
586 OUT AFSDirectoryCB **ShareDirEntry);
589 AFSBuildMountPointTarget( IN GUID *AuthGroup,
590 IN AFSDirectoryCB *DirectoryCB,
591 OUT AFSVolumeCB **VolumeCB);
594 AFSBuildRootVolume( IN GUID *AuthGroup,
595 IN AFSFileID *FileId,
596 OUT AFSVolumeCB **TargetVolumeCB);
599 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
600 IN PFILE_OBJECT FileObject,
601 IN UNICODE_STRING *RemainingPath,
605 // AFSNetworkProviderSupport.cpp
609 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
610 IN OUT PULONG ResultStatus,
611 IN OUT ULONG_PTR *ReturnOutputBufferLength);
614 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
615 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
616 IN OUT ULONG_PTR *ReturnOutputBufferLength);
619 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
620 IN OUT WCHAR *RemoteName,
621 IN ULONG RemoteNameBufferLength,
622 IN OUT ULONG_PTR *ReturnOutputBufferLength);
625 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
626 IN ULONG ConnectionBufferLength,
627 IN OUT ULONG_PTR *ReturnOutputBufferLength);
630 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
631 IN ULONG DisplayType);
633 AFSProviderConnectionCB *
634 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
637 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
638 IN AFSProviderConnectionCB *RootConnection,
639 IN ULONG BufferLength,
640 OUT PULONG CopiedLength);
643 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
644 IN ULONG BufferLength,
645 IN OUT ULONG_PTR *ReturnOutputBufferLength);
648 AFSIsDriveMapped( IN WCHAR DriveMapping);
651 // AFSRead.cpp Prototypes
655 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
657 IN HANDLE OnBehalfOf);
660 AFSRead( IN PDEVICE_OBJECT DeviceObject,
665 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
669 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
673 // AFSWrite.cpp Prototypes
677 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
679 IN HANDLE CallingUser);
682 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
686 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
690 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
694 // AFSFileInfo.cpp Prototypes
698 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
702 AFSQueryBasicInfo( IN PIRP Irp,
703 IN AFSDirectoryCB *DirectoryCB,
704 IN OUT PFILE_BASIC_INFORMATION Buffer,
705 IN OUT PLONG Length);
708 AFSQueryStandardInfo( IN PIRP Irp,
709 IN AFSDirectoryCB *DirectoryCB,
710 IN OUT PFILE_STANDARD_INFORMATION Buffer,
711 IN OUT PLONG Length);
714 AFSQueryInternalInfo( IN PIRP Irp,
716 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
717 IN OUT PLONG Length);
720 AFSQueryEaInfo( IN PIRP Irp,
721 IN AFSDirectoryCB *DirectoryCB,
722 IN OUT PFILE_EA_INFORMATION Buffer,
723 IN OUT PLONG Length);
726 AFSQueryPositionInfo( IN PIRP Irp,
728 IN OUT PFILE_POSITION_INFORMATION Buffer,
729 IN OUT PLONG Length);
732 AFSQueryNameInfo( IN PIRP Irp,
733 IN AFSDirectoryCB *DirectoryCB,
734 IN OUT PFILE_NAME_INFORMATION Buffer,
735 IN OUT PLONG Length);
738 AFSQueryShortNameInfo( IN PIRP Irp,
739 IN AFSDirectoryCB *DirectoryCB,
740 IN OUT PFILE_NAME_INFORMATION Buffer,
741 IN OUT PLONG Length);
744 AFSQueryNetworkInfo( IN PIRP Irp,
745 IN AFSDirectoryCB *DirectoryCB,
746 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
747 IN OUT PLONG Length);
750 AFSQueryStreamInfo( IN PIRP Irp,
751 IN AFSDirectoryCB *DirectoryCB,
752 IN OUT FILE_STREAM_INFORMATION *Buffer,
753 IN OUT PLONG Length);
756 AFSQueryAccess( IN PIRP Irp,
758 IN OUT PFILE_ACCESS_INFORMATION Buffer,
759 IN OUT PLONG Length);
762 AFSQueryMode( IN PIRP Irp,
764 IN OUT PFILE_MODE_INFORMATION Buffer,
765 IN OUT PLONG Length);
768 AFSQueryAlignment( IN PIRP Irp,
770 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
771 IN OUT PLONG Length);
774 AFSQueryAttribTagInfo( IN PIRP Irp,
775 IN AFSDirectoryCB *DirectoryCB,
776 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
777 IN OUT PLONG Length);
780 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
781 IN AFSDirectoryCB *DirectoryCB,
782 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
783 IN OUT PLONG Length);
786 AFSQueryPhysicalNameInfo( IN PIRP Irp,
787 IN AFSDirectoryCB *DirectoryCB,
788 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
789 IN OUT PLONG Length);
792 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
796 AFSSetBasicInfo( IN PIRP Irp,
797 IN AFSDirectoryCB *DirectoryCB);
800 AFSSetDispositionInfo( IN PIRP Irp,
801 IN AFSDirectoryCB *DirectoryCB);
804 AFSSetRenameInfo( IN PIRP Irp);
807 AFSSetPositionInfo( IN PIRP Irp,
808 IN AFSDirectoryCB *DirectoryCB);
811 AFSSetAllocationInfo( IN PIRP Irp,
812 IN AFSDirectoryCB *DirectoryCB);
815 AFSSetEndOfFileInfo( IN PIRP Irp,
816 IN AFSDirectoryCB *DirectoryCB);
819 AFSProcessShareSetInfo( IN IRP *Irp,
824 AFSProcessShareQueryInfo( IN IRP *Irp,
829 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
832 IN OUT LONG *Length);
835 // AFSEa.cpp Prototypes
839 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
843 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
847 // AFSFlushBuffers.cpp Prototypes
851 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
855 // AFSVolumeInfo.cpp Prototypes
859 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
863 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
867 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
868 IN PFILE_FS_VOLUME_INFORMATION Buffer,
869 IN OUT PULONG Length);
872 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
873 IN PFILE_FS_SIZE_INFORMATION Buffer,
874 IN OUT PULONG Length);
877 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
878 IN PFILE_FS_DEVICE_INFORMATION Buffer,
879 IN OUT PULONG Length);
882 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
883 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
884 IN OUT PULONG Length);
887 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
888 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
889 IN OUT PULONG Length);
892 // AFSDirControl.cpp Prototypes
896 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
900 AFSQueryDirectory( IN PIRP Irp);
903 AFSNotifyChangeDirectory( IN PIRP Irp);
906 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
910 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
915 AFSSnapshotDirectory( IN AFSFcb *Fcb,
917 IN BOOLEAN ResetIndex);
920 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
922 IN BOOLEAN WatchTree,
923 IN ULONG CompletionFilter,
927 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
929 IN ULONG NotifyFilter,
930 IN ULONG NotificationAction);
933 AFSNotifyReportChangeCallback( IN void *NotifyContext,
934 IN void *FilterContext);
937 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
941 // AFSFSControl.cpp Prototypes
945 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
949 AFSProcessUserFsRequest( IN PIRP Irp);
952 AFSProcessShareFsCtrl( IN IRP *Irp,
957 // AFSDevControl.cpp Prototypes
961 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
965 // AFSInternalDevControl.cpp Prototypes
969 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
973 // AFSShutdown.cpp Prototypes
977 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
982 AFSShutdownFilesystem( void);
985 // AFSLockControl.cpp Prototypes
989 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
993 // AFSCleanup.cpp Prototypes
997 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1001 // AFSSecurity.cpp Prototypes
1005 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1009 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1013 // AFSSystemControl.cpp Prototypes
1017 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1021 // AFSQuota.cpp Prototypes
1025 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1029 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1033 // AFSGeneric.cpp Prototypes
1037 AFSExceptionFilter( IN ULONG Code,
1038 IN PEXCEPTION_POINTERS ExceptPtrs);
1041 AFSAcquireExcl( IN PERESOURCE Resource,
1045 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1049 AFSAcquireShared( IN PERESOURCE Resource,
1053 AFSReleaseResource( IN PERESOURCE Resource);
1056 AFSConvertToShared( IN PERESOURCE Resource);
1059 AFSCompleteRequest( IN PIRP Irp,
1063 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1064 IN BOOLEAN UpperCaseName);
1067 AFSLockSystemBuffer( IN PIRP Irp,
1071 AFSLockUserBuffer( IN void *UserBuffer,
1072 IN ULONG BufferLength,
1076 AFSMapToService( IN PIRP Irp,
1077 IN ULONG ByteCount);
1080 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1084 AFSInitializeLibraryDevice( void);
1087 AFSRemoveLibraryDevice( void);
1090 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1094 AFSInitializeGlobalDirectoryEntries( void);
1097 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1098 IN PUNICODE_STRING FileName,
1099 IN PUNICODE_STRING TargetName,
1100 IN AFSDirEnumEntry *DirEnumEntry,
1101 IN ULONG FileIndex);
1104 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1105 IN BOOLEAN DirectoryEntry);
1108 AFSEvaluateNode( IN GUID *AuthGroup,
1109 IN AFSDirectoryCB *DirEntry);
1112 AFSValidateSymLink( IN GUID *AuthGroup,
1113 IN AFSDirectoryCB *DirEntry);
1116 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1119 AFSIsChildOfParent( IN AFSFcb *Dcb,
1124 AFSCreateHighIndex( IN AFSFileID *FileID);
1128 AFSCreateLowIndex( IN AFSFileID *FileID);
1131 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1132 IN ACCESS_MASK GrantedAccess,
1133 IN BOOLEAN DirectoryEntry);
1136 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1139 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1140 IN UNICODE_STRING *SubstituteName,
1141 IN ULONG StringIndex);
1144 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1145 IN OUT UNICODE_STRING *ComponentName,
1146 IN UNICODE_STRING *SubstituteName,
1147 IN OUT UNICODE_STRING *RemainingPath,
1148 IN BOOLEAN FreePathName);
1151 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1155 AFSVerifyEntry( IN GUID *AuthGroup,
1156 IN AFSDirectoryCB *DirectoryCB);
1159 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1162 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1165 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1166 IN GUID *AuthGroup);
1169 AFSIsVolumeFID( IN AFSFileID *FileID);
1172 AFSIsFinalNode( IN AFSFcb *Fcb);
1175 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1176 IN AFSDirEnumEntry *DirEnumEntry);
1179 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1181 IN BOOLEAN PurgeContent,
1182 IN BOOLEAN FastCall);
1185 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1186 IN UNICODE_STRING *SecondaryName);
1189 AFSInitializeSpecialShareNameList( void);
1192 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1195 AFSWaitOnQueuedReleases( void);
1198 AFSIsEqualFID( IN AFSFileID *FileId1,
1199 IN AFSFileID *FileId2);
1202 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1205 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1208 AFSIsRelativeName( IN UNICODE_STRING *Name);
1211 AFSUpdateName( IN UNICODE_STRING *Name);
1214 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1215 IN OUT ULONG *Flags,
1216 IN WCHAR *NameBuffer,
1217 IN USHORT NameLength);
1220 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1221 IN ULONG InitialElementCount);
1224 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1225 IN UNICODE_STRING *Path,
1226 IN AFSDirectoryCB *DirectoryCB);
1229 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1230 IN AFSNameArrayHdr *RelatedNameArray,
1231 IN AFSDirectoryCB *DirectoryCB);
1234 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1237 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1238 IN AFSDirectoryCB *DirEntry);
1241 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1242 IN AFSDirectoryCB *DirectoryCB);
1245 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1248 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1251 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1252 IN AFSDirectoryCB *DirEntry);
1255 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1258 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1261 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1264 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1267 AFSVerifyVolume( IN ULONGLONG ProcessId,
1268 IN AFSVolumeCB *VolumeCB);
1271 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1274 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1275 IN AFSDirectoryCB *DirectoryCB,
1276 IN UNICODE_STRING *ParentPathName,
1277 IN AFSNameArrayHdr *RelatedNameArray,
1279 OUT AFSFileInfoCB *FileInfo);
1282 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1283 IN ULONGLONG HashIndex);
1286 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1289 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1290 OUT AFSDirectoryCB **TargetDirEntry);
1293 AFSCleanupFcb( IN AFSFcb *Fcb,
1294 IN BOOLEAN ForceFlush);
1297 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1298 IN UNICODE_STRING *NewFileName);
1301 AFSReadCacheFile( IN void *ReadBuffer,
1302 IN LARGE_INTEGER *ReadOffset,
1303 IN ULONG RequestedDataLength,
1304 IN OUT PULONG BytesRead);
1307 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1312 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1315 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1316 IN AFSDirectoryCB *DirEntry);
1319 AFSGetAuthenticationId( void);
1322 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1326 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1329 AFSReferenceCacheFileObject( void);
1332 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1335 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1338 AFSCloseLibrary( void);
1341 AFSDefaultLogMsg( IN ULONG Subsystem,
1347 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1348 IN ULONG InputBufferLength,
1349 IN AFSStatusInfoCB *StatusInfo,
1350 OUT ULONG *ReturnLength);
1353 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1354 IN UNICODE_STRING *ComponentName);
1357 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1358 OUT UNICODE_STRING *ComponentName);
1361 AFSDumpTraceFiles_Default( void);
1364 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1365 IN SIZE_T NumberOfBytes,
1369 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1372 AFSCreateDefaultSecurityDescriptor( void);
1375 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1376 OUT UNICODE_STRING *ParentPath);
1379 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1380 IN AFSObjectInfoCB *ObjectInfo,
1381 IN BOOLEAN WriteAccess,
1382 OUT GUID *AuthGroup);
1385 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1386 IN ULONG InvalidateReason);
1389 // AFSWorker.cpp Prototypes
1393 AFSInitializeWorkerPool( void);
1396 AFSRemoveWorkerPool( void);
1399 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1400 IN PKSTART_ROUTINE WorkerRoutine);
1403 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1406 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1409 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1412 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1415 AFSWorkerThread( IN PVOID Context);
1418 AFSIOWorkerThread( IN PVOID Context);
1421 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1424 AFSVolumeWorkerThread( IN PVOID Context);
1427 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1430 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1433 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1436 AFSRemoveWorkItem( void);
1439 AFSRemoveIOWorkItem( void);
1442 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1445 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1448 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1451 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1454 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1455 IN GUID *AuthGroup);
1458 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1460 IN HANDLE CallerProcess);
1463 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1465 IN HANDLE CallerProcess);
1468 AFSQueueGlobalRootEnumeration( void);
1471 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1474 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1475 IN UCHAR FunctionCode,
1476 IN ULONG RequestFLags,
1477 IN AFSIoRun *IoRuns,
1479 IN AFSGatherIo *GatherIo);
1482 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1483 IN ULONG InvalidateReason);
1486 // AFSMD5Support.cpp Prototypes
1490 AFSGenerateMD5( IN char *DataBuffer,
1492 OUT UCHAR *MD5Digest);
1496 #endif /* _AFS_COMMON_H */