37 #if DBG_ENABLE_EVENT_LOGGING 46 #define GDI_POOL_ALLOCATION_GRANULARITY 64 * 1024 103 DPRINT1(
"There are %lu allocations left, section=%p, pool=%p\n",
128 PVOID pvAlloc, pvBaseAddress;
144 DPRINT1(
"pSection->cAllocCount=%lu, pPool->cSlotsPerSection=%lu\n",
168 DPRINT1(
"Couldn't allocate a section\n");
227 DPRINT(
"GdiPoolallocate: %p\n", pvAlloc);
241 DPRINT(
"GdiPoolFree: %p\n", pvAlloc);
259 if (cjOffset < pPool->cjSectionSize)
303 DbgPrint(
"failed to free. pvAlloc=%p, base=%p, size=%lx\n",
324 if (!pPool)
return NULL;
FORCEINLINE VOID ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
VOID NTAPI GdiPoolFree(PGDI_POOL pPool, PVOID pvAlloc)
#define DBG_INITLOG(pslh)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
#define GDI_POOL_ALLOCATION_GRANULARITY
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
struct _GDI_POOL_SECTION * PGDI_POOL_SECTION
#define InsertTailList(ListHead, Entry)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
PGDI_POOL NTAPI GdiPoolCreate(ULONG cjAllocSize, ULONG ulTag)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define DBG_LOGEVENT(pslh, type, val)
FORCEINLINE VOID ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
struct _GDI_POOL_SECTION GDI_POOL_SECTION
NTSYSAPI ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP)
NTSYSAPI ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP, ULONG, ULONG)
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
#define ExInitializePushLock
PVOID NTAPI GdiPoolAllocate(PGDI_POOL pPool)
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)
#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size)
#define NtCurrentProcess()
struct _LIST_ENTRY * Flink
#define NT_SUCCESS(StatCode)
VOID NTAPI RtlClearBit(_In_ PRTL_BITMAP BitMapHeader, _In_ BITMAP_INDEX BitNumber)
_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlTestBit(_In_ PRTL_BITMAP BitMapHeader, _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber)
void * EngAllocMem(int zero, unsigned long size, int tag=0)
#define DBG_DUMP_EVENT_LIST(pslh)
#define KeEnterCriticalRegion()
struct _GDI_POOL GDI_POOL
_In_ ULONG _In_ ULONG ulTag
#define KeLeaveCriticalRegion()
#define InitializeListHead(ListHead)
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
#define DBG_CLEANUP_EVENT_LIST(pslh)
static PGDI_POOL_SECTION GdiPoolAllocateSection(PGDI_POOL pPool)
static VOID GdiPoolDeleteSection(PGDI_POOL pPool, PGDI_POOL_SECTION pSection)
static SERVICE_STATUS status
VOID NTAPI GdiPoolDestroy(PGDI_POOL pPool)