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,
AFSEvaluateTargetByName( IN GUID *AuthGroup,
IN AFSObjectInfoCB *ParentObjectInfo,
IN PUNICODE_STRING SourceName,
+ IN ULONG Flags,
OUT AFSDirEnumEntry **DirEnumEntry);
NTSTATUS
AFSTearDownFcbExtents( IN AFSFcb *Fcb,
IN GUID *AuthGroup);
+VOID
+AFSDeleteFcbExtents( IN AFSFcb *Fcb);
+
void
AFSTrimExtents( IN AFSFcb *Fcb,
IN PLARGE_INTEGER FileSize);
// AFSClose.cpp Prototypes
//
+
NTSTATUS
AFSClose( IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
NTSTATUS
AFSInitVolume( IN GUID *AuthGroup,
IN AFSFileID *RootFid,
+ IN LONG VolumeReferenceReason,
OUT AFSVolumeCB **VolumeCB);
NTSTATUS
AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
+LONG
+AFSVolumeIncrement( IN AFSVolumeCB *VolumeCB,
+ IN LONG Reason);
+
+LONG
+AFSVolumeDecrement( IN AFSVolumeCB *VolumeCB,
+ IN LONG Reason);
+
NTSTATUS
AFSInitRootFcb( IN ULONGLONG ProcessID,
IN AFSVolumeCB *VolumeCB);
void
-AFSRemoveRootFcb( IN AFSFcb *RootFcb);
+AFSRemoveRootFcb( IN AFSVolumeCB *VolumeCB);
NTSTATUS
-AFSInitCcb( IN OUT AFSCcb **Ccb);
+AFSInitCcb( IN OUT AFSCcb **Ccb,
+ IN AFSDirectoryCB *DirectoryCB,
+ IN ACCESS_MASK GrantedAccess,
+ IN ULONG FileAccess);
void
AFSRemoveFcb( IN AFSFcb **Fcb);
-NTSTATUS
+void
AFSRemoveCcb( IN AFSFcb *Fcb,
IN AFSCcb *Ccb);
NTSTATUS
AFSLocateNameEntry( IN GUID *AuthGroup,
IN PFILE_OBJECT FileObject,
- IN UNICODE_STRING *RootPathName,
+ IN OUT UNICODE_STRING *RootPathName,
IN UNICODE_STRING *ParsedPathName,
IN AFSNameArrayHdr *NameArray,
IN ULONG Flags,
- OUT AFSVolumeCB **VolumeCB,
- IN OUT AFSDirectoryCB **ParentDirectoryCB,
- OUT AFSDirectoryCB **DirectoryCB,
+ IN AFSVolumeCB *VolumeCB,
+ IN AFSDirectoryCB *ParentDirectoryCB,
+ OUT AFSVolumeCB **OutVolumeCB,
+ OUT LONG *OutVolumeReferenceReason,
+ OUT AFSDirectoryCB **OutParentDirectoryCB,
+ OUT AFSDirectoryCB **OutDirectoryCB,
OUT PUNICODE_STRING ComponentName);
NTSTATUS
IN AFSDirectoryCB *DirEntry,
IN BOOLEAN InsertInEnumList);
-NTSTATUS
+void
AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
IN AFSDirectoryCB *DirEntry);
NTSTATUS
AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN HANDLE CallingUser);
+ IN PIRP Irp,
+ IN HANDLE CallingUser,
+ IN BOOLEAN bRetry);
NTSTATUS
AFSWrite( IN PDEVICE_OBJECT DeviceObject,
AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
+NTSTATUS
+AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
+ IN PFILE_OBJECT FileObject,
+ IN HANDLE CallingUser,
+ IN PIRP Irp,
+ IN ULONG BytesToWrite,
+ IN BOOLEAN Retrying);
+
//
// AFSFileInfo.cpp Prototypes
//
AFSSetRenameInfo( IN PIRP Irp);
NTSTATUS
+AFSSetFileLinkInfo( IN PIRP Irp);
+
+NTSTATUS
AFSSetPositionInfo( IN PIRP Irp,
IN AFSDirectoryCB *DirectoryCB);
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 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);
IN ULONGLONG HashIndex);
LONG
-AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo);
+AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
+ IN LONG Reason);
LONG
-AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo);
+AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
+ IN LONG Reason);
void
-AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
+AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
+
+AFSObjectInfoCB *
+AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
+ IN AFSFileID * FileID);
+
+void
+AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
NTSTATUS
AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
void
AFSPrimaryVolumeWorkerThread( IN PVOID Context);
-void
-AFSVolumeWorkerThread( IN PVOID Context);
-
NTSTATUS
AFSInsertWorkitem( IN AFSWorkItem *WorkItem);