21 #define MAX_ZERO_LENGTH (256 * 1024) 66 DbgPrint(
"Can't allocate CcZeroPage.\n");
98 if (DeferredWrite->
Event)
143 SharedCacheMap =
FileObject->SectionObjectPointer->SharedCacheMap;
152 PrivateCacheMap =
FileObject->PrivateCacheMap;
154 if (PrivateCacheMap ==
NULL)
197 if (PartialLength != 0)
221 CurrentOffset += PartialLength;
248 CurrentOffset += PartialLength;
254 PrivateCacheMap =
FileObject->PrivateCacheMap;
255 if (PrivateCacheMap !=
NULL)
305 TryContext = Retrying;
322 PerFileDefer =
FALSE;
338 SharedCacheMap =
FileObject->SectionObjectPointer->SharedCacheMap;
391 Context.BytesToWrite = BytesToWrite;
454 if ((ExceptionAddress >= BeginAddress) && (ExceptionAddress < EndAddress))
483 DPRINT(
"CcCopyRead(FileObject 0x%p, FileOffset %I64x, " 484 "Length %lu, Wait %u, Buffer 0x%p, IoStatus 0x%p)\n",
495 while(CurrentOffset < ReadEnd)
508 SIZE_T CopyLength = VacbLength;
526 CurrentOffset += VacbLength;
586 DPRINT(
"CcCopyWrite(FileObject 0x%p, FileOffset %I64x, " 587 "Length %lu, Wait %u, Buffer 0x%p)\n",
597 ASSERT(WriteEnd <= SharedCacheMap->SectionSize.QuadPart);
600 while(CurrentOffset < WriteEnd)
630 CurrentOffset += VacbLength;
669 CCTRACE(
CC_API_DEBUG,
"FileObject=%p PostRoutine=%p Context1=%p Context2=%p BytesToWrite=%lu Retrying=%d\n",
688 Context->PostRoutine = PostRoutine;
691 Context->BytesToWrite = BytesToWrite;
799 DPRINT(
"CcZeroData(FileObject 0x%p, StartOffset %I64x, EndOffset %I64x, " 800 "Wait %u)\n",
FileObject, StartOffset->QuadPart, EndOffset->QuadPart,
803 Length = EndOffset->QuadPart - StartOffset->QuadPart;
831 Mdl->ByteCount = CurrentLength;
BOOLEAN LimitModifiedPages
#define STATUS_INSUFFICIENT_RESOURCES
ULONG CcDirtyPageThreshold
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define Add2Ptr(PTR, INC)
#define MmGetMdlPfnArray(_Mdl)
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
LARGE_INTEGER SectionSize
LARGE_INTEGER BeyondLastByte2
#define BooleanFlagOn(F, SF)
#define DBG_UNREFERENCED_PARAMETER(P)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
_In_ WDFDPC _In_ BOOLEAN Wait
BOOLEAN NTAPI CcCanIWrite(IN PFILE_OBJECT FileObject, IN ULONG BytesToWrite, IN BOOLEAN Wait, IN BOOLEAN Retrying)
_Must_inspect_result_ _In_ WDFUSBPIPE _In_ WDFREQUEST _In_opt_ WDFMEMORY _In_opt_ PWDFMEMORY_OFFSET WriteOffset
FORCEINLINE PLIST_ENTRY RemoveTailList(_Inout_ PLIST_ENTRY ListHead)
VOID NTAPI KeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK SpinLock)
NTSTATUS NTAPI MmRequestPageMemoryConsumer(ULONG Consumer, BOOLEAN MyWait, PPFN_NUMBER AllocatedPage)
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
NTSTATUS CcRosGetVacb(PROS_SHARED_CACHE_MAP SharedCacheMap, LONGLONG FileOffset, PROS_VACB *Vacb)
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)
VOID CcPerformReadAhead(IN PFILE_OBJECT FileObject)
VOID NTAPI CcFastCopyRead(IN PFILE_OBJECT FileObject, IN ULONG FileOffset, IN ULONG Length, IN ULONG PageCount, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus)
PLIST_ENTRY NTAPI ExInterlockedRemoveHeadList(IN OUT PLIST_ENTRY ListHead, 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
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
NTSTATUS CcRosRequestVacb(PROS_SHARED_CACHE_MAP SharedCacheMap, LONGLONG FileOffset, PROS_VACB *Vacb)
VOID NTAPI MmUnmapLockedPages(IN PVOID BaseAddress, IN PMDL Mdl)
#define STATUS_INVALID_USER_BUFFER
_In_ PVOID _In_ ULONG Event
#define _SEH2_GetExceptionInformation()
LARGE_INTEGER BeyondLastByte1
VOID NTAPI CcFastCopyWrite(IN PFILE_OBJECT FileObject, IN ULONG FileOffset, IN ULONG Length, IN PVOID Buffer)
#define NODE_TYPE_DEFERRED_WRITE
#define _SEH2_AbnormalTermination()
PCACHE_MANAGER_CALLBACKS Callbacks
ULONG CcFastReadNotPossible
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)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
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)
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
LIST_ENTRY DeferredWriteLinks
#define NT_SUCCESS(StatCode)
#define EXCEPTION_EXECUTE_HANDLER
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
VOID NTAPI KeReleaseSpinLockFromDpcLevel(IN PKSPIN_LOCK SpinLock)
struct _DEFERRED_WRITE DEFERRED_WRITE
enum _CC_CAN_WRITE_RETRY CC_CAN_WRITE_RETRY
#define ObDereferenceObject
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
static int CcpCheckInvalidUserBuffer(PEXCEPTION_POINTERS Except, PVOID Buffer, ULONG Length)
#define FSRTL_FLAG_LIMIT_MODIFIED_PAGES
VOID NTAPI IoFreeMdl(PMDL Mdl)
PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
KSPIN_LOCK CcDeferredWriteSpinLock
#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
VOID NTAPI CcInitCacheZeroPage(VOID)
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)
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)
NTSTATUS NTAPI MmMakePagesDirty(_In_ PEPROCESS Process, _In_ PVOID Address, _In_ ULONG Length)
#define KeInitializeEvent(pEvt, foo, foo2)
BOOLEAN CcRosEnsureVacbResident(_In_ PROS_VACB Vacb, _In_ BOOLEAN Wait, _In_ BOOLEAN NoRead, _In_ ULONG Offset, _In_ ULONG Length)
LARGE_INTEGER ReadAheadOffset[2]
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
#define EXCEPTION_CONTINUE_SEARCH
#define STATUS_ACCESS_VIOLATION
_In_ PFCB _In_ LONGLONG FileOffset
#define InitializeListHead(ListHead)
_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
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
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)
struct tagContext Context
BOOLEAN NTAPI CcCopyWrite(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN PVOID Buffer)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
#define RtlZeroMemory(Destination, Length)
LARGE_INTEGER ValidDataLength
#define RtlCopyMemory(Destination, Source, Length)
NTSTATUS CcRosReleaseVacb(PROS_SHARED_CACHE_MAP SharedCacheMap, PROS_VACB Vacb, BOOLEAN Dirty, BOOLEAN Mapped)
PEXCEPTION_RECORD ExceptionRecord
#define _SEH2_EXCEPT(...)
void Clear(USHORT Window)
#define PRIVATE_CACHE_MAP_READ_AHEAD_ACTIVE
#define ExFreePoolWithTag(_P, _T)
PLIST_ENTRY NTAPI ExInterlockedInsertHeadList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)