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,
401 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
405 AFSMarkDirty( IN AFSFcb *pFcb,
406 IN AFSExtent *StartExtent,
407 IN ULONG ExtentsCount,
408 IN LARGE_INTEGER *StartingByte,
409 IN BOOLEAN DerefExtents);
412 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
416 AFSTrimExtents( IN AFSFcb *Fcb,
417 IN PLARGE_INTEGER FileSize);
420 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
422 IN AFSFileExtentCB *Result);
425 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
426 IN ULONG ExtentsCount);
429 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
430 IN ULONG ExtentsCount);
433 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
434 IN AFSExtent *Extent);
437 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
440 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
441 AFSByteRange ** pByteRangeList);
445 AFSSetupMD5Hash( IN AFSFcb *Fcb,
446 IN AFSExtent *StartExtent,
447 IN ULONG ExtentsCount,
448 IN void *SystemBuffer,
449 IN LARGE_INTEGER *ByteOffset,
455 // AFSIoSupp.cpp Prototypes
458 AFSGetExtents( IN AFSFcb *pFcb,
459 IN PLARGE_INTEGER Offset,
462 OUT ULONG *ExtentCount,
463 OUT ULONG *RunCount);
466 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
468 IN PVOID SystemBuffer,
469 IN OUT AFSIoRun *IoRun,
470 IN PLARGE_INTEGER Start,
473 IN OUT ULONG *RunCount);
476 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
477 IN UCHAR FunctionCode,
481 IN OUT AFSGatherIo *Gather);
484 AFSCompleteIo( IN AFSGatherIo *Gather,
488 AFSProcessExtentRun( IN PVOID SystemBuffer,
489 IN PLARGE_INTEGER Start,
492 IN BOOLEAN WriteRequest);
495 // AFSClose.cpp Prototypes
499 AFSClose( IN PDEVICE_OBJECT DeviceObject,
503 // AFSFcbSupport.cpp Prototypes
507 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
510 AFSInitVolume( IN GUID *AuthGroup,
511 IN AFSFileID *RootFid,
512 OUT AFSVolumeCB **VolumeCB);
515 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
518 AFSInitRootFcb( IN ULONGLONG ProcessID,
519 IN AFSVolumeCB *VolumeCB);
522 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
525 AFSInitCcb( IN OUT AFSCcb **Ccb);
528 AFSRemoveFcb( IN AFSFcb **Fcb);
531 AFSRemoveCcb( IN AFSFcb *Fcb,
535 AFSInsertCcb( IN AFSFcb *Fcb,
539 // AFSNameSupport.cpp Prototypes
543 AFSLocateNameEntry( IN GUID *AuthGroup,
544 IN PFILE_OBJECT FileObject,
545 IN UNICODE_STRING *RootPathName,
546 IN UNICODE_STRING *ParsedPathName,
547 IN AFSNameArrayHdr *NameArray,
549 OUT AFSVolumeCB **VolumeCB,
550 IN OUT AFSDirectoryCB **ParentDirectoryCB,
551 OUT AFSDirectoryCB **DirectoryCB,
552 OUT PUNICODE_STRING ComponentName);
555 AFSCreateDirEntry( IN GUID *AuthGroup,
556 IN AFSObjectInfoCB *ParentObjectInfo,
557 IN AFSDirectoryCB *ParentDirCB,
558 IN PUNICODE_STRING FileName,
559 IN PUNICODE_STRING ComponentName,
561 IN OUT AFSDirectoryCB **DirEntry);
564 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
565 IN AFSDirectoryCB *DirEntry,
566 IN BOOLEAN InsertInEnumList);
569 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
570 IN AFSDirectoryCB *DirEntry);
573 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
574 IN AFSDirectoryCB *DirEntry,
575 IN BOOLEAN RemoveFromEnumList);
578 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
579 IN OUT PUNICODE_STRING TargetFileName);
582 AFSParseName( IN PIRP Irp,
584 OUT PUNICODE_STRING FileName,
585 OUT PUNICODE_STRING ParsedFileName,
586 OUT PUNICODE_STRING RootFileName,
587 OUT ULONG *ParseFlags,
588 OUT AFSVolumeCB **VolumeCB,
589 OUT AFSDirectoryCB **ParentDirectoryCB,
590 OUT AFSNameArrayHdr **NameArray);
593 AFSCheckCellName( IN GUID *AuthGroup,
594 IN UNICODE_STRING *CellName,
595 OUT AFSDirectoryCB **ShareDirEntry);
598 AFSBuildMountPointTarget( IN GUID *AuthGroup,
599 IN AFSDirectoryCB *DirectoryCB,
600 OUT AFSVolumeCB **VolumeCB);
603 AFSBuildRootVolume( IN GUID *AuthGroup,
604 IN AFSFileID *FileId,
605 OUT AFSVolumeCB **TargetVolumeCB);
608 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
609 IN PFILE_OBJECT FileObject,
610 IN UNICODE_STRING *RemainingPath,
614 // AFSNetworkProviderSupport.cpp
618 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
619 IN OUT PULONG ResultStatus,
620 IN OUT ULONG_PTR *ReturnOutputBufferLength);
623 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
624 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
625 IN OUT ULONG_PTR *ReturnOutputBufferLength);
628 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
629 IN OUT WCHAR *RemoteName,
630 IN ULONG RemoteNameBufferLength,
631 IN OUT ULONG_PTR *ReturnOutputBufferLength);
634 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
635 IN ULONG ConnectionBufferLength,
636 IN OUT ULONG_PTR *ReturnOutputBufferLength);
639 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
640 IN ULONG DisplayType);
642 AFSProviderConnectionCB *
643 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
646 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
647 IN AFSProviderConnectionCB *RootConnection,
648 IN ULONG BufferLength,
649 OUT PULONG CopiedLength);
652 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
653 IN ULONG BufferLength,
654 IN OUT ULONG_PTR *ReturnOutputBufferLength);
657 AFSIsDriveMapped( IN WCHAR DriveMapping);
660 // AFSRead.cpp Prototypes
664 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
666 IN HANDLE OnBehalfOf);
669 AFSRead( IN PDEVICE_OBJECT DeviceObject,
674 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
678 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
682 // AFSWrite.cpp Prototypes
686 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
688 IN HANDLE CallingUser);
691 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
695 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
699 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
703 // AFSFileInfo.cpp Prototypes
707 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
711 AFSQueryBasicInfo( IN PIRP Irp,
712 IN AFSDirectoryCB *DirectoryCB,
713 IN OUT PFILE_BASIC_INFORMATION Buffer,
714 IN OUT PLONG Length);
717 AFSQueryStandardInfo( IN PIRP Irp,
718 IN AFSDirectoryCB *DirectoryCB,
719 IN OUT PFILE_STANDARD_INFORMATION Buffer,
720 IN OUT PLONG Length);
723 AFSQueryInternalInfo( IN PIRP Irp,
725 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
726 IN OUT PLONG Length);
729 AFSQueryEaInfo( IN PIRP Irp,
730 IN AFSDirectoryCB *DirectoryCB,
731 IN OUT PFILE_EA_INFORMATION Buffer,
732 IN OUT PLONG Length);
735 AFSQueryPositionInfo( IN PIRP Irp,
737 IN OUT PFILE_POSITION_INFORMATION Buffer,
738 IN OUT PLONG Length);
741 AFSQueryNameInfo( IN PIRP Irp,
742 IN AFSDirectoryCB *DirectoryCB,
743 IN OUT PFILE_NAME_INFORMATION Buffer,
744 IN OUT PLONG Length);
747 AFSQueryShortNameInfo( IN PIRP Irp,
748 IN AFSDirectoryCB *DirectoryCB,
749 IN OUT PFILE_NAME_INFORMATION Buffer,
750 IN OUT PLONG Length);
753 AFSQueryNetworkInfo( IN PIRP Irp,
754 IN AFSDirectoryCB *DirectoryCB,
755 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
756 IN OUT PLONG Length);
759 AFSQueryStreamInfo( IN PIRP Irp,
760 IN AFSDirectoryCB *DirectoryCB,
761 IN OUT FILE_STREAM_INFORMATION *Buffer,
762 IN OUT PLONG Length);
765 AFSQueryAccess( IN PIRP Irp,
767 IN OUT PFILE_ACCESS_INFORMATION Buffer,
768 IN OUT PLONG Length);
771 AFSQueryMode( IN PIRP Irp,
773 IN OUT PFILE_MODE_INFORMATION Buffer,
774 IN OUT PLONG Length);
777 AFSQueryAlignment( IN PIRP Irp,
779 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
780 IN OUT PLONG Length);
783 AFSQueryAttribTagInfo( IN PIRP Irp,
784 IN AFSDirectoryCB *DirectoryCB,
785 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
786 IN OUT PLONG Length);
789 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
790 IN AFSDirectoryCB *DirectoryCB,
791 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
792 IN OUT PLONG Length);
795 AFSQueryPhysicalNameInfo( IN PIRP Irp,
796 IN AFSDirectoryCB *DirectoryCB,
797 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
798 IN OUT PLONG Length);
801 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
805 AFSSetBasicInfo( IN PIRP Irp,
806 IN AFSDirectoryCB *DirectoryCB);
809 AFSSetDispositionInfo( IN PIRP Irp,
810 IN AFSDirectoryCB *DirectoryCB);
813 AFSSetRenameInfo( IN PIRP Irp);
816 AFSSetPositionInfo( IN PIRP Irp,
817 IN AFSDirectoryCB *DirectoryCB);
820 AFSSetAllocationInfo( IN PIRP Irp,
821 IN AFSDirectoryCB *DirectoryCB);
824 AFSSetEndOfFileInfo( IN PIRP Irp,
825 IN AFSDirectoryCB *DirectoryCB);
828 AFSProcessShareSetInfo( IN IRP *Irp,
833 AFSProcessShareQueryInfo( IN IRP *Irp,
838 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
841 IN OUT LONG *Length);
844 // AFSEa.cpp Prototypes
848 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
852 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
856 // AFSFlushBuffers.cpp Prototypes
860 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
864 // AFSVolumeInfo.cpp Prototypes
868 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
872 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
876 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
877 IN PFILE_FS_VOLUME_INFORMATION Buffer,
878 IN OUT PULONG Length);
881 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
882 IN PFILE_FS_SIZE_INFORMATION Buffer,
883 IN OUT PULONG Length);
886 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
887 IN PFILE_FS_DEVICE_INFORMATION Buffer,
888 IN OUT PULONG Length);
891 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
892 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
893 IN OUT PULONG Length);
896 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
897 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
898 IN OUT PULONG Length);
901 // AFSDirControl.cpp Prototypes
905 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
909 AFSQueryDirectory( IN PIRP Irp);
912 AFSNotifyChangeDirectory( IN PIRP Irp);
915 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
919 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
924 AFSSnapshotDirectory( IN AFSFcb *Fcb,
926 IN BOOLEAN ResetIndex);
929 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
931 IN BOOLEAN WatchTree,
932 IN ULONG CompletionFilter,
936 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
938 IN ULONG NotifyFilter,
939 IN ULONG NotificationAction);
942 AFSNotifyReportChangeCallback( IN void *NotifyContext,
943 IN void *FilterContext);
946 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
950 // AFSFSControl.cpp Prototypes
954 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
958 AFSProcessUserFsRequest( IN PIRP Irp);
961 AFSProcessShareFsCtrl( IN IRP *Irp,
966 // AFSDevControl.cpp Prototypes
970 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
974 // AFSInternalDevControl.cpp Prototypes
978 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
982 // AFSShutdown.cpp Prototypes
986 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
991 AFSShutdownFilesystem( void);
994 // AFSLockControl.cpp Prototypes
998 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1002 // AFSCleanup.cpp Prototypes
1006 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1010 // AFSSecurity.cpp Prototypes
1014 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1018 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1022 // AFSSystemControl.cpp Prototypes
1026 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1030 // AFSQuota.cpp Prototypes
1034 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1038 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1042 // AFSGeneric.cpp Prototypes
1046 AFSExceptionFilter( IN ULONG Code,
1047 IN PEXCEPTION_POINTERS ExceptPtrs);
1050 AFSAcquireExcl( IN PERESOURCE Resource,
1054 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1058 AFSAcquireShared( IN PERESOURCE Resource,
1062 AFSReleaseResource( IN PERESOURCE Resource);
1065 AFSConvertToShared( IN PERESOURCE Resource);
1068 AFSCompleteRequest( IN PIRP Irp,
1072 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1073 IN BOOLEAN UpperCaseName);
1076 AFSLockSystemBuffer( IN PIRP Irp,
1080 AFSLockUserBuffer( IN void *UserBuffer,
1081 IN ULONG BufferLength,
1085 AFSMapToService( IN PIRP Irp,
1086 IN ULONG ByteCount);
1089 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1093 AFSInitializeLibraryDevice( void);
1096 AFSRemoveLibraryDevice( void);
1099 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1103 AFSInitializeGlobalDirectoryEntries( void);
1106 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1107 IN PUNICODE_STRING FileName,
1108 IN PUNICODE_STRING TargetName,
1109 IN AFSDirEnumEntry *DirEnumEntry,
1110 IN ULONG FileIndex);
1113 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1114 IN BOOLEAN DirectoryEntry);
1117 AFSEvaluateNode( IN GUID *AuthGroup,
1118 IN AFSDirectoryCB *DirEntry);
1121 AFSValidateSymLink( IN GUID *AuthGroup,
1122 IN AFSDirectoryCB *DirEntry);
1125 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1128 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1132 AFSIsChildOfParent( IN AFSFcb *Dcb,
1137 AFSCreateHighIndex( IN AFSFileID *FileID);
1141 AFSCreateLowIndex( IN AFSFileID *FileID);
1144 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1145 IN ACCESS_MASK GrantedAccess,
1146 IN BOOLEAN DirectoryEntry);
1149 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1152 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1153 IN UNICODE_STRING *SubstituteName,
1154 IN ULONG StringIndex);
1157 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1158 IN OUT UNICODE_STRING *ComponentName,
1159 IN UNICODE_STRING *SubstituteName,
1160 IN OUT UNICODE_STRING *RemainingPath,
1161 IN BOOLEAN FreePathName);
1164 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1168 AFSInvalidateAllVolumes( VOID);
1171 AFSVerifyEntry( IN GUID *AuthGroup,
1172 IN AFSDirectoryCB *DirectoryCB);
1175 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1178 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1181 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1182 IN GUID *AuthGroup);
1185 AFSIsVolumeFID( IN AFSFileID *FileID);
1188 AFSIsFinalNode( IN AFSFcb *Fcb);
1191 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1192 IN AFSDirEnumEntry *DirEnumEntry);
1195 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1197 IN BOOLEAN FastCall);
1200 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1201 IN UNICODE_STRING *SecondaryName);
1204 AFSInitializeSpecialShareNameList( void);
1207 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1210 AFSWaitOnQueuedReleases( void);
1213 AFSIsEqualFID( IN AFSFileID *FileId1,
1214 IN AFSFileID *FileId2);
1217 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1220 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1223 AFSIsRelativeName( IN UNICODE_STRING *Name);
1226 AFSUpdateName( IN UNICODE_STRING *Name);
1229 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1230 IN OUT ULONG *Flags,
1231 IN WCHAR *NameBuffer,
1232 IN USHORT NameLength);
1235 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1236 IN ULONG InitialElementCount);
1239 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1240 IN UNICODE_STRING *Path,
1241 IN AFSDirectoryCB *DirectoryCB);
1244 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1245 IN AFSNameArrayHdr *RelatedNameArray,
1246 IN AFSDirectoryCB *DirectoryCB);
1249 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1252 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1253 IN AFSDirectoryCB *DirEntry);
1256 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1259 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1262 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1263 IN AFSDirectoryCB *DirEntry);
1266 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1269 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1272 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1275 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1278 AFSVerifyVolume( IN ULONGLONG ProcessId,
1279 IN AFSVolumeCB *VolumeCB);
1282 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1285 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1286 IN AFSDirectoryCB *DirectoryCB,
1287 IN UNICODE_STRING *ParentPathName,
1288 IN AFSNameArrayHdr *RelatedNameArray,
1290 OUT AFSFileInfoCB *FileInfo);
1293 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1294 IN ULONGLONG HashIndex);
1297 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1300 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1301 OUT AFSDirectoryCB **TargetDirEntry);
1304 AFSCleanupFcb( IN AFSFcb *Fcb,
1305 IN BOOLEAN ForceFlush);
1308 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1309 IN UNICODE_STRING *NewFileName);
1312 AFSReadCacheFile( IN void *ReadBuffer,
1313 IN LARGE_INTEGER *ReadOffset,
1314 IN ULONG RequestedDataLength,
1315 IN OUT PULONG BytesRead);
1318 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1323 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1326 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1327 IN AFSDirectoryCB *DirEntry);
1330 AFSGetAuthenticationId( void);
1333 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1337 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1340 AFSReferenceCacheFileObject( void);
1343 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1346 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1349 AFSCloseLibrary( void);
1352 AFSDefaultLogMsg( IN ULONG Subsystem,
1358 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1359 IN ULONG InputBufferLength,
1360 IN AFSStatusInfoCB *StatusInfo,
1361 OUT ULONG *ReturnLength);
1364 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1365 IN UNICODE_STRING *ComponentName);
1368 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1369 OUT UNICODE_STRING *ComponentName);
1372 AFSDumpTraceFiles_Default( void);
1375 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1376 IN SIZE_T NumberOfBytes,
1380 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1383 AFSCreateDefaultSecurityDescriptor( void);
1386 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1387 OUT UNICODE_STRING *ParentPath);
1390 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1391 IN AFSObjectInfoCB *ObjectInfo,
1392 IN BOOLEAN WriteAccess,
1393 OUT GUID *AuthGroup);
1396 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1397 IN ULONG InvalidateReason);
1400 // AFSWorker.cpp Prototypes
1404 AFSInitializeWorkerPool( void);
1407 AFSRemoveWorkerPool( void);
1410 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1411 IN PKSTART_ROUTINE WorkerRoutine);
1414 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1417 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1420 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1423 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1426 AFSWorkerThread( IN PVOID Context);
1429 AFSIOWorkerThread( IN PVOID Context);
1432 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1435 AFSVolumeWorkerThread( IN PVOID Context);
1438 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1441 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1444 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1447 AFSRemoveWorkItem( void);
1450 AFSRemoveIOWorkItem( void);
1453 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1456 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1459 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1462 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1465 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1466 IN GUID *AuthGroup);
1469 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1471 IN HANDLE CallerProcess);
1474 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1476 IN HANDLE CallerProcess);
1479 AFSQueueGlobalRootEnumeration( void);
1482 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1485 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1486 IN UCHAR FunctionCode,
1487 IN ULONG RequestFLags,
1488 IN AFSIoRun *IoRuns,
1490 IN AFSGatherIo *GatherIo);
1493 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1494 IN ULONG InvalidateReason);
1497 // AFSMD5Support.cpp Prototypes
1501 AFSGenerateMD5( IN char *DataBuffer,
1503 OUT UCHAR *MD5Digest);
1507 #endif /* _AFS_COMMON_H */