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 CHAR *FunctionString,
1048 IN PEXCEPTION_POINTERS ExceptPtrs);
1051 AFSAcquireExcl( IN PERESOURCE Resource,
1055 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1059 AFSAcquireShared( IN PERESOURCE Resource,
1063 AFSReleaseResource( IN PERESOURCE Resource);
1066 AFSConvertToShared( IN PERESOURCE Resource);
1069 AFSCompleteRequest( IN PIRP Irp,
1073 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1074 IN BOOLEAN UpperCaseName);
1077 AFSLockSystemBuffer( IN PIRP Irp,
1081 AFSLockUserBuffer( IN void *UserBuffer,
1082 IN ULONG BufferLength,
1086 AFSMapToService( IN PIRP Irp,
1087 IN ULONG ByteCount);
1090 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1094 AFSInitializeLibraryDevice( void);
1097 AFSRemoveLibraryDevice( void);
1100 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1104 AFSInitializeGlobalDirectoryEntries( void);
1107 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1108 IN PUNICODE_STRING FileName,
1109 IN PUNICODE_STRING TargetName,
1110 IN AFSDirEnumEntry *DirEnumEntry,
1111 IN ULONG FileIndex);
1114 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1115 IN BOOLEAN DirectoryEntry);
1118 AFSEvaluateNode( IN GUID *AuthGroup,
1119 IN AFSDirectoryCB *DirEntry);
1122 AFSValidateSymLink( IN GUID *AuthGroup,
1123 IN AFSDirectoryCB *DirEntry);
1126 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1129 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1133 AFSIsChildOfParent( IN AFSFcb *Dcb,
1138 AFSCreateHighIndex( IN AFSFileID *FileID);
1142 AFSCreateLowIndex( IN AFSFileID *FileID);
1145 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1146 IN ACCESS_MASK GrantedAccess,
1147 IN BOOLEAN DirectoryEntry);
1150 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1153 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1154 IN UNICODE_STRING *SubstituteName,
1155 IN ULONG StringIndex);
1158 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1159 IN OUT UNICODE_STRING *ComponentName,
1160 IN UNICODE_STRING *SubstituteName,
1161 IN OUT UNICODE_STRING *RemainingPath,
1162 IN BOOLEAN FreePathName);
1165 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1169 AFSInvalidateAllVolumes( VOID);
1172 AFSVerifyEntry( IN GUID *AuthGroup,
1173 IN AFSDirectoryCB *DirectoryCB);
1176 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1179 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1182 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1183 IN GUID *AuthGroup);
1186 AFSIsVolumeFID( IN AFSFileID *FileID);
1189 AFSIsFinalNode( IN AFSFcb *Fcb);
1192 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1193 IN AFSDirEnumEntry *DirEnumEntry);
1196 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1198 IN BOOLEAN FastCall);
1201 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1202 IN UNICODE_STRING *SecondaryName);
1205 AFSInitializeSpecialShareNameList( void);
1208 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1211 AFSWaitOnQueuedReleases( void);
1214 AFSIsEqualFID( IN AFSFileID *FileId1,
1215 IN AFSFileID *FileId2);
1218 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1221 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1224 AFSIsRelativeName( IN UNICODE_STRING *Name);
1227 AFSUpdateName( IN UNICODE_STRING *Name);
1230 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1231 IN OUT ULONG *Flags,
1232 IN WCHAR *NameBuffer,
1233 IN USHORT NameLength);
1236 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1237 IN ULONG InitialElementCount);
1240 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1241 IN UNICODE_STRING *Path,
1242 IN AFSDirectoryCB *DirectoryCB);
1245 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1246 IN AFSNameArrayHdr *RelatedNameArray,
1247 IN AFSDirectoryCB *DirectoryCB);
1250 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1253 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1254 IN AFSDirectoryCB *DirEntry);
1257 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1260 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1263 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1264 IN AFSDirectoryCB *DirEntry);
1267 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1270 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1273 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1276 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1279 AFSVerifyVolume( IN ULONGLONG ProcessId,
1280 IN AFSVolumeCB *VolumeCB);
1283 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1286 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1287 IN AFSDirectoryCB *DirectoryCB,
1288 IN UNICODE_STRING *ParentPathName,
1289 IN AFSNameArrayHdr *RelatedNameArray,
1291 OUT AFSFileInfoCB *FileInfo);
1294 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1295 IN ULONGLONG HashIndex);
1298 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1301 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1302 OUT AFSDirectoryCB **TargetDirEntry);
1305 AFSCleanupFcb( IN AFSFcb *Fcb,
1306 IN BOOLEAN ForceFlush);
1309 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1310 IN UNICODE_STRING *NewFileName);
1313 AFSReadCacheFile( IN void *ReadBuffer,
1314 IN LARGE_INTEGER *ReadOffset,
1315 IN ULONG RequestedDataLength,
1316 IN OUT PULONG BytesRead);
1319 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1324 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1327 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1328 IN AFSDirectoryCB *DirEntry);
1331 AFSGetAuthenticationId( void);
1334 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1338 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1341 AFSReferenceCacheFileObject( void);
1344 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1347 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1350 AFSCloseLibrary( void);
1353 AFSDefaultLogMsg( IN ULONG Subsystem,
1359 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1360 IN ULONG InputBufferLength,
1361 IN AFSStatusInfoCB *StatusInfo,
1362 OUT ULONG *ReturnLength);
1365 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1366 IN UNICODE_STRING *ComponentName);
1369 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1370 OUT UNICODE_STRING *ComponentName);
1373 AFSDumpTraceFiles_Default( void);
1376 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1377 IN SIZE_T NumberOfBytes,
1381 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1384 AFSCreateDefaultSecurityDescriptor( void);
1387 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1388 OUT UNICODE_STRING *ParentPath);
1391 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1392 IN AFSObjectInfoCB *ObjectInfo,
1393 IN BOOLEAN WriteAccess,
1394 OUT GUID *AuthGroup);
1397 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1398 IN ULONG InvalidateReason);
1401 // AFSWorker.cpp Prototypes
1405 AFSInitializeWorkerPool( void);
1408 AFSRemoveWorkerPool( void);
1411 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1412 IN PKSTART_ROUTINE WorkerRoutine);
1415 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1418 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1421 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1424 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1427 AFSWorkerThread( IN PVOID Context);
1430 AFSIOWorkerThread( IN PVOID Context);
1433 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1436 AFSVolumeWorkerThread( IN PVOID Context);
1439 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1442 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1445 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1448 AFSRemoveWorkItem( void);
1451 AFSRemoveIOWorkItem( void);
1454 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1457 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1460 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1463 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1466 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1467 IN GUID *AuthGroup);
1470 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1472 IN HANDLE CallerProcess);
1475 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1477 IN HANDLE CallerProcess);
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 */