24 #pragma alloc_text(PAGE, FFSCleanup) 75 #pragma prefast( suppress: 28137, "by design" ) 79 IrpContext->IsSynchronous))
85 VcbResourceAcquired =
TRUE;
108 Vcb->OpenHandleCount--;
110 if (!
Vcb->OpenHandleCount)
128 #pragma prefast( suppress: 28137, "by design" ) 132 IrpContext->IsSynchronous))
138 FcbResourceAcquired =
TRUE;
163 Irp = IrpContext->Irp;
169 Fcb->NonCachedOpenCount--;
172 Vcb->OpenFileHandleCount--;
207 &
Fcb->FileLockAnchor,
225 Fcb->AnsiFileName.Buffer));
233 (
Fcb->NonCachedOpenCount != 0) &&
234 (
Fcb->NonCachedOpenCount ==
Fcb->ReferenceCount) &&
235 (
Fcb->SectionObject.DataSectionObject !=
NULL))
264 #pragma prefast( suppress: 28137, "by design" ) 268 IrpContext->IsSynchronous))
274 FcbPagingIoAcquired =
TRUE;
294 if (FcbPagingIoAcquired)
300 FcbPagingIoAcquired =
FALSE;
311 #endif // !FFS_READ_ONLY 315 FFSPrint((
DBG_INFO,
"FFSCleanup: CcUninitializeCacheMap is called for %s.\n",
316 Fcb->AnsiFileName.Buffer));
343 if (FcbPagingIoAcquired)
350 if (FcbResourceAcquired)
357 if (VcbResourceAcquired)
364 if (!IrpContext->ExceptionInProgress)
372 IrpContext->Irp->IoStatus.Status =
Status;
#define ExGetCurrentResourceThread()
NTSTATUS FFSQueueRequest(IN PFFS_IRP_CONTEXT IrpContext)
PEPROCESS NTAPI IoGetRequestorProcess(IN PIRP Irp)
BOOLEAN NTAPI CcPurgeCacheSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN UninitializeCacheMaps)
__drv_mustHoldCriticalRegion BOOLEAN FFSDeleteFile(PFFS_IRP_CONTEXT IrpContext, PFFS_VCB Vcb, PFFS_FCB Fcb)
#define __drv_mustHoldCriticalRegion
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
FSRTL_ADVANCED_FCB_HEADER Header
VOID NTAPI FsRtlNotifyFullChangeDirectory(IN PNOTIFY_SYNC NotifySync, IN PLIST_ENTRY NotifyList, IN PVOID FsContext, IN PSTRING FullDirectoryName, IN BOOLEAN WatchTree, IN BOOLEAN IgnoreBuffer, IN ULONG CompletionFilter, IN PIRP NotifyIrp, IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL)
VOID FFSClearVpbFlag(IN PVPB Vpb, IN USHORT Flag)
#define FILE_NOTIFY_CHANGE_FILE_NAME
__drv_mustHoldCriticalRegion NTSTATUS FFSCleanup(IN PFFS_IRP_CONTEXT IrpContext)
struct _FFS_FCB * PFFS_FCB
#define FILE_NOTIFY_CHANGE_DIR_NAME
VOID NTAPI IoRemoveShareAccess(IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess)
#define FCB_DELETE_PENDING
PDEVICE_OBJECT DeviceObject
#define FCB_DELETE_ON_CLOSE
NTSTATUS FFSFlushFile(IN PFFS_FCB Fcb)
VOID NTAPI FsRtlNotifyCleanup(IN PNOTIFY_SYNC NotifySync, IN PLIST_ENTRY NotifyList, IN PVOID FsContext)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
_In_ PDEVICE_OBJECT DeviceObject
NTFSIDENTIFIER Identifier
#define FILE_ACTION_REMOVED
struct _FFS_VCB * PFFS_VCB
#define FFSGetCurrentProcessName()
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
PFILE_LOCK_INFO NTAPI FsRtlGetNextFileLock(IN PFILE_LOCK FileLock, IN BOOLEAN Restart)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#define FO_CACHE_SUPPORTED
#define VCB_WRITE_PROTECTED
__drv_mustHoldCriticalRegion NTSTATUS FFSCompleteIrpContext(IN PFFS_IRP_CONTEXT IrpContext, IN NTSTATUS Status)
_Must_inspect_result_ _In_ PFLT_INSTANCE _Out_ PBOOLEAN IsDirectory
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
NTSTATUS NTAPI FsRtlFastUnlockAll(IN PFILE_LOCK FileLock, IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN PVOID Context OPTIONAL)
ClearFlag(Dirent->Flags, DIRENT_FLAG_NOT_PERSISTENT)
struct _FFS_CCB * PFFS_CCB
BOOLEAN NTAPI CcUninitializeCacheMap(IN PFILE_OBJECT FileObject, IN OPTIONAL PLARGE_INTEGER TruncateSize, IN OPTIONAL PCACHE_UNINITIALIZE_EVENT UninitializeEvent)
#define FO_CLEANUP_COMPLETE
#define VCB_VOLUME_LOCKED
VOID FFSNotifyReportChange(IN PFFS_IRP_CONTEXT IrpContext, IN PFFS_VCB Vcb, IN PFFS_FCB Fcb, IN ULONG Filter, IN ULONG Action)
ERESOURCE PagingIoResource
VOID NTAPI ExReleaseResourceForThreadLite(IN PERESOURCE Resource, IN ERESOURCE_THREAD Thread)