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,
192 IN BOOLEAN CheckOnly);
195 AFSNotifyRename( IN AFSObjectInfoCB *ObjectInfo,
196 IN AFSObjectInfoCB *ParentObjectInfo,
197 IN AFSObjectInfoCB *TargetParentObjectInfo,
198 IN AFSDirectoryCB *DirectoryCB,
199 IN UNICODE_STRING *TargetName,
200 OUT AFSFileID *UpdatedFID);
203 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
206 OUT AFSDirEnumEntry **DirEnumEntry);
209 AFSEvaluateTargetByName( IN GUID *AuthGroup,
210 IN AFSFileID *ParentFileId,
211 IN PUNICODE_STRING SourceName,
212 OUT AFSDirEnumEntry **DirEnumEntry);
215 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
216 IN AFSFileID *FileID,
217 OUT AFSVolumeInfoCB *VolumeInformation);
220 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
221 IN ULONG InputLength,
222 IN ULONG OutputLength,
223 IN void *InputDataBuffer,
224 OUT void *OutputDataBuffer,
225 OUT ULONG *BytesReturned);
228 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
229 IN ULONG InformationClass,
230 IN ULONG InputLength,
231 IN void *DataBuffer);
234 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
235 IN ULONG InformationClass,
236 IN ULONG OutputLength,
238 OUT ULONG *BytesReturned);
241 AFSReleaseFid( IN AFSFileID *FileId);
244 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
245 IN LARGE_INTEGER *ExtentOffset,
249 // AFSCreate.cpp Prototypes
253 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
257 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
261 AFSOpenRedirector( IN PIRP Irp,
266 AFSOpenAFSRoot( IN PIRP Irp,
271 AFSOpenRoot( IN PIRP Irp,
272 IN AFSVolumeCB *VolumeCB,
278 AFSProcessCreate( IN PIRP Irp,
280 IN AFSVolumeCB *VolumeCB,
281 IN AFSDirectoryCB *ParentDirCB,
282 IN PUNICODE_STRING FileName,
283 IN PUNICODE_STRING ComponentName,
284 IN PUNICODE_STRING FullFileName,
289 AFSOpenTargetDirectory( IN PIRP Irp,
290 IN AFSVolumeCB *VolumeCB,
291 IN AFSDirectoryCB *ParentDirectoryCB,
292 IN AFSDirectoryCB *TargetDirectoryCB,
293 IN UNICODE_STRING *TargetName,
298 AFSProcessOpen( IN PIRP Irp,
300 IN AFSVolumeCB *VolumeCB,
301 IN AFSDirectoryCB *ParentDirCB,
302 IN AFSDirectoryCB *DirectoryCB,
307 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
309 IN AFSVolumeCB *VolumeCB,
311 IN AFSDirectoryCB *ParentDirCB,
312 IN AFSDirectoryCB *DirectoryCB,
317 AFSControlDeviceCreate( IN PIRP Irp);
320 AFSOpenIOCtlFcb( IN PIRP Irp,
322 IN AFSDirectoryCB *ParentDirCB,
327 AFSOpenSpecialShareFcb( IN PIRP Irp,
329 IN AFSDirectoryCB *DirectoryCB,
334 // AFSExtentsSupport.cpp Prototypes
337 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
340 AFSExtentForOffset( IN AFSFcb *Fcb,
341 IN PLARGE_INTEGER Offset,
342 IN BOOLEAN ReturnPrevious);
344 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
348 AFSRequestExtents( IN AFSFcb *Fcb,
349 IN PLARGE_INTEGER Offset,
351 OUT BOOLEAN *FullyMApped);
353 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
354 IN PLARGE_INTEGER Offset,
356 IN OUT AFSExtent **FirstExtent,
357 OUT AFSExtent **LastExtent);
360 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
361 IN PLARGE_INTEGER Offset,
365 AFSWaitForExtentMapping ( IN AFSFcb *Fcb );
368 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
371 AFSProcessReleaseFileExtents( IN PIRP Irp);
374 AFSProcessExtentFailure( PIRP Irp);
377 AFSProcessSetExtents( IN AFSFcb *pFcb,
379 IN AFSFileExtentCB *Result);
382 AFSFlushExtents( IN AFSFcb *pFcb);
385 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb);
388 AFSMarkDirty( IN AFSFcb *pFcb,
389 IN AFSExtent *StartExtent,
390 IN ULONG ExtentsCount,
391 IN LARGE_INTEGER *StartingByte);
394 AFSTearDownFcbExtents( IN AFSFcb *Fcb ) ;
397 AFSTrimExtents( IN AFSFcb *Fcb,
398 IN PLARGE_INTEGER FileSize);
401 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
403 IN AFSFileExtentCB *Result);
406 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
407 IN ULONG ExtentsCount);
410 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
411 IN ULONG ExtentsCount);
414 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
415 IN AFSExtent *Extent);
419 AFSSetupMD5Hash( IN AFSFcb *Fcb,
420 IN AFSExtent *StartExtent,
421 IN ULONG ExtentsCount,
422 IN void *SystemBuffer,
423 IN LARGE_INTEGER *ByteOffset,
429 // AFSIoSupp.cpp Prototypes
432 AFSGetExtents( IN AFSFcb *pFcb,
433 IN PLARGE_INTEGER Offset,
436 OUT ULONG *ExtentCount,
437 OUT ULONG *RunCount);
440 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
442 IN PVOID SystemBuffer,
443 IN OUT AFSIoRun *IoRun,
444 IN PLARGE_INTEGER Start,
447 IN OUT ULONG *RunCount);
450 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
451 IN UCHAR FunctionCode,
455 IN OUT AFSGatherIo *Gather);
458 AFSCompleteIo( IN AFSGatherIo *Gather,
462 AFSProcessExtentRun( IN PVOID SystemBuffer,
463 IN PLARGE_INTEGER Start,
466 IN BOOLEAN WriteRequest);
469 // AFSClose.cpp Prototypes
473 AFSClose( IN PDEVICE_OBJECT DeviceObject,
477 // AFSFcbSupport.cpp Prototypes
481 AFSInitFcb( IN AFSDirectoryCB *DirEntry,
482 IN OUT AFSFcb **Fcb);
485 AFSInitVolume( IN GUID *AuthGroup,
486 IN AFSFileID *RootFid,
487 OUT AFSVolumeCB **VolumeCB);
490 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
493 AFSInitRootFcb( IN ULONGLONG ProcessID,
494 IN AFSVolumeCB *VolumeCB);
497 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
500 AFSInitCcb( IN OUT AFSCcb **Ccb);
503 AFSRemoveFcb( IN AFSFcb *Fcb);
506 AFSRemoveCcb( IN AFSCcb *Ccb);
509 // AFSNameSupport.cpp Prototypes
513 AFSLocateNameEntry( IN GUID *AuthGroup,
514 IN PFILE_OBJECT FileObject,
515 IN UNICODE_STRING *RootPathName,
516 IN UNICODE_STRING *ParsedPathName,
517 IN AFSNameArrayHdr *NameArray,
519 OUT AFSVolumeCB **VolumeCB,
520 IN OUT AFSDirectoryCB **ParentDirectoryCB,
521 OUT AFSDirectoryCB **DirectoryCB,
522 OUT PUNICODE_STRING ComponentName);
525 AFSCreateDirEntry( IN GUID *AuthGroup,
526 IN AFSObjectInfoCB *ParentObjectInfo,
527 IN AFSDirectoryCB *ParentDirCB,
528 IN PUNICODE_STRING FileName,
529 IN PUNICODE_STRING ComponentName,
531 IN OUT AFSDirectoryCB **DirEntry);
534 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
535 IN AFSDirectoryCB *DirEntry,
536 IN BOOLEAN InsertInEnumList);
539 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
540 IN AFSDirectoryCB *DirEntry);
543 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
544 IN AFSDirectoryCB *DirEntry,
545 IN BOOLEAN RemoveFromEnumList);
548 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
549 IN OUT PUNICODE_STRING TargetFileName);
552 AFSParseName( IN PIRP Irp,
554 OUT PUNICODE_STRING FileName,
555 OUT PUNICODE_STRING ParsedFileName,
556 OUT PUNICODE_STRING RootFileName,
557 OUT ULONG *ParseFlags,
558 OUT AFSVolumeCB **VolumeCB,
559 OUT AFSDirectoryCB **ParentDirectoryCB,
560 OUT AFSNameArrayHdr **NameArray);
563 AFSCheckCellName( IN GUID *AuthGroup,
564 IN UNICODE_STRING *CellName,
565 OUT AFSDirectoryCB **ShareDirEntry);
568 AFSBuildMountPointTarget( IN GUID *AuthGroup,
569 IN AFSDirectoryCB *DirectoryCB,
570 OUT AFSVolumeCB **VolumeCB);
573 AFSBuildRootVolume( IN GUID *AuthGroup,
574 IN AFSFileID *FileId,
575 OUT AFSVolumeCB **TargetVolumeCB);
578 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
579 IN PFILE_OBJECT FileObject,
580 IN UNICODE_STRING *RemainingPath);
583 // AFSNetworkProviderSupport.cpp
587 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
588 IN OUT PULONG ResultStatus,
589 IN OUT ULONG_PTR *ReturnOutputBufferLength);
592 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
593 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
594 IN OUT ULONG_PTR *ReturnOutputBufferLength);
597 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
598 IN OUT WCHAR *RemoteName,
599 IN ULONG RemoteNameBufferLength,
600 IN OUT ULONG_PTR *ReturnOutputBufferLength);
603 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
604 IN ULONG ConnectionBufferLength,
605 IN OUT ULONG_PTR *ReturnOutputBufferLength);
608 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
609 IN ULONG DisplayType);
611 AFSProviderConnectionCB *
612 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
615 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
616 IN AFSProviderConnectionCB *RootConnection,
617 IN ULONG BufferLength,
618 OUT PULONG CopiedLength);
621 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
622 IN ULONG BufferLength,
623 IN OUT ULONG_PTR *ReturnOutputBufferLength);
626 AFSIsDriveMapped( IN WCHAR DriveMapping);
629 // AFSRead.cpp Prototypes
633 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
635 IN HANDLE OnBehalfOf);
638 AFSRead( IN PDEVICE_OBJECT DeviceObject,
643 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
647 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
651 // AFSWrite.cpp Prototypes
655 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
657 IN HANDLE CallingUser);
660 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
664 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
668 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
672 // AFSFileInfo.cpp Prototypes
676 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
680 AFSQueryBasicInfo( IN PIRP Irp,
681 IN AFSDirectoryCB *DirectoryCB,
682 IN OUT PFILE_BASIC_INFORMATION Buffer,
683 IN OUT PLONG Length);
686 AFSQueryStandardInfo( IN PIRP Irp,
687 IN AFSDirectoryCB *DirectoryCB,
688 IN OUT PFILE_STANDARD_INFORMATION Buffer,
689 IN OUT PLONG Length);
692 AFSQueryInternalInfo( IN PIRP Irp,
694 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
695 IN OUT PLONG Length);
698 AFSQueryEaInfo( IN PIRP Irp,
699 IN AFSDirectoryCB *DirectoryCB,
700 IN OUT PFILE_EA_INFORMATION Buffer,
701 IN OUT PLONG Length);
704 AFSQueryPositionInfo( IN PIRP Irp,
706 IN OUT PFILE_POSITION_INFORMATION Buffer,
707 IN OUT PLONG Length);
710 AFSQueryNameInfo( IN PIRP Irp,
711 IN AFSDirectoryCB *DirectoryCB,
712 IN OUT PFILE_NAME_INFORMATION Buffer,
713 IN OUT PLONG Length);
716 AFSQueryShortNameInfo( IN PIRP Irp,
717 IN AFSDirectoryCB *DirectoryCB,
718 IN OUT PFILE_NAME_INFORMATION Buffer,
719 IN OUT PLONG Length);
722 AFSQueryNetworkInfo( IN PIRP Irp,
723 IN AFSDirectoryCB *DirectoryCB,
724 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
725 IN OUT PLONG Length);
728 AFSQueryStreamInfo( IN PIRP Irp,
729 IN AFSDirectoryCB *DirectoryCB,
730 IN OUT FILE_STREAM_INFORMATION *Buffer,
731 IN OUT PLONG Length);
734 AFSQueryAccess( IN PIRP Irp,
736 IN OUT PFILE_ACCESS_INFORMATION Buffer,
737 IN OUT PLONG Length);
740 AFSQueryMode( IN PIRP Irp,
742 IN OUT PFILE_MODE_INFORMATION Buffer,
743 IN OUT PLONG Length);
746 AFSQueryAlignment( IN PIRP Irp,
748 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
749 IN OUT PLONG Length);
752 AFSQueryAttribTagInfo( IN PIRP Irp,
753 IN AFSDirectoryCB *DirectoryCB,
754 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
755 IN OUT PLONG Length);
758 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
759 IN AFSDirectoryCB *DirectoryCB,
760 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
761 IN OUT PLONG Length);
764 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
768 AFSSetBasicInfo( IN PIRP Irp,
769 IN AFSDirectoryCB *DirectoryCB);
772 AFSSetDispositionInfo( IN PIRP Irp,
773 IN AFSDirectoryCB *DirectoryCB);
776 AFSSetRenameInfo( IN PIRP Irp);
779 AFSSetPositionInfo( IN PIRP Irp,
780 IN AFSDirectoryCB *DirectoryCB);
783 AFSSetAllocationInfo( IN PIRP Irp,
784 IN AFSDirectoryCB *DirectoryCB);
787 AFSSetEndOfFileInfo( IN PIRP Irp,
788 IN AFSDirectoryCB *DirectoryCB);
791 AFSProcessShareSetInfo( IN IRP *Irp,
796 AFSProcessShareQueryInfo( IN IRP *Irp,
801 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
804 IN OUT LONG *Length);
807 // AFSEa.cpp Prototypes
811 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
815 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
819 // AFSFlushBuffers.cpp Prototypes
823 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
827 // AFSVolumeInfo.cpp Prototypes
831 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
835 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
839 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
840 IN PFILE_FS_VOLUME_INFORMATION Buffer,
841 IN OUT PULONG Length);
844 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
845 IN PFILE_FS_SIZE_INFORMATION Buffer,
846 IN OUT PULONG Length);
849 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
850 IN PFILE_FS_DEVICE_INFORMATION Buffer,
851 IN OUT PULONG Length);
854 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
855 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
856 IN OUT PULONG Length);
859 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
860 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
861 IN OUT PULONG Length);
864 // AFSDirControl.cpp Prototypes
868 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
872 AFSQueryDirectory( IN PIRP Irp);
875 AFSNotifyChangeDirectory( IN PIRP Irp);
878 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
882 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
887 AFSSnapshotDirectory( IN AFSFcb *Fcb,
889 IN BOOLEAN ResetIndex);
892 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
894 IN BOOLEAN WatchTree,
895 IN ULONG CompletionFilter,
899 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
901 IN ULONG NotifyFilter,
902 IN ULONG NotificationAction);
905 AFSNotifyReportChangeCallback( IN void *NotifyContext,
906 IN void *FilterContext);
909 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
913 // AFSFSControl.cpp Prototypes
917 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
921 AFSProcessUserFsRequest( IN PIRP Irp);
924 AFSProcessShareFsCtrl( IN IRP *Irp,
929 // AFSDevControl.cpp Prototypes
933 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
937 // AFSInternalDevControl.cpp Prototypes
941 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
945 // AFSShutdown.cpp Prototypes
949 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
954 AFSShutdownFilesystem( void);
957 // AFSLockControl.cpp Prototypes
961 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
965 // AFSCleanup.cpp Prototypes
969 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
973 // AFSSecurity.cpp Prototypes
977 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
981 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
985 // AFSSystemControl.cpp Prototypes
989 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
993 // AFSQuota.cpp Prototypes
997 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1001 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1005 // AFSGeneric.cpp Prototypes
1009 AFSExceptionFilter( IN ULONG Code,
1010 IN PEXCEPTION_POINTERS ExceptPtrs);
1013 AFSAcquireExcl( IN PERESOURCE Resource,
1017 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1021 AFSAcquireShared( IN PERESOURCE Resource,
1025 AFSReleaseResource( IN PERESOURCE Resource);
1028 AFSConvertToShared( IN PERESOURCE Resource);
1031 AFSCompleteRequest( IN PIRP Irp,
1035 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1036 IN BOOLEAN UpperCaseName);
1039 AFSLockSystemBuffer( IN PIRP Irp,
1043 AFSLockUserBuffer( IN void *UserBuffer,
1044 IN ULONG BufferLength,
1048 AFSMapToService( IN PIRP Irp,
1049 IN ULONG ByteCount);
1052 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1056 AFSInitializeLibraryDevice( void);
1059 AFSRemoveLibraryDevice( void);
1062 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1066 AFSInitializeGlobalDirectoryEntries( void);
1069 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1070 IN PUNICODE_STRING FileName,
1071 IN PUNICODE_STRING TargetName,
1072 IN AFSDirEnumEntry *DirEnumEntry,
1073 IN ULONG FileIndex);
1076 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1077 IN BOOLEAN DirectoryEntry);
1080 AFSEvaluateNode( IN GUID *AuthGroup,
1081 IN AFSDirectoryCB *DirEntry);
1084 AFSValidateSymLink( IN GUID *AuthGroup,
1085 IN AFSDirectoryCB *DirEntry);
1088 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1091 AFSIsChildOfParent( IN AFSFcb *Dcb,
1096 AFSCreateHighIndex( IN AFSFileID *FileID);
1100 AFSCreateLowIndex( IN AFSFileID *FileID);
1103 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1104 IN ACCESS_MASK GrantedAccess,
1105 IN BOOLEAN DirectoryEntry);
1108 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1111 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1112 IN UNICODE_STRING *SubstituteName,
1113 IN ULONG StringIndex);
1116 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1117 IN OUT UNICODE_STRING *ComponentName,
1118 IN UNICODE_STRING *SubstituteName,
1119 IN OUT UNICODE_STRING *RemainingPath,
1120 IN BOOLEAN FreePathName);
1123 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1127 AFSVerifyEntry( IN GUID *AuthGroup,
1128 IN AFSDirectoryCB *DirectoryCB);
1131 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1134 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1137 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1138 IN GUID *AuthGroup);
1141 AFSIsVolumeFID( IN AFSFileID *FileID);
1144 AFSIsFinalNode( IN AFSFcb *Fcb);
1147 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1148 IN AFSDirEnumEntry *DirEnumEntry);
1151 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1153 IN BOOLEAN PurgeContent,
1154 IN BOOLEAN FastCall);
1157 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1158 IN UNICODE_STRING *SecondaryName);
1161 AFSInitializeSpecialShareNameList( void);
1164 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1167 AFSWaitOnQueuedReleases( void);
1170 AFSIsEqualFID( IN AFSFileID *FileId1,
1171 IN AFSFileID *FileId2);
1174 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1177 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1180 AFSIsRelativeName( IN UNICODE_STRING *Name);
1183 AFSUpdateName( IN UNICODE_STRING *Name);
1186 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1187 IN OUT ULONG *Flags,
1188 IN WCHAR *NameBuffer,
1189 IN USHORT NameLength);
1192 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1193 IN ULONG InitialElementCount);
1196 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1197 IN UNICODE_STRING *Path,
1198 IN AFSDirectoryCB *DirectoryCB);
1201 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1202 IN AFSNameArrayHdr *RelatedNameArray,
1203 IN AFSDirectoryCB *DirectoryCB);
1206 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1209 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1210 IN AFSDirectoryCB *DirEntry);
1213 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1214 IN AFSDirectoryCB *DirectoryCB);
1217 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1220 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1223 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1224 IN AFSDirectoryCB *DirEntry);
1227 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1230 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1233 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1236 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1239 AFSVerifyVolume( IN ULONGLONG ProcessId,
1240 IN AFSVolumeCB *VolumeCB);
1243 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1246 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1247 IN AFSDirectoryCB *DirectoryCB,
1248 IN UNICODE_STRING *ParentPathName,
1249 IN AFSNameArrayHdr *RelatedNameArray,
1250 OUT AFSFileInfoCB *FileInfo);
1253 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1254 IN ULONGLONG HashIndex);
1257 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1260 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1261 OUT AFSDirectoryCB **TargetDirEntry);
1264 AFSCleanupFcb( IN AFSFcb *Fcb,
1265 IN BOOLEAN ForceFlush);
1268 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1269 IN UNICODE_STRING *NewFileName);
1272 AFSReadCacheFile( IN void *ReadBuffer,
1273 IN LARGE_INTEGER *ReadOffset,
1274 IN ULONG RequestedDataLength,
1275 IN OUT PULONG BytesRead);
1278 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1283 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1286 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1287 IN AFSDirectoryCB *DirEntry);
1290 AFSGetAuthenticationId( void);
1293 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1297 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1300 AFSReferenceCacheFileObject( void);
1303 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1306 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1309 AFSCloseLibrary( void);
1312 AFSDefaultLogMsg( IN ULONG Subsystem,
1318 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1319 IN ULONG InputBufferLength,
1320 IN AFSStatusInfoCB *StatusInfo,
1321 OUT ULONG *ReturnLength);
1324 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1325 IN UNICODE_STRING *ComponentName);
1328 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1329 OUT UNICODE_STRING *ComponentName);
1332 AFSDumpTraceFiles_Default( void);
1335 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1336 IN SIZE_T NumberOfBytes,
1340 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1343 AFSCreateDefaultSecurityDescriptor( void);
1346 // AFSWorker.cpp Prototypes
1350 AFSInitializeWorkerPool( void);
1353 AFSRemoveWorkerPool( void);
1356 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1357 IN PKSTART_ROUTINE WorkerRoutine);
1360 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1363 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1366 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1369 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1372 AFSWorkerThread( IN PVOID Context);
1375 AFSIOWorkerThread( IN PVOID Context);
1378 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1381 AFSVolumeWorkerThread( IN PVOID Context);
1384 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1387 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1390 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1393 AFSRemoveWorkItem( void);
1396 AFSRemoveIOWorkItem( void);
1399 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1402 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1405 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1408 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1411 AFSQueueFlushExtents( IN AFSFcb *Fcb);
1414 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1416 IN HANDLE CallerProcess);
1419 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1421 IN HANDLE CallerProcess);
1424 AFSQueueGlobalRootEnumeration( void);
1427 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1430 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1431 IN UCHAR FunctionCode,
1432 IN ULONG RequestFLags,
1433 IN AFSIoRun *IoRuns,
1435 IN AFSGatherIo *GatherIo);
1438 // AFSMD5Support.cpp Prototypes
1442 AFSGenerateMD5( IN char *DataBuffer,
1444 OUT UCHAR *MD5Digest);
1448 #endif /* _AFS_COMMON_H */