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 AFSNotifyHardLink( IN AFSObjectInfoCB *ObjectInfo,
208 IN AFSObjectInfoCB *ParentObjectInfo,
209 IN AFSObjectInfoCB *TargetParentObjectInfo,
210 IN AFSDirectoryCB *SourceDirectoryCB,
211 IN UNICODE_STRING *TargetName,
212 IN BOOLEAN bReplaceIfExists,
213 OUT AFSDirectoryCB **TargetDirectoryCB);
216 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
219 OUT AFSDirEnumEntry **DirEnumEntry);
222 AFSEvaluateTargetByName( IN GUID *AuthGroup,
223 IN AFSObjectInfoCB *ParentObjectInfo,
224 IN PUNICODE_STRING SourceName,
225 OUT AFSDirEnumEntry **DirEnumEntry);
228 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
229 IN AFSFileID *FileID,
230 OUT AFSVolumeInfoCB *VolumeInformation);
233 AFSRetrieveVolumeSizeInformation( IN GUID *AuthGroup,
234 IN AFSFileID *FileID,
235 OUT AFSVolumeSizeInfoCB *VolumeSizeInformation);
238 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
239 IN ULONG InputLength,
240 IN ULONG OutputLength,
241 IN void *InputDataBuffer,
242 OUT void *OutputDataBuffer,
243 OUT ULONG *BytesReturned);
246 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
247 IN ULONG InformationClass,
248 IN ULONG InputLength,
249 IN void *DataBuffer);
252 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
253 IN ULONG InformationClass,
254 IN ULONG OutputLength,
256 OUT ULONG *BytesReturned);
259 AFSReleaseFid( IN AFSFileID *FileId);
262 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
263 IN LARGE_INTEGER *ExtentOffset,
267 // AFSCreate.cpp Prototypes
271 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
275 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
279 AFSOpenRedirector( IN PIRP Irp,
284 AFSOpenAFSRoot( IN PIRP Irp,
289 AFSOpenRoot( IN PIRP Irp,
290 IN AFSVolumeCB *VolumeCB,
296 AFSProcessCreate( IN PIRP Irp,
298 IN AFSVolumeCB *VolumeCB,
299 IN AFSDirectoryCB *ParentDirCB,
300 IN PUNICODE_STRING FileName,
301 IN PUNICODE_STRING ComponentName,
302 IN PUNICODE_STRING FullFileName,
307 AFSOpenTargetDirectory( IN PIRP Irp,
308 IN AFSVolumeCB *VolumeCB,
309 IN AFSDirectoryCB *ParentDirectoryCB,
310 IN AFSDirectoryCB *TargetDirectoryCB,
311 IN UNICODE_STRING *TargetName,
316 AFSProcessOpen( IN PIRP Irp,
318 IN AFSVolumeCB *VolumeCB,
319 IN AFSDirectoryCB *ParentDirCB,
320 IN AFSDirectoryCB *DirectoryCB,
325 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
327 IN AFSVolumeCB *VolumeCB,
329 IN AFSDirectoryCB *ParentDirCB,
330 IN AFSDirectoryCB *DirectoryCB,
335 AFSControlDeviceCreate( IN PIRP Irp);
338 AFSOpenIOCtlFcb( IN PIRP Irp,
340 IN AFSDirectoryCB *ParentDirCB,
345 AFSOpenSpecialShareFcb( IN PIRP Irp,
347 IN AFSDirectoryCB *DirectoryCB,
352 // AFSExtentsSupport.cpp Prototypes
355 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
358 AFSExtentForOffset( IN AFSFcb *Fcb,
359 IN PLARGE_INTEGER Offset,
360 IN BOOLEAN ReturnPrevious);
362 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
366 AFSRequestExtents( IN AFSFcb *Fcb,
368 IN PLARGE_INTEGER Offset,
370 OUT BOOLEAN *FullyMApped);
372 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
373 IN PLARGE_INTEGER Offset,
375 IN OUT AFSExtent **FirstExtent,
376 OUT AFSExtent **LastExtent);
379 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
381 IN PLARGE_INTEGER Offset,
385 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
389 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
392 AFSProcessReleaseFileExtents( IN PIRP Irp);
395 AFSProcessExtentFailure( PIRP Irp);
398 AFSProcessSetExtents( IN AFSFcb *pFcb,
400 IN AFSFileExtentCB *Result);
403 AFSFlushExtents( IN AFSFcb *pFcb,
407 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
409 IN BOOLEAN bReleaseAll);
412 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
416 AFSMarkDirty( IN AFSFcb *pFcb,
417 IN AFSExtent *StartExtent,
418 IN ULONG ExtentsCount,
419 IN LARGE_INTEGER *StartingByte,
420 IN BOOLEAN DerefExtents);
423 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
427 AFSDeleteFcbExtents( IN AFSFcb *Fcb);
430 AFSTrimExtents( IN AFSFcb *Fcb,
431 IN PLARGE_INTEGER FileSize);
434 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
436 IN AFSFileExtentCB *Result);
439 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
440 IN ULONG ExtentsCount);
443 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
444 IN ULONG ExtentsCount);
447 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
448 IN AFSExtent *Extent);
451 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
454 NextExtent( AFSExtent *Extent, ULONG SkipList );
457 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
458 AFSByteRange ** pByteRangeList);
462 AFSSetupMD5Hash( IN AFSFcb *Fcb,
463 IN AFSExtent *StartExtent,
464 IN ULONG ExtentsCount,
465 IN void *SystemBuffer,
466 IN LARGE_INTEGER *ByteOffset,
472 // AFSIoSupp.cpp Prototypes
475 AFSGetExtents( IN AFSFcb *pFcb,
476 IN PLARGE_INTEGER Offset,
479 OUT ULONG *ExtentCount,
480 OUT ULONG *RunCount);
483 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
485 IN PVOID SystemBuffer,
486 IN OUT AFSIoRun *IoRun,
487 IN PLARGE_INTEGER Start,
490 IN OUT ULONG *RunCount);
493 AFSStartIos( IN FILE_OBJECT *CacheFileObject,
494 IN UCHAR FunctionCode,
498 IN OUT AFSGatherIo *Gather);
501 AFSCompleteIo( IN AFSGatherIo *Gather,
505 AFSProcessExtentRun( IN PVOID SystemBuffer,
506 IN PLARGE_INTEGER Start,
509 IN BOOLEAN WriteRequest);
512 // AFSClose.cpp Prototypes
517 AFSClose( IN PDEVICE_OBJECT DeviceObject,
521 // AFSFcbSupport.cpp Prototypes
525 AFSInitFcb( IN AFSDirectoryCB *DirEntry);
528 AFSInitVolume( IN GUID *AuthGroup,
529 IN AFSFileID *RootFid,
530 IN LONG VolumeReferenceReason,
531 OUT AFSVolumeCB **VolumeCB);
534 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
537 AFSVolumeIncrement( IN AFSVolumeCB *VolumeCB,
541 AFSVolumeDecrement( IN AFSVolumeCB *VolumeCB,
545 AFSInitRootFcb( IN ULONGLONG ProcessID,
546 IN AFSVolumeCB *VolumeCB);
549 AFSRemoveRootFcb( IN AFSVolumeCB *VolumeCB);
552 AFSInitCcb( IN OUT AFSCcb **Ccb,
553 IN AFSDirectoryCB *DirectoryCB,
554 IN ACCESS_MASK GrantedAccess,
555 IN ULONG FileAccess);
558 AFSRemoveFcb( IN AFSFcb **Fcb);
561 AFSRemoveCcb( IN AFSFcb *Fcb,
565 AFSInsertCcb( IN AFSFcb *Fcb,
569 // AFSNameSupport.cpp Prototypes
573 AFSLocateNameEntry( IN GUID *AuthGroup,
574 IN PFILE_OBJECT FileObject,
575 IN OUT UNICODE_STRING *RootPathName,
576 IN UNICODE_STRING *ParsedPathName,
577 IN AFSNameArrayHdr *NameArray,
579 IN AFSVolumeCB *VolumeCB,
580 IN AFSDirectoryCB *ParentDirectoryCB,
581 OUT AFSVolumeCB **OutVolumeCB,
582 OUT LONG *OutVolumeReferenceReason,
583 OUT AFSDirectoryCB **OutParentDirectoryCB,
584 OUT AFSDirectoryCB **OutDirectoryCB,
585 OUT PUNICODE_STRING ComponentName);
588 AFSCreateDirEntry( IN GUID *AuthGroup,
589 IN AFSObjectInfoCB *ParentObjectInfo,
590 IN AFSDirectoryCB *ParentDirCB,
591 IN PUNICODE_STRING FileName,
592 IN PUNICODE_STRING ComponentName,
594 IN OUT AFSDirectoryCB **DirEntry);
597 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
598 IN AFSDirectoryCB *DirEntry,
599 IN BOOLEAN InsertInEnumList);
602 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
603 IN AFSDirectoryCB *DirEntry);
606 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
607 IN AFSDirectoryCB *DirEntry,
608 IN BOOLEAN RemoveFromEnumList);
611 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
612 IN OUT PUNICODE_STRING TargetFileName);
615 AFSParseName( IN PIRP Irp,
617 OUT PUNICODE_STRING FileName,
618 OUT PUNICODE_STRING ParsedFileName,
619 OUT PUNICODE_STRING RootFileName,
620 OUT ULONG *ParseFlags,
621 OUT AFSVolumeCB **VolumeCB,
622 OUT AFSDirectoryCB **ParentDirectoryCB,
623 OUT AFSNameArrayHdr **NameArray);
626 AFSCheckCellName( IN GUID *AuthGroup,
627 IN UNICODE_STRING *CellName,
628 OUT AFSDirectoryCB **ShareDirEntry);
631 AFSBuildMountPointTarget( IN GUID *AuthGroup,
632 IN AFSDirectoryCB *DirectoryCB,
633 OUT AFSVolumeCB **VolumeCB);
636 AFSBuildRootVolume( IN GUID *AuthGroup,
637 IN AFSFileID *FileId,
638 OUT AFSVolumeCB **TargetVolumeCB);
641 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
642 IN PFILE_OBJECT FileObject,
643 IN UNICODE_STRING *RemainingPath,
647 // AFSNetworkProviderSupport.cpp
651 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
652 IN OUT PULONG ResultStatus,
653 IN OUT ULONG_PTR *ReturnOutputBufferLength);
656 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
657 IN OUT AFSCancelConnectionResultCB *ConnectionResult,
658 IN OUT ULONG_PTR *ReturnOutputBufferLength);
661 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
662 IN OUT WCHAR *RemoteName,
663 IN ULONG RemoteNameBufferLength,
664 IN OUT ULONG_PTR *ReturnOutputBufferLength);
667 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
668 IN ULONG ConnectionBufferLength,
669 IN OUT ULONG_PTR *ReturnOutputBufferLength);
672 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
673 IN ULONG DisplayType);
675 AFSProviderConnectionCB *
676 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
679 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
680 IN AFSProviderConnectionCB *RootConnection,
681 IN ULONG BufferLength,
682 OUT PULONG CopiedLength);
685 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
686 IN ULONG BufferLength,
687 IN OUT ULONG_PTR *ReturnOutputBufferLength);
690 AFSIsDriveMapped( IN WCHAR DriveMapping);
693 // AFSRead.cpp Prototypes
697 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
699 IN HANDLE OnBehalfOf);
702 AFSRead( IN PDEVICE_OBJECT DeviceObject,
707 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
711 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
715 // AFSWrite.cpp Prototypes
719 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
721 IN HANDLE CallingUser,
725 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
729 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
733 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
737 AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
738 IN PFILE_OBJECT FileObject,
739 IN HANDLE CallingUser,
741 IN ULONG BytesToWrite,
742 IN BOOLEAN Retrying);
745 // AFSFileInfo.cpp Prototypes
749 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
753 AFSQueryBasicInfo( IN PIRP Irp,
754 IN AFSDirectoryCB *DirectoryCB,
755 IN OUT PFILE_BASIC_INFORMATION Buffer,
756 IN OUT PLONG Length);
759 AFSQueryStandardInfo( IN PIRP Irp,
760 IN AFSDirectoryCB *DirectoryCB,
761 IN OUT PFILE_STANDARD_INFORMATION Buffer,
762 IN OUT PLONG Length);
765 AFSQueryInternalInfo( IN PIRP Irp,
767 IN OUT PFILE_INTERNAL_INFORMATION Buffer,
768 IN OUT PLONG Length);
771 AFSQueryEaInfo( IN PIRP Irp,
772 IN AFSDirectoryCB *DirectoryCB,
773 IN OUT PFILE_EA_INFORMATION Buffer,
774 IN OUT PLONG Length);
777 AFSQueryPositionInfo( IN PIRP Irp,
779 IN OUT PFILE_POSITION_INFORMATION Buffer,
780 IN OUT PLONG Length);
783 AFSQueryNameInfo( IN PIRP Irp,
784 IN AFSDirectoryCB *DirectoryCB,
785 IN OUT PFILE_NAME_INFORMATION Buffer,
786 IN OUT PLONG Length);
789 AFSQueryShortNameInfo( IN PIRP Irp,
790 IN AFSDirectoryCB *DirectoryCB,
791 IN OUT PFILE_NAME_INFORMATION Buffer,
792 IN OUT PLONG Length);
795 AFSQueryNetworkInfo( IN PIRP Irp,
796 IN AFSDirectoryCB *DirectoryCB,
797 IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
798 IN OUT PLONG Length);
801 AFSQueryStreamInfo( IN PIRP Irp,
802 IN AFSDirectoryCB *DirectoryCB,
803 IN OUT FILE_STREAM_INFORMATION *Buffer,
804 IN OUT PLONG Length);
807 AFSQueryAccess( IN PIRP Irp,
809 IN OUT PFILE_ACCESS_INFORMATION Buffer,
810 IN OUT PLONG Length);
813 AFSQueryMode( IN PIRP Irp,
815 IN OUT PFILE_MODE_INFORMATION Buffer,
816 IN OUT PLONG Length);
819 AFSQueryAlignment( IN PIRP Irp,
821 IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
822 IN OUT PLONG Length);
825 AFSQueryAttribTagInfo( IN PIRP Irp,
826 IN AFSDirectoryCB *DirectoryCB,
827 IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
828 IN OUT PLONG Length);
831 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
832 IN AFSDirectoryCB *DirectoryCB,
833 IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
834 IN OUT PLONG Length);
837 AFSQueryPhysicalNameInfo( IN PIRP Irp,
838 IN AFSDirectoryCB *DirectoryCB,
839 IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
840 IN OUT PLONG Length);
843 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
847 AFSSetBasicInfo( IN PIRP Irp,
848 IN AFSDirectoryCB *DirectoryCB);
851 AFSSetDispositionInfo( IN PIRP Irp,
852 IN AFSDirectoryCB *DirectoryCB);
855 AFSSetRenameInfo( IN PIRP Irp);
858 AFSSetFileLinkInfo( IN PIRP Irp);
861 AFSSetPositionInfo( IN PIRP Irp,
862 IN AFSDirectoryCB *DirectoryCB);
865 AFSSetAllocationInfo( IN PIRP Irp,
866 IN AFSDirectoryCB *DirectoryCB);
869 AFSSetEndOfFileInfo( IN PIRP Irp,
870 IN AFSDirectoryCB *DirectoryCB);
873 AFSProcessShareSetInfo( IN IRP *Irp,
878 AFSProcessShareQueryInfo( IN IRP *Irp,
883 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
886 IN OUT LONG *Length);
889 // AFSEa.cpp Prototypes
893 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
897 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
901 // AFSFlushBuffers.cpp Prototypes
905 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
909 // AFSVolumeInfo.cpp Prototypes
913 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
917 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
921 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
922 IN PFILE_FS_VOLUME_INFORMATION Buffer,
923 IN OUT PULONG Length);
926 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
927 IN PFILE_FS_SIZE_INFORMATION Buffer,
928 IN OUT PULONG Length);
931 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
932 IN PFILE_FS_DEVICE_INFORMATION Buffer,
933 IN OUT PULONG Length);
936 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
937 IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
938 IN OUT PULONG Length);
941 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
942 IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
943 IN OUT PULONG Length);
946 // AFSDirControl.cpp Prototypes
950 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
954 AFSQueryDirectory( IN PIRP Irp);
957 AFSNotifyChangeDirectory( IN PIRP Irp);
960 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
964 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
969 AFSSnapshotDirectory( IN AFSFcb *Fcb,
971 IN BOOLEAN ResetIndex);
974 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
976 IN BOOLEAN WatchTree,
977 IN ULONG CompletionFilter,
981 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
983 IN ULONG NotifyFilter,
984 IN ULONG NotificationAction);
987 AFSNotifyReportChangeCallback( IN void *NotifyContext,
988 IN void *FilterContext);
991 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
995 // AFSFSControl.cpp Prototypes
999 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
1003 AFSProcessUserFsRequest( IN PIRP Irp);
1006 AFSProcessShareFsCtrl( IN IRP *Irp,
1011 // AFSDevControl.cpp Prototypes
1015 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
1019 // AFSInternalDevControl.cpp Prototypes
1023 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
1027 // AFSShutdown.cpp Prototypes
1031 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
1036 AFSShutdownFilesystem( void);
1039 // AFSLockControl.cpp Prototypes
1043 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
1047 // AFSCleanup.cpp Prototypes
1051 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
1055 // AFSSecurity.cpp Prototypes
1059 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
1063 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
1067 // AFSSystemControl.cpp Prototypes
1071 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
1075 // AFSQuota.cpp Prototypes
1079 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
1083 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
1087 // AFSGeneric.cpp Prototypes
1091 AFSExceptionFilter( IN CHAR *FunctionString,
1093 IN PEXCEPTION_POINTERS ExceptPtrs);
1096 AFSAcquireExcl( IN PERESOURCE Resource,
1100 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
1104 AFSAcquireShared( IN PERESOURCE Resource,
1108 AFSReleaseResource( IN PERESOURCE Resource);
1111 AFSConvertToShared( IN PERESOURCE Resource);
1114 AFSCompleteRequest( IN PIRP Irp,
1118 AFSGenerateCRC( IN PUNICODE_STRING FileName,
1119 IN BOOLEAN UpperCaseName);
1122 AFSLockSystemBuffer( IN PIRP Irp,
1126 AFSLockUserBuffer( IN void *UserBuffer,
1127 IN ULONG BufferLength,
1131 AFSMapToService( IN PIRP Irp,
1132 IN ULONG ByteCount);
1135 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
1139 AFSInitializeLibraryDevice( void);
1142 AFSRemoveLibraryDevice( void);
1145 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
1149 AFSInitializeGlobalDirectoryEntries( void);
1152 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1153 IN PUNICODE_STRING FileName,
1154 IN PUNICODE_STRING TargetName,
1155 IN AFSDirEnumEntry *DirEnumEntry,
1156 IN ULONG FileIndex);
1159 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
1160 IN BOOLEAN DirectoryEntry);
1163 AFSEvaluateNode( IN GUID *AuthGroup,
1164 IN AFSDirectoryCB *DirEntry);
1167 AFSValidateSymLink( IN GUID *AuthGroup,
1168 IN AFSDirectoryCB *DirEntry);
1171 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
1174 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
1178 AFSIsChildOfParent( IN AFSFcb *Dcb,
1183 AFSCreateHighIndex( IN AFSFileID *FileID);
1187 AFSCreateLowIndex( IN AFSFileID *FileID);
1190 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
1191 IN ACCESS_MASK GrantedAccess,
1192 IN BOOLEAN DirectoryEntry);
1195 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
1198 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
1199 IN UNICODE_STRING *SubstituteName,
1200 IN ULONG StringIndex);
1203 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
1204 IN OUT UNICODE_STRING *ComponentName,
1205 IN UNICODE_STRING *SubstituteName,
1206 IN OUT UNICODE_STRING *RemainingPath,
1207 IN BOOLEAN FreePathName);
1210 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
1214 AFSInvalidateAllVolumes( VOID);
1217 AFSVerifyEntry( IN GUID *AuthGroup,
1218 IN AFSDirectoryCB *DirectoryCB);
1221 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
1224 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
1227 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
1228 IN GUID *AuthGroup);
1231 AFSIsVolumeFID( IN AFSFileID *FileID);
1234 AFSIsFinalNode( IN AFSFcb *Fcb);
1237 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
1238 IN AFSDirEnumEntry *DirEnumEntry);
1241 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
1243 IN BOOLEAN FastCall,
1244 IN BOOLEAN SafeToPurge);
1247 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
1248 IN UNICODE_STRING *SecondaryName);
1251 AFSInitializeSpecialShareNameList( void);
1254 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
1257 AFSWaitOnQueuedReleases( void);
1260 AFSIsEqualFID( IN AFSFileID *FileId1,
1261 IN AFSFileID *FileId2);
1264 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
1267 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
1270 AFSIsRelativeName( IN UNICODE_STRING *Name);
1273 AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
1276 AFSUpdateName( IN UNICODE_STRING *Name);
1279 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
1280 IN OUT ULONG *Flags,
1281 IN WCHAR *NameBuffer,
1282 IN USHORT NameLength);
1285 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
1286 IN ULONG InitialElementCount);
1289 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
1290 IN UNICODE_STRING *Path,
1291 IN AFSDirectoryCB *DirectoryCB);
1294 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
1295 IN AFSNameArrayHdr *RelatedNameArray,
1296 IN AFSDirectoryCB *DirectoryCB);
1299 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
1302 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
1303 IN AFSDirectoryCB *DirEntry);
1306 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
1309 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
1312 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
1313 IN AFSDirectoryCB *DirEntry);
1316 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
1319 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
1322 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
1325 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
1328 AFSVerifyVolume( IN ULONGLONG ProcessId,
1329 IN AFSVolumeCB *VolumeCB);
1332 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
1335 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
1336 IN AFSDirectoryCB *DirectoryCB,
1337 IN UNICODE_STRING *ParentPathName,
1338 IN AFSNameArrayHdr *RelatedNameArray,
1340 OUT AFSFileInfoCB *FileInfo);
1343 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
1344 IN ULONGLONG HashIndex);
1347 AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
1351 AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
1355 AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
1358 AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
1359 IN AFSFileID * FileID);
1362 AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
1365 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
1366 OUT AFSDirectoryCB **TargetDirEntry);
1369 AFSCleanupFcb( IN AFSFcb *Fcb,
1370 IN BOOLEAN ForceFlush);
1373 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
1374 IN UNICODE_STRING *NewFileName);
1377 AFSReadCacheFile( IN void *ReadBuffer,
1378 IN LARGE_INTEGER *ReadOffset,
1379 IN ULONG RequestedDataLength,
1380 IN OUT PULONG BytesRead);
1383 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
1388 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
1391 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
1392 IN AFSDirectoryCB *DirEntry);
1395 AFSGetAuthenticationId( void);
1398 AFSUnwindFileInfo( IN AFSFcb *Fcb,
1402 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
1405 AFSReferenceCacheFileObject( void);
1408 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
1411 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
1414 AFSCloseLibrary( void);
1417 AFSDefaultLogMsg( IN ULONG Subsystem,
1423 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
1424 IN ULONG InputBufferLength,
1425 IN AFSStatusInfoCB *StatusInfo,
1426 OUT ULONG *ReturnLength);
1429 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
1430 IN UNICODE_STRING *ComponentName);
1433 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
1434 OUT UNICODE_STRING *ComponentName);
1437 AFSDumpTraceFiles_Default( void);
1440 AFSLibExAllocatePoolWithTag( IN POOL_TYPE PoolType,
1441 IN SIZE_T NumberOfBytes,
1445 AFSValidNameFormat( IN UNICODE_STRING *FileName);
1448 AFSCreateDefaultSecurityDescriptor( void);
1451 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
1452 OUT UNICODE_STRING *ParentPath);
1455 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
1456 IN AFSObjectInfoCB *ObjectInfo,
1457 IN BOOLEAN WriteAccess,
1458 OUT GUID *AuthGroup);
1461 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
1462 IN ULONG InvalidateReason);
1465 // AFSWorker.cpp Prototypes
1469 AFSInitializeWorkerPool( void);
1472 AFSRemoveWorkerPool( void);
1475 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
1476 IN PKSTART_ROUTINE WorkerRoutine);
1479 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
1482 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
1485 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
1488 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1491 AFSWorkerThread( IN PVOID Context);
1494 AFSIOWorkerThread( IN PVOID Context);
1497 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
1500 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
1503 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
1506 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
1509 AFSRemoveWorkItem( void);
1512 AFSRemoveIOWorkItem( void);
1515 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
1518 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
1521 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
1524 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
1527 AFSQueueFlushExtents( IN AFSFcb *Fcb,
1528 IN GUID *AuthGroup);
1531 AFSQueueGlobalRootEnumeration( void);
1534 AFSQueuePurgeObject( IN AFSFcb *Fcb);
1537 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
1538 IN UCHAR FunctionCode,
1539 IN ULONG RequestFLags,
1540 IN AFSIoRun *IoRuns,
1542 IN AFSGatherIo *GatherIo);
1545 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
1546 IN ULONG InvalidateReason);
1549 // AFSMD5Support.cpp Prototypes
1553 AFSGenerateMD5( IN char *DataBuffer,
1555 OUT UCHAR *MD5Digest);
1559 #endif /* _AFS_COMMON_H */