21 #define MAX_ZERO_LENGTH (256 * 1024) 73 DbgPrint(
"Can't allocate CcZeroPage.\n");
278 SharedCacheMap =
FileObject->SectionObjectPointer->SharedCacheMap;
279 PrivateCacheMap =
FileObject->PrivateCacheMap;
294 CacheMapVacbListEntry);
295 ListEntry = ListEntry->
Flink;
312 if (PartialLength != 0)
343 CurrentOffset += PartialLength;
380 CurrentOffset += PartialLength;
424 DeferredWrite =
NULL;
430 ListEntry = ListEntry->
Flink)
438 if (WrittenBytes < DeferredWrite->BytesToWrite)
440 DeferredWrite =
NULL;
455 DeferredWrite =
NULL;
461 DeferredWrite =
NULL;
466 if (DeferredWrite ==
NULL)
472 if (DeferredWrite->
Event)
501 SharedCacheMap =
FileObject->SectionObjectPointer->SharedCacheMap;
510 PrivateCacheMap =
FileObject->PrivateCacheMap;
512 if (PrivateCacheMap ==
NULL)
555 if (PartialLength != 0)
584 CurrentOffset += PartialLength;
616 CurrentOffset += PartialLength;
622 PrivateCacheMap =
FileObject->PrivateCacheMap;
623 if (PrivateCacheMap !=
NULL)
673 TryContext = Retrying;
690 PerFileDefer =
FALSE;
706 SharedCacheMap =
FileObject->SectionObjectPointer->SharedCacheMap;
769 Context.BytesToWrite = BytesToWrite;
817 DPRINT(
"CcCopyRead(FileObject 0x%p, FileOffset %I64x, " 818 "Length %lu, Wait %u, Buffer 0x%p, IoStatus 0x%p)\n",
848 DPRINT(
"CcCopyWrite(FileObject 0x%p, FileOffset %I64x, " 849 "Length %lu, Wait %u, Buffer 0x%p)\n",
878 CCTRACE(
CC_API_DEBUG,
"FileObject=%p PostRoutine=%p Context1=%p Context2=%p BytesToWrite=%lu Retrying=%d\n",
897 Context->PostRoutine = PostRoutine;
900 Context->BytesToWrite = BytesToWrite;
1002 ULONG CurrentLength;
1011 DPRINT(
"CcZeroData(FileObject 0x%p, StartOffset %I64x, EndOffset %I64x, " 1012 "Wait %u)\n",
FileObject, StartOffset->QuadPart, EndOffset->QuadPart,
1015 Length = EndOffset->QuadPart - StartOffset->QuadPart;
1016 WriteOffset.
QuadPart = StartOffset->QuadPart;
1036 for (
i = 0;
i < ((Mdl->Size -
sizeof(
MDL)) /
sizeof(
ULONG));
i++)
1055 WriteOffset.
QuadPart += CurrentLength;
BOOLEAN CcCopyData(_In_ PFILE_OBJECT FileObject, _In_ LONGLONG FileOffset, _Inout_ PVOID Buffer, _In_ LONGLONG Length, _In_ CC_COPY_OPERATION Operation, _In_ BOOLEAN Wait, _Out_ PIO_STATUS_BLOCK IoStatus)
BOOLEAN LimitModifiedPages
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define STATUS_INSUFFICIENT_RESOURCES
ULONG CcDirtyPageThreshold
#define MmInitializeMdl(_MemoryDescriptorList, _BaseVa, _Length)
LARGE_INTEGER SectionSize
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG IN BOOLEAN OUT PIO_STATUS_BLOCK IoStatus
LARGE_INTEGER BeyondLastByte2
#define BooleanFlagOn(F, SF)
#define DBG_UNREFERENCED_PARAMETER(P)
BOOLEAN NTAPI CcCanIWrite(IN PFILE_OBJECT FileObject, IN ULONG BytesToWrite, IN BOOLEAN Wait, IN BOOLEAN Retrying)
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
VOID NTAPI KeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK SpinLock)
NTSTATUS NTAPI MmRequestPageMemoryConsumer(ULONG Consumer, BOOLEAN MyWait, PPFN_NUMBER AllocatedPage)
VOID NTAPI MmUnlockPages(IN PMDL Mdl)
VOID NTAPI ObDereferenceObject(IN PVOID Object)
NTSTATUS NTAPI IoPageRead(IN PFILE_OBJECT FileObject, IN PMDL Mdl, IN PLARGE_INTEGER Offset, IN PKEVENT Event, IN PIO_STATUS_BLOCK StatusBlock)
VOID NTAPI MiZeroPhysicalPage(IN PFN_NUMBER PageFrameIndex)
PFN_NUMBER MmAvailablePages
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define MDL_MAPPED_TO_SYSTEM_VA
VOID CcPostDeferredWrites(VOID)
BOOLEAN NTAPI CcCopyRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus)
VOID NTAPI CcScheduleReadAhead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length)
#define STATUS_END_OF_FILE
VOID CcPerformReadAhead(IN PFILE_OBJECT FileObject)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
VOID NTAPI CcFastCopyRead(IN PFILE_OBJECT FileObject, IN ULONG FileOffset, IN ULONG Length, IN ULONG PageCount, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
PLIST_ENTRY NTAPI ExInterlockedInsertHeadList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
BOOLEAN NTAPI IoIsFileOriginRemote(IN PFILE_OBJECT FileObject)
VOID(NTAPI * PCC_POST_DEFERRED_WRITE)(_In_ PVOID Context1, _In_ PVOID Context2)
ULONG CcFastReadResourceMiss
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
VOID NTAPI MmUnmapLockedPages(IN PVOID BaseAddress, IN PMDL Mdl)
#define STATUS_INVALID_USER_BUFFER
_In_ PVOID _In_ ULONG Event
#define EXCEPTION_EXECUTE_HANDLER
LARGE_INTEGER BeyondLastByte1
VOID NTAPI CcFastCopyWrite(IN PFILE_OBJECT FileObject, IN ULONG FileOffset, IN ULONG Length, IN PVOID Buffer)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET _In_ UINT _Out_ PUINT BytesCopied
#define NODE_TYPE_DEFERRED_WRITE
VOID NTAPI KeBugCheck(ULONG BugCheckCode)
PCACHE_MANAGER_CALLBACKS Callbacks
ULONG CcFastReadNotPossible
_Inout_ PFILE_OBJECT FileObject
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
PROS_SHARED_CACHE_MAP SharedCacheMap
LIST_ENTRY CacheMapVacbListHead
KSPIN_LOCK ReadAheadSpinLock
VOID NTAPI CcDeferWrite(IN PFILE_OBJECT FileObject, IN PCC_POST_DEFERRED_WRITE PostRoutine, IN PVOID Context1, IN PVOID Context2, IN ULONG BytesToWrite, IN BOOLEAN Retrying)
struct _LIST_ENTRY * Flink
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
LIST_ENTRY DeferredWriteLinks
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI CcRosReleaseVacb(PROS_SHARED_CACHE_MAP SharedCacheMap, PROS_VACB Vacb, BOOLEAN Valid, BOOLEAN Dirty, BOOLEAN Mapped)
VOID NTAPI KeReleaseSpinLockFromDpcLevel(IN PKSPIN_LOCK SpinLock)
struct _DEFERRED_WRITE DEFERRED_WRITE
enum _CC_CAN_WRITE_RETRY CC_CAN_WRITE_RETRY
#define KeAcquireSpinLock(sl, irql)
LIST_ENTRY CcDeferredWrites
VOID FASTCALL KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, IN KIRQL OldIrql)
#define CCTRACE(x, fmt,...)
MMPFNLIST MmModifiedPageListHead
static PFN_NUMBER CcZeroPage
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define FSRTL_FLAG_LIMIT_MODIFIED_PAGES
VOID NTAPI IoFreeMdl(PMDL Mdl)
PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
KSPIN_LOCK CcDeferredWriteSpinLock
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define BYTES_TO_PAGES(Size)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
LARGE_INTEGER FileOffset1
SIZE_T NTAPI MmSizeOfMdl(IN PVOID Base, IN SIZE_T Length)
VOID NTAPI CcInitCacheZeroPage(VOID)
NTSTATUS NTAPI CcWriteVirtualAddress(PROS_VACB Vacb)
IN PVOID IN PVOID IN USHORT IN USHORT Size
KIRQL FASTCALL KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber)
_In_ PNET_PNP_EVENT _In_ PTDI_PNP_CONTEXT _In_ PTDI_PNP_CONTEXT Context2
VOID CcScheduleLazyWriteScan(IN BOOLEAN NoDelay)
FORCEINLINE BOOLEAN DoRangesIntersect(_In_ LONGLONG Offset1, _In_ LONGLONG Length1, _In_ LONGLONG Offset2, _In_ LONGLONG Length2)
PMDL NTAPI IoAllocateMdl(IN PVOID VirtualAddress, IN ULONG Length, IN BOOLEAN SecondaryBuffer, IN BOOLEAN ChargeQuota, IN PIRP Irp)
ULONG CcFastMdlReadNotPossible
#define ROUND_DOWN(n, align)
#define KeInitializeEvent(pEvt, foo, foo2)
LARGE_INTEGER ReadAheadOffset[2]
VOID NTAPI MmProbeAndLockPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation)
#define ROUND_TO_PAGES(Size)
PFN_NUMBER NTAPI MmGetPfnForProcess(struct _EPROCESS *Process, PVOID Address)
NTSTATUS ReadWriteOrZero(_Inout_ PVOID BaseAddress, _Inout_opt_ PVOID Buffer, _In_ ULONG Length, _In_ CC_COPY_OPERATION Operation)
enum _CC_COPY_OPERATION CC_COPY_OPERATION
_In_ PFCB _In_ LONGLONG FileOffset
_In_ PNET_PNP_EVENT _In_ PTDI_PNP_CONTEXT Context1
NTSTATUS NTAPI IoSynchronousPageWrite(IN PFILE_OBJECT FileObject, IN PMDL Mdl, IN PLARGE_INTEGER Offset, IN PKEVENT Event, IN PIO_STATUS_BLOCK StatusBlock)
PCC_POST_DEFERRED_WRITE PostRoutine
#define KeReleaseSpinLock(sl, irql)
LARGE_INTEGER CcIdleDelay
LARGE_INTEGER FileOffset2
#define VACB_MAPPING_GRANULARITY
BOOLEAN NTAPI CcZeroData(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER StartOffset, IN PLARGE_INTEGER EndOffset, IN BOOLEAN Wait)
BOOLEAN NTAPI CcCopyWrite(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN PVOID Buffer)
struct tagContext Context
#define RtlZeroMemory(Destination, Length)
_In_ FLT_SET_CONTEXT_OPERATION Operation
#define _SEH2_EXCEPT(...)
void Clear(USHORT Window)
#define ExFreePoolWithTag(_P, _T)
#define _SEH2_GetExceptionCode()
#define PRIVATE_CACHE_MAP_READ_AHEAD_ACTIVE
NTSTATUS NTAPI CcRosRequestVacb(PROS_SHARED_CACHE_MAP SharedCacheMap, LONGLONG FileOffset, PVOID *BaseAddress, PBOOLEAN UptoDate, PROS_VACB *Vacb)
NTSTATUS NTAPI CcReadVirtualAddress(PROS_VACB Vacb)