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 AFSQueryPhysicalNameInfo( IN PIRP Irp,
765 IN AFSDirectoryCB *DirectoryCB,
766 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
767 IN OUT PLONG Length);
770 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
774 AFSSetBasicInfo( IN PIRP Irp,
775 IN AFSDirectoryCB *DirectoryCB);
778 AFSSetDispositionInfo( IN PIRP Irp,
779 IN AFSDirectoryCB *DirectoryCB);
782 AFSSetRenameInfo( IN PIRP Irp);
785 AFSSetPositionInfo( IN PIRP Irp,
786 IN AFSDirectoryCB *DirectoryCB);
789 AFSSetAllocationInfo( IN PIRP Irp,
790 IN AFSDirectoryCB *DirectoryCB);
793 AFSSetEndOfFileInfo( IN PIRP Irp,
794 IN AFSDirectoryCB *DirectoryCB);
797 AFSProcessShareSetInfo( IN IRP *Irp,
802 AFSProcessShareQueryInfo( IN IRP *Irp,
807 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
810 IN OUT LONG *Length);
813 // AFSEa.cpp Prototypes
817 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
821 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
825 // AFSFlushBuffers.cpp Prototypes
829 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
833 // AFSVolumeInfo.cpp Prototypes
837 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
841 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
845 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
846 IN PFILE_FS_VOLUME_INFORMATION Buffer,
847 IN OUT PULONG Length);
850 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
851 IN PFILE_FS_SIZE_INFORMATION Buffer,
852 IN OUT PULONG Length);
855 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
856 IN PFILE_FS_DEVICE_INFORMATION Buffer,
857 IN OUT PULONG Length);
860 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
861 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
862 IN OUT PULONG Length);
865 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
866 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
867 IN OUT PULONG Length);
870 // AFSDirControl.cpp Prototypes
874 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
878 AFSQueryDirectory( IN PIRP Irp);
881 AFSNotifyChangeDirectory( IN PIRP Irp);
884 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
888 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
893 AFSSnapshotDirectory( IN AFSFcb *Fcb,
895 IN BOOLEAN ResetIndex);
898 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
900 IN BOOLEAN WatchTree,
901 IN ULONG CompletionFilter,
905 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
907 IN ULONG NotifyFilter,
908 IN ULONG NotificationAction);
911 AFSNotifyReportChangeCallback( IN void *NotifyContext,
912 IN void *FilterContext);
915 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
919 // AFSFSControl.cpp Prototypes
923 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
927 AFSProcessUserFsRequest( IN PIRP Irp);
930 AFSProcessShareFsCtrl( IN IRP *Irp,
935 // AFSDevControl.cpp Prototypes
939 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
943 // AFSInternalDevControl.cpp Prototypes
947 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
951 // AFSShutdown.cpp Prototypes
955 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
960 AFSShutdownFilesystem( void);
963 // AFSLockControl.cpp Prototypes
967 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
971 // AFSCleanup.cpp Prototypes
975 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
979 // AFSSecurity.cpp Prototypes
983 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
987 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
991 // AFSSystemControl.cpp Prototypes
995 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
999 // AFSQuota.cpp Prototypes
1003 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1007 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1011 // AFSGeneric.cpp Prototypes
1015 AFSExceptionFilter( IN ULONG Code,
1016 IN PEXCEPTION_POINTERS ExceptPtrs);
1019 AFSAcquireExcl( IN PERESOURCE Resource,
1023 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1027 AFSAcquireShared( IN PERESOURCE Resource,
1031 AFSReleaseResource( IN PERESOURCE Resource);
1034 AFSConvertToShared( IN PERESOURCE Resource);
1037 AFSCompleteRequest( IN PIRP Irp,
1041 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1042 IN BOOLEAN UpperCaseName);
1045 AFSLockSystemBuffer( IN PIRP Irp,
1049 AFSLockUserBuffer( IN void *UserBuffer,
1050 IN ULONG BufferLength,
1054 AFSMapToService( IN PIRP Irp,
1055 IN ULONG ByteCount);
1058 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1062 AFSInitializeLibraryDevice( void);
1065 AFSRemoveLibraryDevice( void);
1068 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1072 AFSInitializeGlobalDirectoryEntries( void);
1075 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1076 IN PUNICODE_STRING FileName,
1077 IN PUNICODE_STRING TargetName,
1078 IN AFSDirEnumEntry *DirEnumEntry,
1079 IN ULONG FileIndex);
1082 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1083 IN BOOLEAN DirectoryEntry);
1086 AFSEvaluateNode( IN GUID *AuthGroup,
1087 IN AFSDirectoryCB *DirEntry);
1090 AFSValidateSymLink( IN GUID *AuthGroup,
1091 IN AFSDirectoryCB *DirEntry);
1094 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1097 AFSIsChildOfParent( IN AFSFcb *Dcb,
1102 AFSCreateHighIndex( IN AFSFileID *FileID);
1106 AFSCreateLowIndex( IN AFSFileID *FileID);
1109 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1110 IN ACCESS_MASK GrantedAccess,
1111 IN BOOLEAN DirectoryEntry);
1114 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1117 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1118 IN UNICODE_STRING *SubstituteName,
1119 IN ULONG StringIndex);
1122 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1123 IN OUT UNICODE_STRING *ComponentName,
1124 IN UNICODE_STRING *SubstituteName,
1125 IN OUT UNICODE_STRING *RemainingPath,
1126 IN BOOLEAN FreePathName);
1129 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1133 AFSVerifyEntry( IN GUID *AuthGroup,
1134 IN AFSDirectoryCB *DirectoryCB);
1137 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1140 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1143 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1144 IN GUID *AuthGroup);
1147 AFSIsVolumeFID( IN AFSFileID *FileID);
1150 AFSIsFinalNode( IN AFSFcb *Fcb);
1153 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1154 IN AFSDirEnumEntry *DirEnumEntry);
1157 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1159 IN BOOLEAN PurgeContent,
1160 IN BOOLEAN FastCall);
1163 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1164 IN UNICODE_STRING *SecondaryName);
1167 AFSInitializeSpecialShareNameList( void);
1170 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1173 AFSWaitOnQueuedReleases( void);
1176 AFSIsEqualFID( IN AFSFileID *FileId1,
1177 IN AFSFileID *FileId2);
1180 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1183 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1186 AFSIsRelativeName( IN UNICODE_STRING *Name);
1189 AFSUpdateName( IN UNICODE_STRING *Name);
1192 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1193 IN OUT ULONG *Flags,
1194 IN WCHAR *NameBuffer,
1195 IN USHORT NameLength);
1198 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1199 IN ULONG InitialElementCount);
1202 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1203 IN UNICODE_STRING *Path,
1204 IN AFSDirectoryCB *DirectoryCB);
1207 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1208 IN AFSNameArrayHdr *RelatedNameArray,
1209 IN AFSDirectoryCB *DirectoryCB);
1212 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1215 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1216 IN AFSDirectoryCB *DirEntry);
1219 AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
1220 IN AFSDirectoryCB *DirectoryCB);
1223 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1226 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1229 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1230 IN AFSDirectoryCB *DirEntry);
1233 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1236 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1239 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1242 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1245 AFSVerifyVolume( IN ULONGLONG ProcessId,
1246 IN AFSVolumeCB *VolumeCB);
1249 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1252 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1253 IN AFSDirectoryCB *DirectoryCB,
1254 IN UNICODE_STRING *ParentPathName,
1255 IN AFSNameArrayHdr *RelatedNameArray,
1256 OUT AFSFileInfoCB *FileInfo);
1259 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1260 IN ULONGLONG HashIndex);
1263 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
1266 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1267 OUT AFSDirectoryCB **TargetDirEntry);
1270 AFSCleanupFcb( IN AFSFcb *Fcb,
1271 IN BOOLEAN ForceFlush);
1274 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1275 IN UNICODE_STRING *NewFileName);
1278 AFSReadCacheFile( IN void *ReadBuffer,
1279 IN LARGE_INTEGER *ReadOffset,
1280 IN ULONG RequestedDataLength,
1281 IN OUT PULONG BytesRead);
1284 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1289 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1292 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1293 IN AFSDirectoryCB *DirEntry);
1296 AFSGetAuthenticationId( void);
1299 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1303 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1306 AFSReferenceCacheFileObject( void);
1309 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1312 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1315 AFSCloseLibrary( void);
1318 AFSDefaultLogMsg( IN ULONG Subsystem,
1324 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1325 IN ULONG InputBufferLength,
1326 IN AFSStatusInfoCB *StatusInfo,
1327 OUT ULONG *ReturnLength);
1330 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1331 IN UNICODE_STRING *ComponentName);
1334 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1335 OUT UNICODE_STRING *ComponentName);
1338 AFSDumpTraceFiles_Default( void);
1341 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1342 IN SIZE_T NumberOfBytes,
1346 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1349 AFSCreateDefaultSecurityDescriptor( void);
1352 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1353 OUT UNICODE_STRING *ParentPath);
1356 // AFSWorker.cpp Prototypes
1360 AFSInitializeWorkerPool( void);
1363 AFSRemoveWorkerPool( void);
1366 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1367 IN PKSTART_ROUTINE WorkerRoutine);
1370 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1373 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1376 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1379 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1382 AFSWorkerThread( IN PVOID Context);
1385 AFSIOWorkerThread( IN PVOID Context);
1388 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1391 AFSVolumeWorkerThread( IN PVOID Context);
1394 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1397 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1400 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1403 AFSRemoveWorkItem( void);
1406 AFSRemoveIOWorkItem( void);
1409 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1412 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1415 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1418 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1421 AFSQueueFlushExtents( IN AFSFcb *Fcb);
1424 AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
1426 IN HANDLE CallerProcess);
1429 AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
1431 IN HANDLE CallerProcess);
1434 AFSQueueGlobalRootEnumeration( void);
1437 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1440 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1441 IN UCHAR FunctionCode,
1442 IN ULONG RequestFLags,
1443 IN AFSIoRun *IoRuns,
1445 IN AFSGatherIo *GatherIo);
1448 // AFSMD5Support.cpp Prototypes
1452 AFSGenerateMD5( IN char *DataBuffer,
1454 OUT UCHAR *MD5Digest);
1458 #endif /* _AFS_COMMON_H */