#include <ntifs.h>
#include <wdmsec.h> // for IoCreateDeviceSecure
#include <initguid.h>
+#include <ntintsafe.h>
#include "AFSDefines.h"
OUT AFSFileID *UpdatedFID);
NTSTATUS
+AFSNotifyHardLink( IN AFSObjectInfoCB *ObjectInfo,
+ IN GUID *AuthGroup,
+ IN AFSObjectInfoCB *ParentObjectInfo,
+ IN AFSObjectInfoCB *TargetParentObjectInfo,
+ IN AFSDirectoryCB *SourceDirectoryCB,
+ IN UNICODE_STRING *TargetName,
+ IN BOOLEAN bReplaceIfExists,
+ OUT AFSDirectoryCB **TargetDirectoryCB);
+
+NTSTATUS
AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
IN GUID *AuthGroup,
IN BOOLEAN FastCall,
OUT AFSVolumeInfoCB *VolumeInformation);
NTSTATUS
+AFSRetrieveVolumeSizeInformation( IN GUID *AuthGroup,
+ IN AFSFileID *FileID,
+ OUT AFSVolumeSizeInfoCB *VolumeSizeInformation);
+
+NTSTATUS
AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
IN ULONG InputLength,
IN ULONG OutputLength,
NTSTATUS
AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
- IN GUID *AuthGroup);
+ IN GUID *AuthGroup,
+ IN BOOLEAN bReleaseAll);
NTSTATUS
AFSReleaseCleanExtents( IN AFSFcb *Fcb,
IN LARGE_INTEGER *StartingByte,
IN BOOLEAN DerefExtents);
-BOOLEAN
+VOID
AFSTearDownFcbExtents( IN AFSFcb *Fcb,
IN GUID *AuthGroup);
+VOID
+AFSDeleteFcbExtents( IN AFSFcb *Fcb);
+
void
AFSTrimExtents( IN AFSFcb *Fcb,
IN PLARGE_INTEGER FileSize);
AFSExtent *
ExtentFor( PLIST_ENTRY le, ULONG SkipList );
+AFSExtent *
+NextExtent( AFSExtent *Extent, ULONG SkipList );
+
+ULONG
+AFSConstructCleanByteRangeList( AFSFcb * pFcb,
+ AFSByteRange ** pByteRangeList);
+
#if GEN_MD5
void
AFSSetupMD5Hash( IN AFSFcb *Fcb,
// AFSClose.cpp Prototypes
//
+
NTSTATUS
AFSClose( IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
AFSInitCcb( IN OUT AFSCcb **Ccb);
void
-AFSRemoveFcb( IN AFSFcb *Fcb);
+AFSRemoveFcb( IN AFSFcb **Fcb);
-NTSTATUS
+void
AFSRemoveCcb( IN AFSFcb *Fcb,
IN AFSCcb *Ccb);
AFSSetRenameInfo( IN PIRP Irp);
NTSTATUS
+AFSSetFileLinkInfo( IN PIRP Irp);
+
+NTSTATUS
AFSSetPositionInfo( IN PIRP Irp,
IN AFSDirectoryCB *DirectoryCB);
//
ULONG
-AFSExceptionFilter( IN ULONG Code,
+AFSExceptionFilter( IN CHAR *FunctionString,
+ IN ULONG Code,
IN PEXCEPTION_POINTERS ExceptPtrs);
BOOLEAN
void *
AFSLockUserBuffer( IN void *UserBuffer,
IN ULONG BufferLength,
- OUT MDL ** Mdl);
+ OUT MDL ** Mdl);
void *
AFSMapToService( IN PIRP Irp,
NTSTATUS
AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
IN GUID *AuthGroup,
- IN BOOLEAN PurgeContent,
- IN BOOLEAN FastCall);
+ IN BOOLEAN FastCall,
+ IN BOOLEAN SafeToPurge);
AFSDirectoryCB *
AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
BOOLEAN
AFSIsRelativeName( IN UNICODE_STRING *Name);
+BOOLEAN
+AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
+
void
AFSUpdateName( IN UNICODE_STRING *Name);
AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
IN AFSDirectoryCB *DirEntry);
-void
-AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
- IN AFSDirectoryCB *DirectoryCB);
-
AFSDirectoryCB *
AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
IN ULONGLONG HashIndex);
+LONG
+AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo);
+
+LONG
+AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo);
+
void
AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
void
AFSPrimaryVolumeWorkerThread( IN PVOID Context);
-void
-AFSVolumeWorkerThread( IN PVOID Context);
-
NTSTATUS
AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
IN GUID *AuthGroup);
NTSTATUS
-AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN HANDLE CallerProcess);
-
-NTSTATUS
-AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN HANDLE CallerProcess);
-
-NTSTATUS
AFSQueueGlobalRootEnumeration( void);
NTSTATUS