2 * Copyright (c) 2008, 2009, 2010, 2011 Kernel Drivers, LLC.
3 * Copyright (c) 2009, 2010, 2011 Your File System, Inc.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * - Redistributions of source code must retain the above copyright notice,
11 * this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
14 * this list of conditions and the following disclaimer in the
16 * and/or other materials provided with the distribution.
17 * - Neither the names of Kernel Drivers, LLC and Your File System, Inc.
18 * nor the names of their contributors may be used to endorse or promote
19 * products derived from this software without specific prior written
20 * permission from Kernel Drivers, LLC and Your File System, Inc.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
25 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
26 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45 #define AFS_KERNEL_MODE
48 #include <wdmsec.h> // for IoCreateDeviceSecure
51 #include "AFSDefines.h"
53 #include "AFSUserDefines.h"
55 #include "AFSUserIoctl.h"
57 #include "AFSUserStructs.h"
59 #include "AFSRedirCommonDefines.h"
61 #include "AFSRedirCommonStructs.h"
63 #include "AFSStructs.h"
65 #include "AFSProvider.h"
68 #include "AFSExtern.h"
72 #include "ntstrsafe.h"
75 ZwQueryInformationProcess(
76 __in HANDLE ProcessHandle,
77 __in PROCESSINFOCLASS ProcessInformationClass,
78 __out PVOID ProcessInformation,
79 __in ULONG ProcessInformationLength,
80 __out_opt PULONG ReturnLength
86 RtlAbsoluteToSelfRelativeSD( IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
87 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
88 IN OUT PULONG BufferLength );
90 #ifndef FILE_OPEN_REPARSE_POINT
91 #define FILE_OPEN_REPARSE_POINT 0x00200000
94 // AFSBTreeSupport.cpp Prototypes
98 AFSLocateCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
100 IN OUT AFSDirectoryCB **DirEntry);
103 AFSLocateCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
105 IN OUT AFSDirectoryCB **DirEntry);
108 AFSInsertCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
109 IN AFSDirectoryCB *DirEntry);
112 AFSInsertCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
113 IN AFSDirectoryCB *DirEntry);
116 AFSRemoveCaseSensitiveDirEntry( IN AFSDirectoryCB **RootNode,
117 IN AFSDirectoryCB *DirEntry);
120 AFSRemoveCaseInsensitiveDirEntry( IN AFSDirectoryCB **RootNode,
121 IN AFSDirectoryCB *DirEntry);
124 AFSLocateShortNameDirEntry( IN AFSDirectoryCB *RootNode,
126 IN OUT AFSDirectoryCB **DirEntry);
129 AFSInsertShortNameDirEntry( IN AFSDirectoryCB *RootNode,
130 IN AFSDirectoryCB *DirEntry);
133 AFSRemoveShortNameDirEntry( IN AFSDirectoryCB **RootNode,
134 IN AFSDirectoryCB *DirEntry);
137 AFSLocateHashEntry( IN AFSBTreeEntry *TopNode,
138 IN ULONGLONG HashIndex,
139 IN OUT AFSBTreeEntry **TreeEntry);
142 AFSInsertHashEntry( IN AFSBTreeEntry *TopNode,
143 IN AFSBTreeEntry *FileIDEntry);
146 AFSRemoveHashEntry( IN AFSBTreeEntry **TopNode,
147 IN AFSBTreeEntry *FileIDEntry);
150 // AFSInit.cpp Prototypes
154 DriverEntry( IN PDRIVER_OBJECT DriverObj,
155 IN PUNICODE_STRING RegPath);
158 AFSUnload( IN PDRIVER_OBJECT DriverObject);
161 // AFSCommSupport.cpp Prototypes
165 AFSEnumerateDirectory( IN GUID *AuthGroup,
166 IN AFSObjectInfoCB *ObjectInfoCB,
167 IN BOOLEAN FastQuery);
170 AFSEnumerateDirectoryNoResponse( IN GUID *AuthGroup,
171 IN AFSFileID *FileId);
174 AFSVerifyDirectoryContent( IN AFSObjectInfoCB *ObjectInfo,
178 AFSNotifyFileCreate( IN GUID *AuthGroup,
179 IN AFSObjectInfoCB *ParentObjectInfo,
180 IN PLARGE_INTEGER FileSize,
181 IN ULONG FileAttributes,
182 IN UNICODE_STRING *FileName,
183 OUT AFSDirectoryCB **DirNode);
186 AFSUpdateFileInformation( IN AFSFileID *ParentFid,
187 IN AFSObjectInfoCB *ObjectInfo,
191 AFSNotifyDelete( IN AFSDirectoryCB *DirectoryCB,
193 IN BOOLEAN CheckOnly);
196 AFSNotifyRename( IN AFSObjectInfoCB *ObjectInfo,
198 IN AFSObjectInfoCB *ParentObjectInfo,
199 IN AFSObjectInfoCB *TargetParentObjectInfo,
200 IN AFSDirectoryCB *DirectoryCB,
201 IN UNICODE_STRING *TargetName,
202 OUT AFSFileID *UpdatedFID);
205 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
208 OUT AFSDirEnumEntry **DirEnumEntry);
211 AFSEvaluateTargetByName( IN GUID *AuthGroup,
212 IN AFSObjectInfoCB *ParentObjectInfo,
213 IN PUNICODE_STRING SourceName,
214 OUT AFSDirEnumEntry **DirEnumEntry);
217 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
218 IN AFSFileID *FileID,
219 OUT AFSVolumeInfoCB *VolumeInformation);
222 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
223 IN ULONG InputLength,
224 IN ULONG OutputLength,
225 IN void *InputDataBuffer,
226 OUT void *OutputDataBuffer,
227 OUT ULONG *BytesReturned);
230 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
231 IN ULONG InformationClass,
232 IN ULONG InputLength,
233 IN void *DataBuffer);
236 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
237 IN ULONG InformationClass,
238 IN ULONG OutputLength,
240 OUT ULONG *BytesReturned);
243 AFSReleaseFid( IN AFSFileID *FileId);
246 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
247 IN LARGE_INTEGER *ExtentOffset,
251 // AFSCreate.cpp Prototypes
255 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
259 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
263 AFSOpenRedirector( IN PIRP Irp,
268 AFSOpenAFSRoot( IN PIRP Irp,
273 AFSOpenRoot( IN PIRP Irp,
274 IN AFSVolumeCB *VolumeCB,
280 AFSProcessCreate( IN PIRP Irp,
282 IN AFSVolumeCB *VolumeCB,
283 IN AFSDirectoryCB *ParentDirCB,
284 IN PUNICODE_STRING FileName,
285 IN PUNICODE_STRING ComponentName,
286 IN PUNICODE_STRING FullFileName,
291 AFSOpenTargetDirectory( IN PIRP Irp,
292 IN AFSVolumeCB *VolumeCB,
293 IN AFSDirectoryCB *ParentDirectoryCB,
294 IN AFSDirectoryCB *TargetDirectoryCB,
295 IN UNICODE_STRING *TargetName,
300 AFSProcessOpen( IN PIRP Irp,
302 IN AFSVolumeCB *VolumeCB,
303 IN AFSDirectoryCB *ParentDirCB,
304 IN AFSDirectoryCB *DirectoryCB,
309 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
311 IN AFSVolumeCB *VolumeCB,
313 IN AFSDirectoryCB *ParentDirCB,
314 IN AFSDirectoryCB *DirectoryCB,
319 AFSControlDeviceCreate( IN PIRP Irp);
322 AFSOpenIOCtlFcb( IN PIRP Irp,
324 IN AFSDirectoryCB *ParentDirCB,
329 AFSOpenSpecialShareFcb( IN PIRP Irp,
331 IN AFSDirectoryCB *DirectoryCB,
336 // AFSExtentsSupport.cpp Prototypes
339 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
342 AFSExtentForOffset( IN AFSFcb *Fcb,
343 IN PLARGE_INTEGER Offset,
344 IN BOOLEAN ReturnPrevious);
346 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
350 AFSRequestExtents( IN AFSFcb *Fcb,
352 IN PLARGE_INTEGER Offset,
354 OUT BOOLEAN *FullyMApped);
356 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
357 IN PLARGE_INTEGER Offset,
359 IN OUT AFSExtent **FirstExtent,
360 OUT AFSExtent **LastExtent);
363 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
365 IN PLARGE_INTEGER Offset,
369 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
373 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
376 AFSProcessReleaseFileExtents( IN PIRP Irp);
379 AFSProcessExtentFailure( PIRP Irp);
382 AFSProcessSetExtents( IN AFSFcb *pFcb,
384 IN AFSFileExtentCB *Result);
387 AFSFlushExtents( IN AFSFcb *pFcb,
391 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
395 AFSMarkDirty( IN AFSFcb *pFcb,
396 IN AFSExtent *StartExtent,
397 IN ULONG ExtentsCount,
398 IN LARGE_INTEGER *StartingByte);
401 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
405 AFSTrimExtents( IN AFSFcb *Fcb,
406 IN PLARGE_INTEGER FileSize);
409 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
411 IN AFSFileExtentCB *Result);
414 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
415 IN ULONG ExtentsCount);
418 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
419 IN ULONG ExtentsCount);
422 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
423 IN AFSExtent *Extent);
427 AFSSetupMD5Hash( IN AFSFcb *Fcb,
428 IN AFSExtent *StartExtent,
429 IN ULONG ExtentsCount,
430 IN void *SystemBuffer,
431 IN LARGE_INTEGER *ByteOffset,
437 // AFSIoSupp.cpp Prototypes
440 AFSGetExtents( IN AFSFcb *pFcb,
441 IN PLARGE_INTEGER Offset,
444 OUT ULONG *ExtentCount,
445 OUT ULONG *RunCount);
448 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
450 IN PVOID SystemBuffer,
451 IN OUT AFSIoRun *IoRun,
452 IN PLARGE_INTEGER Start,
455 IN OUT ULONG *RunCount);
458 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
459 IN UCHAR FunctionCode,
463 IN OUT AFSGatherIo *Gather);
466 AFSCompleteIo( IN AFSGatherIo *Gather,
470 AFSProcessExtentRun( IN PVOID SystemBuffer,
471 IN PLARGE_INTEGER Start,
474 IN BOOLEAN WriteRequest);
477 // AFSClose.cpp Prototypes
481 AFSClose( IN PDEVICE_OBJECT DeviceObject,
485 // AFSFcbSupport.cpp Prototypes
489 AFSInitFcb( IN AFSDirectoryCB *DirEntry,
490 IN OUT AFSFcb **Fcb);
493 AFSInitVolume( IN GUID *AuthGroup,
494 IN AFSFileID *RootFid,
495 OUT AFSVolumeCB **VolumeCB);
498 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
501 AFSInitRootFcb( IN ULONGLONG ProcessID,
502 IN AFSVolumeCB *VolumeCB);
505 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
508 AFSInitCcb( IN OUT AFSCcb **Ccb);
511 AFSRemoveFcb( IN AFSFcb *Fcb);
514 AFSRemoveCcb( IN AFSFcb *Fcb,
518 AFSInsertCcb( IN AFSFcb *Fcb,
522 // AFSNameSupport.cpp Prototypes
526 AFSLocateNameEntry( IN GUID *AuthGroup,
527 IN PFILE_OBJECT FileObject,
528 IN UNICODE_STRING *RootPathName,
529 IN UNICODE_STRING *ParsedPathName,
530 IN AFSNameArrayHdr *NameArray,
532 OUT AFSVolumeCB **VolumeCB,
533 IN OUT AFSDirectoryCB **ParentDirectoryCB,
534 OUT AFSDirectoryCB **DirectoryCB,
535 OUT PUNICODE_STRING ComponentName);
538 AFSCreateDirEntry( IN GUID *AuthGroup,
539 IN AFSObjectInfoCB *ParentObjectInfo,
540 IN AFSDirectoryCB *ParentDirCB,
541 IN PUNICODE_STRING FileName,
542 IN PUNICODE_STRING ComponentName,
544 IN OUT AFSDirectoryCB **DirEntry);
547 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
548 IN AFSDirectoryCB *DirEntry,
549 IN BOOLEAN InsertInEnumList);
552 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
553 IN AFSDirectoryCB *DirEntry);
556 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
557 IN AFSDirectoryCB *DirEntry,
558 IN BOOLEAN RemoveFromEnumList);
561 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
562 IN OUT PUNICODE_STRING TargetFileName);
565 AFSParseName( IN PIRP Irp,
567 OUT PUNICODE_STRING FileName,
568 OUT PUNICODE_STRING ParsedFileName,
569 OUT PUNICODE_STRING RootFileName,
570 OUT ULONG *ParseFlags,
571 OUT AFSVolumeCB **VolumeCB,
572 OUT AFSDirectoryCB **ParentDirectoryCB,
573 OUT AFSNameArrayHdr **NameArray);
576 AFSCheckCellName( IN GUID *AuthGroup,
577 IN UNICODE_STRING *CellName,
578 OUT AFSDirectoryCB **ShareDirEntry);
581 AFSBuildMountPointTarget( IN GUID *AuthGroup,
582 IN AFSDirectoryCB *DirectoryCB,
583 OUT AFSVolumeCB **VolumeCB);
586 AFSBuildRootVolume( IN GUID *AuthGroup,
587 IN AFSFileID *FileId,
588 OUT AFSVolumeCB **TargetVolumeCB);
591 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
592 IN PFILE_OBJECT FileObject,
593 IN UNICODE_STRING *RemainingPath,
597 // AFSNetworkProviderSupport.cpp
601 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
602 IN OUT PULONG ResultStatus,
603 IN OUT ULONG_PTR *ReturnOutputBufferLength);
606 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
607 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
608 IN OUT ULONG_PTR *ReturnOutputBufferLength);
611 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
612 IN OUT WCHAR *RemoteName,
613 IN ULONG RemoteNameBufferLength,
614 IN OUT ULONG_PTR *ReturnOutputBufferLength);
617 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
618 IN ULONG ConnectionBufferLength,
619 IN OUT ULONG_PTR *ReturnOutputBufferLength);
622 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
623 IN ULONG DisplayType);
625 AFSProviderConnectionCB *
626 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
629 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
630 IN AFSProviderConnectionCB *RootConnection,
631 IN ULONG BufferLength,
632 OUT PULONG CopiedLength);
635 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
636 IN ULONG BufferLength,
637 IN OUT ULONG_PTR *ReturnOutputBufferLength);
640 AFSIsDriveMapped( IN WCHAR DriveMapping);
643 // AFSRead.cpp Prototypes
647 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
649 IN HANDLE OnBehalfOf);
652 AFSRead( IN PDEVICE_OBJECT DeviceObject,
657 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
661 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
665 // AFSWrite.cpp Prototypes
669 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
671 IN HANDLE CallingUser);
674 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
678 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
682 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
686 // AFSFileInfo.cpp Prototypes
690 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
694 AFSQueryBasicInfo( IN PIRP Irp,
695 IN AFSDirectoryCB *DirectoryCB,
696 IN OUT PFILE_BASIC_INFORMATION Buffer,
697 IN OUT PLONG Length);
700 AFSQueryStandardInfo( IN PIRP Irp,
701 IN AFSDirectoryCB *DirectoryCB,
702 IN OUT PFILE_STANDARD_INFORMATION Buffer,
703 IN OUT PLONG Length);
706 AFSQueryInternalInfo( IN PIRP Irp,
708 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
709 IN OUT PLONG Length);
712 AFSQueryEaInfo( IN PIRP Irp,
713 IN AFSDirectoryCB *DirectoryCB,
714 IN OUT PFILE_EA_INFORMATION Buffer,
715 IN OUT PLONG Length);
718 AFSQueryPositionInfo( IN PIRP Irp,
720 IN OUT PFILE_POSITION_INFORMATION Buffer,
721 IN OUT PLONG Length);
724 AFSQueryNameInfo( IN PIRP Irp,
725 IN AFSDirectoryCB *DirectoryCB,
726 IN OUT PFILE_NAME_INFORMATION Buffer,
727 IN OUT PLONG Length);
730 AFSQueryShortNameInfo( IN PIRP Irp,
731 IN AFSDirectoryCB *DirectoryCB,
732 IN OUT PFILE_NAME_INFORMATION Buffer,
733 IN OUT PLONG Length);
736 AFSQueryNetworkInfo( IN PIRP Irp,
737 IN AFSDirectoryCB *DirectoryCB,
738 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
739 IN OUT PLONG Length);
742 AFSQueryStreamInfo( IN PIRP Irp,
743 IN AFSDirectoryCB *DirectoryCB,
744 IN OUT FILE_STREAM_INFORMATION *Buffer,
745 IN OUT PLONG Length);
748 AFSQueryAccess( IN PIRP Irp,
750 IN OUT PFILE_ACCESS_INFORMATION Buffer,
751 IN OUT PLONG Length);
754 AFSQueryMode( IN PIRP Irp,
756 IN OUT PFILE_MODE_INFORMATION Buffer,
757 IN OUT PLONG Length);
760 AFSQueryAlignment( IN PIRP Irp,
762 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
763 IN OUT PLONG Length);
766 AFSQueryAttribTagInfo( IN PIRP Irp,
767 IN AFSDirectoryCB *DirectoryCB,
768 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
769 IN OUT PLONG Length);
772 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
773 IN AFSDirectoryCB *DirectoryCB,
774 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
775 IN OUT PLONG Length);
778 AFSQueryPhysicalNameInfo( IN PIRP Irp,
779 IN AFSDirectoryCB *DirectoryCB,
780 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
781 IN OUT PLONG Length);
784 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
788 AFSSetBasicInfo( IN PIRP Irp,
789 IN AFSDirectoryCB *DirectoryCB);
792 AFSSetDispositionInfo( IN PIRP Irp,
793 IN AFSDirectoryCB *DirectoryCB);
796 AFSSetRenameInfo( IN PIRP Irp);
799 AFSSetPositionInfo( IN PIRP Irp,
800 IN AFSDirectoryCB *DirectoryCB);
803 AFSSetAllocationInfo( IN PIRP Irp,
804 IN AFSDirectoryCB *DirectoryCB);
807 AFSSetEndOfFileInfo( IN PIRP Irp,
808 IN AFSDirectoryCB *DirectoryCB);
811 AFSProcessShareSetInfo( IN IRP *Irp,
816 AFSProcessShareQueryInfo( IN IRP *Irp,
821 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
824 IN OUT LONG *Length);
827 // AFSEa.cpp Prototypes
831 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
835 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
839 // AFSFlushBuffers.cpp Prototypes
843 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
847 // AFSVolumeInfo.cpp Prototypes
851 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
855 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
859 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
860 IN PFILE_FS_VOLUME_INFORMATION Buffer,
861 IN OUT PULONG Length);
864 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
865 IN PFILE_FS_SIZE_INFORMATION Buffer,
866 IN OUT PULONG Length);
869 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
870 IN PFILE_FS_DEVICE_INFORMATION Buffer,
871 IN OUT PULONG Length);
874 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
875 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
876 IN OUT PULONG Length);
879 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
880 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
881 IN OUT PULONG Length);
884 // AFSDirControl.cpp Prototypes
888 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
892 AFSQueryDirectory( IN PIRP Irp);
895 AFSNotifyChangeDirectory( IN PIRP Irp);
898 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
902 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
907 AFSSnapshotDirectory( IN AFSFcb *Fcb,
909 IN BOOLEAN ResetIndex);
912 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
914 IN BOOLEAN WatchTree,
915 IN ULONG CompletionFilter,
919 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
921 IN ULONG NotifyFilter,
922 IN ULONG NotificationAction);
925 AFSNotifyReportChangeCallback( IN void *NotifyContext,
926 IN void *FilterContext);
929 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
933 // AFSFSControl.cpp Prototypes
937 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
941 AFSProcessUserFsRequest( IN PIRP Irp);
944 AFSProcessShareFsCtrl( IN IRP *Irp,
949 // AFSDevControl.cpp Prototypes
953 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
957 // AFSInternalDevControl.cpp Prototypes
961 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
965 // AFSShutdown.cpp Prototypes
969 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
974 AFSShutdownFilesystem( void);
977 // AFSLockControl.cpp Prototypes
981 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
985 // AFSCleanup.cpp Prototypes
989 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
993 // AFSSecurity.cpp Prototypes
997 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1001 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1005 // AFSSystemControl.cpp Prototypes
1009 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1013 // AFSQuota.cpp Prototypes
1017 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1021 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1025 // AFSGeneric.cpp Prototypes
1029 AFSExceptionFilter( IN ULONG Code,
1030 IN PEXCEPTION_POINTERS ExceptPtrs);
1033 AFSAcquireExcl( IN PERESOURCE Resource,
1037 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1041 AFSAcquireShared( IN PERESOURCE Resource,
1045 AFSReleaseResource( IN PERESOURCE Resource);
1048 AFSConvertToShared( IN PERESOURCE Resource);
1051 AFSCompleteRequest( IN PIRP Irp,
1055 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1056 IN BOOLEAN UpperCaseName);
1059 AFSLockSystemBuffer( IN PIRP Irp,
1063 AFSLockUserBuffer( IN void *UserBuffer,
1064 IN ULONG BufferLength,
1068 AFSMapToService( IN PIRP Irp,
1069 IN ULONG ByteCount);
1072 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1076 AFSInitializeLibraryDevice( void);
1079 AFSRemoveLibraryDevice( void);
1082 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1086 AFSInitializeGlobalDirectoryEntries( void);
1089 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1090 IN PUNICODE_STRING FileName,
1091 IN PUNICODE_STRING TargetName,
1092 IN AFSDirEnumEntry *DirEnumEntry,
1093 IN ULONG FileIndex);
1096 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1097 IN BOOLEAN DirectoryEntry);
1100 AFSEvaluateNode( IN GUID *AuthGroup,
1101 IN AFSDirectoryCB *DirEntry);
1104 AFSValidateSymLink( IN GUID *AuthGroup,
1105 IN AFSDirectoryCB *DirEntry);
1108 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1111 AFSIsChildOfParent( IN AFSFcb *Dcb,
1116 AFSCreateHighIndex( IN AFSFileID *FileID);
1120 AFSCreateLowIndex( IN AFSFileID *FileID);
1123 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1124 IN ACCESS_MASK GrantedAccess,
1125 IN BOOLEAN DirectoryEntry);
1128 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1131 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1132 IN UNICODE_STRING *SubstituteName,
1133 IN ULONG StringIndex);
1136 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1137 IN OUT UNICODE_STRING *ComponentName,
1138 IN UNICODE_STRING *SubstituteName,
1139 IN OUT UNICODE_STRING *RemainingPath,
1140 IN BOOLEAN FreePathName);
1143 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1147 AFSVerifyEntry( IN GUID *AuthGroup,
1148 IN AFSDirectoryCB *DirectoryCB);
1151 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1154 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1157 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1158 IN GUID *AuthGroup);
1161 AFSIsVolumeFID( IN AFSFileID *FileID);
1164 AFSIsFinalNode( IN AFSFcb *Fcb);
1167 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1168 IN AFSDirEnumEntry *DirEnumEntry);
1171 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1173 IN BOOLEAN PurgeContent,
1174 IN BOOLEAN FastCall);
1177 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1178 IN UNICODE_STRING *SecondaryName);
1181 AFSInitializeSpecialShareNameList( void);
1184 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1187 AFSWaitOnQueuedReleases( void);
1190 AFSIsEqualFID( IN AFSFileID *FileId1,
1191 IN AFSFileID *FileId2);
1194 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1197 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1200 AFSIsRelativeName( IN UNICODE_STRING *Name);
1203 AFSUpdateName( IN UNICODE_STRING *Name);
1206 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1207 IN OUT ULONG *Flags,
1208 IN WCHAR *NameBuffer,
1209 IN USHORT NameLength);
1212 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1213 IN ULONG InitialElementCount);
1216 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1217 IN UNICODE_STRING *Path,
1218 IN AFSDirectoryCB *DirectoryCB);
1221 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1222 IN AFSNameArrayHdr *RelatedNameArray,
1223 IN AFSDirectoryCB *DirectoryCB);
1226 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1229 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1230 IN AFSDirectoryCB *DirEntry);
1233 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1234 IN AFSDirectoryCB *DirectoryCB);
1237 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1240 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1243 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1244 IN AFSDirectoryCB *DirEntry);
1247 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1250 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1253 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1256 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1259 AFSVerifyVolume( IN ULONGLONG ProcessId,
1260 IN AFSVolumeCB *VolumeCB);
1263 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1266 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1267 IN AFSDirectoryCB *DirectoryCB,
1268 IN UNICODE_STRING *ParentPathName,
1269 IN AFSNameArrayHdr *RelatedNameArray,
1271 OUT AFSFileInfoCB *FileInfo);
1274 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1275 IN ULONGLONG HashIndex);
1278 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1281 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1282 OUT AFSDirectoryCB **TargetDirEntry);
1285 AFSCleanupFcb( IN AFSFcb *Fcb,
1286 IN BOOLEAN ForceFlush);
1289 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1290 IN UNICODE_STRING *NewFileName);
1293 AFSReadCacheFile( IN void *ReadBuffer,
1294 IN LARGE_INTEGER *ReadOffset,
1295 IN ULONG RequestedDataLength,
1296 IN OUT PULONG BytesRead);
1299 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1304 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1307 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1308 IN AFSDirectoryCB *DirEntry);
1311 AFSGetAuthenticationId( void);
1314 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1318 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1321 AFSReferenceCacheFileObject( void);
1324 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1327 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1330 AFSCloseLibrary( void);
1333 AFSDefaultLogMsg( IN ULONG Subsystem,
1339 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1340 IN ULONG InputBufferLength,
1341 IN AFSStatusInfoCB *StatusInfo,
1342 OUT ULONG *ReturnLength);
1345 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1346 IN UNICODE_STRING *ComponentName);
1349 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1350 OUT UNICODE_STRING *ComponentName);
1353 AFSDumpTraceFiles_Default( void);
1356 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1357 IN SIZE_T NumberOfBytes,
1361 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1364 AFSCreateDefaultSecurityDescriptor( void);
1367 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1368 OUT UNICODE_STRING *ParentPath);
1371 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1372 IN AFSObjectInfoCB *ObjectInfo,
1373 IN BOOLEAN WriteAccess,
1374 OUT GUID *AuthGroup);
1377 // AFSWorker.cpp Prototypes
1381 AFSInitializeWorkerPool( void);
1384 AFSRemoveWorkerPool( void);
1387 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1388 IN PKSTART_ROUTINE WorkerRoutine);
1391 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1394 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1397 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1400 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1403 AFSWorkerThread( IN PVOID Context);
1406 AFSIOWorkerThread( IN PVOID Context);
1409 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1412 AFSVolumeWorkerThread( IN PVOID Context);
1415 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1418 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1421 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1424 AFSRemoveWorkItem( void);
1427 AFSRemoveIOWorkItem( void);
1430 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1433 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1436 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1439 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1442 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1443 IN GUID *AuthGroup);
1446 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1448 IN HANDLE CallerProcess);
1451 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1453 IN HANDLE CallerProcess);
1456 AFSQueueGlobalRootEnumeration( void);
1459 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1462 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1463 IN UCHAR FunctionCode,
1464 IN ULONG RequestFLags,
1465 IN AFSIoRun *IoRuns,
1467 IN AFSGatherIo *GatherIo);
1470 // AFSMD5Support.cpp Prototypes
1474 AFSGenerateMD5( IN char *DataBuffer,
1476 OUT UCHAR *MD5Digest);
1480 #endif /* _AFS_COMMON_H */