diff --git a/NTOSKRNL/CC/ccinternal.hpp b/NTOSKRNL/CC/ccinternal.hpp index 9d3e57c..94a0e72 100644 --- a/NTOSKRNL/CC/ccinternal.hpp +++ b/NTOSKRNL/CC/ccinternal.hpp @@ -144,3 +144,16 @@ private: } } }; + +template +ULONG CalculatePageCount(T Length, LARGE_INTEGER FileOffset) { + constexpr ULONG PAGE_OFFSET = 0xFFF; // 4095 (mask for the lower 12 bits) + constexpr ULONG PAGE_SHIFT = 12; // Shift by 12 bits for 4KB pages + + // Calculate the page count + ULONG pageCount = (Length >> PAGE_SHIFT) + + ((FileOffset.LowPart & PAGE_OFFSET) + 4095 + (Length & PAGE_OFFSET)) >> PAGE_SHIFT; + + return pageCount; +} +