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,
225 OUT AFSDirEnumEntry **DirEnumEntry);
228 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
229 IN AFSFileID *FileID,
230 OUT AFSVolumeInfoCB *VolumeInformation);
233 AFSRetrieveVolumeSizeInformation( IN GUID *AuthGroup,
234 IN AFSFileID *FileID,
235 OUT AFSVolumeSizeInfoCB *VolumeSizeInformation);
238 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
239 IN ULONG InputLength,
240 IN ULONG OutputLength,
241 IN void *InputDataBuffer,
242 OUT void *OutputDataBuffer,
243 OUT ULONG *BytesReturned);
246 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
247 IN ULONG InformationClass,
248 IN ULONG InputLength,
249 IN void *DataBuffer);
252 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
253 IN ULONG InformationClass,
254 IN ULONG OutputLength,
256 OUT ULONG *BytesReturned);
259 AFSReleaseFid( IN AFSFileID *FileId);
262 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
263 IN LARGE_INTEGER *ExtentOffset,
267 // AFSCreate.cpp Prototypes
271 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
275 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
279 AFSOpenRedirector( IN PIRP Irp,
284 AFSOpenAFSRoot( IN PIRP Irp,
289 AFSOpenRoot( IN PIRP Irp,
290 IN AFSVolumeCB *VolumeCB,
296 AFSProcessCreate( IN PIRP Irp,
298 IN AFSVolumeCB *VolumeCB,
299 IN AFSDirectoryCB *ParentDirCB,
300 IN PUNICODE_STRING FileName,
301 IN PUNICODE_STRING ComponentName,
302 IN PUNICODE_STRING FullFileName,
307 AFSOpenTargetDirectory( IN PIRP Irp,
308 IN AFSVolumeCB *VolumeCB,
309 IN AFSDirectoryCB *ParentDirectoryCB,
310 IN AFSDirectoryCB *TargetDirectoryCB,
311 IN UNICODE_STRING *TargetName,
316 AFSProcessOpen( IN PIRP Irp,
318 IN AFSVolumeCB *VolumeCB,
319 IN AFSDirectoryCB *ParentDirCB,
320 IN AFSDirectoryCB *DirectoryCB,
325 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
327 IN AFSVolumeCB *VolumeCB,
329 IN AFSDirectoryCB *ParentDirCB,
330 IN AFSDirectoryCB *DirectoryCB,
335 AFSControlDeviceCreate( IN PIRP Irp);
338 AFSOpenIOCtlFcb( IN PIRP Irp,
340 IN AFSDirectoryCB *ParentDirCB,
345 AFSOpenSpecialShareFcb( IN PIRP Irp,
347 IN AFSDirectoryCB *DirectoryCB,
352 // AFSExtentsSupport.cpp Prototypes
355 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
358 AFSExtentForOffset( IN AFSFcb *Fcb,
359 IN PLARGE_INTEGER Offset,
360 IN BOOLEAN ReturnPrevious);
362 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
366 AFSRequestExtents( IN AFSFcb *Fcb,
368 IN PLARGE_INTEGER Offset,
370 OUT BOOLEAN *FullyMApped);
372 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
373 IN PLARGE_INTEGER Offset,
375 IN OUT AFSExtent **FirstExtent,
376 OUT AFSExtent **LastExtent);
379 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
381 IN PLARGE_INTEGER Offset,
385 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
389 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
392 AFSProcessReleaseFileExtents( IN PIRP Irp);
395 AFSProcessExtentFailure( PIRP Irp);
398 AFSProcessSetExtents( IN AFSFcb *pFcb,
400 IN AFSFileExtentCB *Result);
403 AFSFlushExtents( IN AFSFcb *pFcb,
407 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
409 IN BOOLEAN bReleaseAll);
412 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
416 AFSMarkDirty( IN AFSFcb *pFcb,
417 IN AFSExtent *StartExtent,
418 IN ULONG ExtentsCount,
419 IN LARGE_INTEGER *StartingByte,
420 IN BOOLEAN DerefExtents);
423 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
427 AFSTrimExtents( IN AFSFcb *Fcb,
428 IN PLARGE_INTEGER FileSize);
431 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
433 IN AFSFileExtentCB *Result);
436 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
437 IN ULONG ExtentsCount);
440 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
441 IN ULONG ExtentsCount);
444 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
445 IN AFSExtent *Extent);
448 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
451 NextExtent( AFSExtent *Extent, ULONG SkipList );
454 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
455 AFSByteRange ** pByteRangeList);
459 AFSSetupMD5Hash( IN AFSFcb *Fcb,
460 IN AFSExtent *StartExtent,
461 IN ULONG ExtentsCount,
462 IN void *SystemBuffer,
463 IN LARGE_INTEGER *ByteOffset,
469 // AFSIoSupp.cpp Prototypes
472 AFSGetExtents( IN AFSFcb *pFcb,
473 IN PLARGE_INTEGER Offset,
476 OUT ULONG *ExtentCount,
477 OUT ULONG *RunCount);
480 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
482 IN PVOID SystemBuffer,
483 IN OUT AFSIoRun *IoRun,
484 IN PLARGE_INTEGER Start,
487 IN OUT ULONG *RunCount);
490 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
491 IN UCHAR FunctionCode,
495 IN OUT AFSGatherIo *Gather);
498 AFSCompleteIo( IN AFSGatherIo *Gather,
502 AFSProcessExtentRun( IN PVOID SystemBuffer,
503 IN PLARGE_INTEGER Start,
506 IN BOOLEAN WriteRequest);
509 // AFSClose.cpp Prototypes
513 AFSClose( IN PDEVICE_OBJECT DeviceObject,
517 // AFSFcbSupport.cpp Prototypes
521 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
524 AFSInitVolume( IN GUID *AuthGroup,
525 IN AFSFileID *RootFid,
526 OUT AFSVolumeCB **VolumeCB);
529 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
532 AFSInitRootFcb( IN ULONGLONG ProcessID,
533 IN AFSVolumeCB *VolumeCB);
536 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
539 AFSInitCcb( IN OUT AFSCcb **Ccb);
542 AFSRemoveFcb( IN AFSFcb **Fcb);
545 AFSRemoveCcb( IN AFSFcb *Fcb,
549 AFSInsertCcb( IN AFSFcb *Fcb,
553 // AFSNameSupport.cpp Prototypes
557 AFSLocateNameEntry( IN GUID *AuthGroup,
558 IN PFILE_OBJECT FileObject,
559 IN UNICODE_STRING *RootPathName,
560 IN UNICODE_STRING *ParsedPathName,
561 IN AFSNameArrayHdr *NameArray,
563 OUT AFSVolumeCB **VolumeCB,
564 IN OUT AFSDirectoryCB **ParentDirectoryCB,
565 OUT AFSDirectoryCB **DirectoryCB,
566 OUT PUNICODE_STRING ComponentName);
569 AFSCreateDirEntry( IN GUID *AuthGroup,
570 IN AFSObjectInfoCB *ParentObjectInfo,
571 IN AFSDirectoryCB *ParentDirCB,
572 IN PUNICODE_STRING FileName,
573 IN PUNICODE_STRING ComponentName,
575 IN OUT AFSDirectoryCB **DirEntry);
578 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
579 IN AFSDirectoryCB *DirEntry,
580 IN BOOLEAN InsertInEnumList);
583 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
584 IN AFSDirectoryCB *DirEntry);
587 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
588 IN AFSDirectoryCB *DirEntry,
589 IN BOOLEAN RemoveFromEnumList);
592 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
593 IN OUT PUNICODE_STRING TargetFileName);
596 AFSParseName( IN PIRP Irp,
598 OUT PUNICODE_STRING FileName,
599 OUT PUNICODE_STRING ParsedFileName,
600 OUT PUNICODE_STRING RootFileName,
601 OUT ULONG *ParseFlags,
602 OUT AFSVolumeCB **VolumeCB,
603 OUT AFSDirectoryCB **ParentDirectoryCB,
604 OUT AFSNameArrayHdr **NameArray);
607 AFSCheckCellName( IN GUID *AuthGroup,
608 IN UNICODE_STRING *CellName,
609 OUT AFSDirectoryCB **ShareDirEntry);
612 AFSBuildMountPointTarget( IN GUID *AuthGroup,
613 IN AFSDirectoryCB *DirectoryCB,
614 OUT AFSVolumeCB **VolumeCB);
617 AFSBuildRootVolume( IN GUID *AuthGroup,
618 IN AFSFileID *FileId,
619 OUT AFSVolumeCB **TargetVolumeCB);
622 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
623 IN PFILE_OBJECT FileObject,
624 IN UNICODE_STRING *RemainingPath,
628 // AFSNetworkProviderSupport.cpp
632 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
633 IN OUT PULONG ResultStatus,
634 IN OUT ULONG_PTR *ReturnOutputBufferLength);
637 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
638 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
639 IN OUT ULONG_PTR *ReturnOutputBufferLength);
642 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
643 IN OUT WCHAR *RemoteName,
644 IN ULONG RemoteNameBufferLength,
645 IN OUT ULONG_PTR *ReturnOutputBufferLength);
648 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
649 IN ULONG ConnectionBufferLength,
650 IN OUT ULONG_PTR *ReturnOutputBufferLength);
653 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
654 IN ULONG DisplayType);
656 AFSProviderConnectionCB *
657 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
660 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
661 IN AFSProviderConnectionCB *RootConnection,
662 IN ULONG BufferLength,
663 OUT PULONG CopiedLength);
666 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
667 IN ULONG BufferLength,
668 IN OUT ULONG_PTR *ReturnOutputBufferLength);
671 AFSIsDriveMapped( IN WCHAR DriveMapping);
674 // AFSRead.cpp Prototypes
678 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
680 IN HANDLE OnBehalfOf);
683 AFSRead( IN PDEVICE_OBJECT DeviceObject,
688 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
692 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
696 // AFSWrite.cpp Prototypes
700 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
702 IN HANDLE CallingUser);
705 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
709 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
713 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
717 // AFSFileInfo.cpp Prototypes
721 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
725 AFSQueryBasicInfo( IN PIRP Irp,
726 IN AFSDirectoryCB *DirectoryCB,
727 IN OUT PFILE_BASIC_INFORMATION Buffer,
728 IN OUT PLONG Length);
731 AFSQueryStandardInfo( IN PIRP Irp,
732 IN AFSDirectoryCB *DirectoryCB,
733 IN OUT PFILE_STANDARD_INFORMATION Buffer,
734 IN OUT PLONG Length);
737 AFSQueryInternalInfo( IN PIRP Irp,
739 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
740 IN OUT PLONG Length);
743 AFSQueryEaInfo( IN PIRP Irp,
744 IN AFSDirectoryCB *DirectoryCB,
745 IN OUT PFILE_EA_INFORMATION Buffer,
746 IN OUT PLONG Length);
749 AFSQueryPositionInfo( IN PIRP Irp,
751 IN OUT PFILE_POSITION_INFORMATION Buffer,
752 IN OUT PLONG Length);
755 AFSQueryNameInfo( IN PIRP Irp,
756 IN AFSDirectoryCB *DirectoryCB,
757 IN OUT PFILE_NAME_INFORMATION Buffer,
758 IN OUT PLONG Length);
761 AFSQueryShortNameInfo( IN PIRP Irp,
762 IN AFSDirectoryCB *DirectoryCB,
763 IN OUT PFILE_NAME_INFORMATION Buffer,
764 IN OUT PLONG Length);
767 AFSQueryNetworkInfo( IN PIRP Irp,
768 IN AFSDirectoryCB *DirectoryCB,
769 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
770 IN OUT PLONG Length);
773 AFSQueryStreamInfo( IN PIRP Irp,
774 IN AFSDirectoryCB *DirectoryCB,
775 IN OUT FILE_STREAM_INFORMATION *Buffer,
776 IN OUT PLONG Length);
779 AFSQueryAccess( IN PIRP Irp,
781 IN OUT PFILE_ACCESS_INFORMATION Buffer,
782 IN OUT PLONG Length);
785 AFSQueryMode( IN PIRP Irp,
787 IN OUT PFILE_MODE_INFORMATION Buffer,
788 IN OUT PLONG Length);
791 AFSQueryAlignment( IN PIRP Irp,
793 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
794 IN OUT PLONG Length);
797 AFSQueryAttribTagInfo( IN PIRP Irp,
798 IN AFSDirectoryCB *DirectoryCB,
799 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
800 IN OUT PLONG Length);
803 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
804 IN AFSDirectoryCB *DirectoryCB,
805 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
806 IN OUT PLONG Length);
809 AFSQueryPhysicalNameInfo( IN PIRP Irp,
810 IN AFSDirectoryCB *DirectoryCB,
811 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
812 IN OUT PLONG Length);
815 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
819 AFSSetBasicInfo( IN PIRP Irp,
820 IN AFSDirectoryCB *DirectoryCB);
823 AFSSetDispositionInfo( IN PIRP Irp,
824 IN AFSDirectoryCB *DirectoryCB);
827 AFSSetRenameInfo( IN PIRP Irp);
830 AFSSetFileLinkInfo( IN PIRP Irp);
833 AFSSetPositionInfo( IN PIRP Irp,
834 IN AFSDirectoryCB *DirectoryCB);
837 AFSSetAllocationInfo( IN PIRP Irp,
838 IN AFSDirectoryCB *DirectoryCB);
841 AFSSetEndOfFileInfo( IN PIRP Irp,
842 IN AFSDirectoryCB *DirectoryCB);
845 AFSProcessShareSetInfo( IN IRP *Irp,
850 AFSProcessShareQueryInfo( IN IRP *Irp,
855 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
858 IN OUT LONG *Length);
861 // AFSEa.cpp Prototypes
865 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
869 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
873 // AFSFlushBuffers.cpp Prototypes
877 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
881 // AFSVolumeInfo.cpp Prototypes
885 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
889 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
893 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
894 IN PFILE_FS_VOLUME_INFORMATION Buffer,
895 IN OUT PULONG Length);
898 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
899 IN PFILE_FS_SIZE_INFORMATION Buffer,
900 IN OUT PULONG Length);
903 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
904 IN PFILE_FS_DEVICE_INFORMATION Buffer,
905 IN OUT PULONG Length);
908 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
909 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
910 IN OUT PULONG Length);
913 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
914 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
915 IN OUT PULONG Length);
918 // AFSDirControl.cpp Prototypes
922 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
926 AFSQueryDirectory( IN PIRP Irp);
929 AFSNotifyChangeDirectory( IN PIRP Irp);
932 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
936 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
941 AFSSnapshotDirectory( IN AFSFcb *Fcb,
943 IN BOOLEAN ResetIndex);
946 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
948 IN BOOLEAN WatchTree,
949 IN ULONG CompletionFilter,
953 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
955 IN ULONG NotifyFilter,
956 IN ULONG NotificationAction);
959 AFSNotifyReportChangeCallback( IN void *NotifyContext,
960 IN void *FilterContext);
963 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
967 // AFSFSControl.cpp Prototypes
971 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
975 AFSProcessUserFsRequest( IN PIRP Irp);
978 AFSProcessShareFsCtrl( IN IRP *Irp,
983 // AFSDevControl.cpp Prototypes
987 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
991 // AFSInternalDevControl.cpp Prototypes
995 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
999 // AFSShutdown.cpp Prototypes
1003 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1008 AFSShutdownFilesystem( void);
1011 // AFSLockControl.cpp Prototypes
1015 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1019 // AFSCleanup.cpp Prototypes
1023 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1027 // AFSSecurity.cpp Prototypes
1031 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1035 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1039 // AFSSystemControl.cpp Prototypes
1043 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1047 // AFSQuota.cpp Prototypes
1051 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1055 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1059 // AFSGeneric.cpp Prototypes
1063 AFSExceptionFilter( IN CHAR *FunctionString,
1065 IN PEXCEPTION_POINTERS ExceptPtrs);
1068 AFSAcquireExcl( IN PERESOURCE Resource,
1072 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1076 AFSAcquireShared( IN PERESOURCE Resource,
1080 AFSReleaseResource( IN PERESOURCE Resource);
1083 AFSConvertToShared( IN PERESOURCE Resource);
1086 AFSCompleteRequest( IN PIRP Irp,
1090 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1091 IN BOOLEAN UpperCaseName);
1094 AFSLockSystemBuffer( IN PIRP Irp,
1098 AFSLockUserBuffer( IN void *UserBuffer,
1099 IN ULONG BufferLength,
1103 AFSMapToService( IN PIRP Irp,
1104 IN ULONG ByteCount);
1107 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1111 AFSInitializeLibraryDevice( void);
1114 AFSRemoveLibraryDevice( void);
1117 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1121 AFSInitializeGlobalDirectoryEntries( void);
1124 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1125 IN PUNICODE_STRING FileName,
1126 IN PUNICODE_STRING TargetName,
1127 IN AFSDirEnumEntry *DirEnumEntry,
1128 IN ULONG FileIndex);
1131 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1132 IN BOOLEAN DirectoryEntry);
1135 AFSEvaluateNode( IN GUID *AuthGroup,
1136 IN AFSDirectoryCB *DirEntry);
1139 AFSValidateSymLink( IN GUID *AuthGroup,
1140 IN AFSDirectoryCB *DirEntry);
1143 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1146 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1150 AFSIsChildOfParent( IN AFSFcb *Dcb,
1155 AFSCreateHighIndex( IN AFSFileID *FileID);
1159 AFSCreateLowIndex( IN AFSFileID *FileID);
1162 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1163 IN ACCESS_MASK GrantedAccess,
1164 IN BOOLEAN DirectoryEntry);
1167 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1170 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1171 IN UNICODE_STRING *SubstituteName,
1172 IN ULONG StringIndex);
1175 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1176 IN OUT UNICODE_STRING *ComponentName,
1177 IN UNICODE_STRING *SubstituteName,
1178 IN OUT UNICODE_STRING *RemainingPath,
1179 IN BOOLEAN FreePathName);
1182 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1186 AFSInvalidateAllVolumes( VOID);
1189 AFSVerifyEntry( IN GUID *AuthGroup,
1190 IN AFSDirectoryCB *DirectoryCB);
1193 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1196 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1199 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1200 IN GUID *AuthGroup);
1203 AFSIsVolumeFID( IN AFSFileID *FileID);
1206 AFSIsFinalNode( IN AFSFcb *Fcb);
1209 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1210 IN AFSDirEnumEntry *DirEnumEntry);
1213 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1215 IN BOOLEAN FastCall,
1216 IN BOOLEAN SafeToPurge);
1219 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1220 IN UNICODE_STRING *SecondaryName);
1223 AFSInitializeSpecialShareNameList( void);
1226 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1229 AFSWaitOnQueuedReleases( void);
1232 AFSIsEqualFID( IN AFSFileID *FileId1,
1233 IN AFSFileID *FileId2);
1236 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1239 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1242 AFSIsRelativeName( IN UNICODE_STRING *Name);
1245 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1248 AFSUpdateName( IN UNICODE_STRING *Name);
1251 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1252 IN OUT ULONG *Flags,
1253 IN WCHAR *NameBuffer,
1254 IN USHORT NameLength);
1257 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1258 IN ULONG InitialElementCount);
1261 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1262 IN UNICODE_STRING *Path,
1263 IN AFSDirectoryCB *DirectoryCB);
1266 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1267 IN AFSNameArrayHdr *RelatedNameArray,
1268 IN AFSDirectoryCB *DirectoryCB);
1271 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1274 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1275 IN AFSDirectoryCB *DirEntry);
1278 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1281 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1284 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1285 IN AFSDirectoryCB *DirEntry);
1288 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1291 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1294 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1297 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1300 AFSVerifyVolume( IN ULONGLONG ProcessId,
1301 IN AFSVolumeCB *VolumeCB);
1304 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1307 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1308 IN AFSDirectoryCB *DirectoryCB,
1309 IN UNICODE_STRING *ParentPathName,
1310 IN AFSNameArrayHdr *RelatedNameArray,
1312 OUT AFSFileInfoCB *FileInfo);
1315 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1316 IN ULONGLONG HashIndex);
1319 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo);
1322 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo);
1325 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1328 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1329 OUT AFSDirectoryCB **TargetDirEntry);
1332 AFSCleanupFcb( IN AFSFcb *Fcb,
1333 IN BOOLEAN ForceFlush);
1336 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1337 IN UNICODE_STRING *NewFileName);
1340 AFSReadCacheFile( IN void *ReadBuffer,
1341 IN LARGE_INTEGER *ReadOffset,
1342 IN ULONG RequestedDataLength,
1343 IN OUT PULONG BytesRead);
1346 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1351 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1354 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1355 IN AFSDirectoryCB *DirEntry);
1358 AFSGetAuthenticationId( void);
1361 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1365 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1368 AFSReferenceCacheFileObject( void);
1371 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1374 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1377 AFSCloseLibrary( void);
1380 AFSDefaultLogMsg( IN ULONG Subsystem,
1386 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1387 IN ULONG InputBufferLength,
1388 IN AFSStatusInfoCB *StatusInfo,
1389 OUT ULONG *ReturnLength);
1392 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1393 IN UNICODE_STRING *ComponentName);
1396 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1397 OUT UNICODE_STRING *ComponentName);
1400 AFSDumpTraceFiles_Default( void);
1403 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1404 IN SIZE_T NumberOfBytes,
1408 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1411 AFSCreateDefaultSecurityDescriptor( void);
1414 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1415 OUT UNICODE_STRING *ParentPath);
1418 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1419 IN AFSObjectInfoCB *ObjectInfo,
1420 IN BOOLEAN WriteAccess,
1421 OUT GUID *AuthGroup);
1424 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1425 IN ULONG InvalidateReason);
1428 // AFSWorker.cpp Prototypes
1432 AFSInitializeWorkerPool( void);
1435 AFSRemoveWorkerPool( void);
1438 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1439 IN PKSTART_ROUTINE WorkerRoutine);
1442 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1445 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1448 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1451 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1454 AFSWorkerThread( IN PVOID Context);
1457 AFSIOWorkerThread( IN PVOID Context);
1460 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1463 AFSVolumeWorkerThread( IN PVOID Context);
1466 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1469 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1472 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1475 AFSRemoveWorkItem( void);
1478 AFSRemoveIOWorkItem( void);
1481 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1484 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1487 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1490 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1493 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1494 IN GUID *AuthGroup);
1497 AFSQueueGlobalRootEnumeration( void);
1500 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1503 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1504 IN UCHAR FunctionCode,
1505 IN ULONG RequestFLags,
1506 IN AFSIoRun *IoRuns,
1508 IN AFSGatherIo *GatherIo);
1511 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1512 IN ULONG InvalidateReason);
1515 // AFSMD5Support.cpp Prototypes
1519 AFSGenerateMD5( IN char *DataBuffer,
1521 OUT UCHAR *MD5Digest);
1525 #endif /* _AFS_COMMON_H */