15 #define MODULE_INVOLVED_IN_ARM3 18 #undef ExAllocatePoolWithQuota 19 #undef ExAllocatePoolWithQuotaTag 23 #define POOL_BIG_TABLE_ENTRY_FREE 0x1 53 #define POOL_ENTRY(x) (PPOOL_HEADER)((ULONG_PTR)(x) - sizeof(POOL_HEADER)) 54 #define POOL_FREE_BLOCK(x) (PLIST_ENTRY)((ULONG_PTR)(x) + sizeof(POOL_HEADER)) 55 #define POOL_BLOCK(x, i) (PPOOL_HEADER)((ULONG_PTR)(x) + ((i) * POOL_BLOCK_SIZE)) 56 #define POOL_NEXT_BLOCK(x) POOL_BLOCK((x), (x)->BlockSize) 57 #define POOL_PREV_BLOCK(x) POOL_BLOCK((x), -((x)->PreviousSize)) 190 if (
Entry->PreviousSize)
210 DPRINT1(
"PreviousEntry BlockSize %lu, tag %.4s. Entry PreviousSize %lu, tag %.4s\n",
212 Entry->PreviousSize, (
char *)&
Entry->PoolTag);
231 if (!
Entry->BlockSize)
234 if (
Entry->PreviousSize)
237 DPRINT1(
"PreviousEntry tag %.4s. Entry tag %.4s\n",
238 (
char *)&PreviousEntry->
PoolTag,
239 (
char *)&
Entry->PoolTag);
244 (
char *)&
Entry->PoolTag);
274 DPRINT1(
"Entry BlockSize %lu, tag %.4s. NextEntry PreviousSize %lu, tag %.4s\n",
340 DPRINT1(
"Allocation has wrong pool tag! Expected '%.4s', got '%.4s' (0x%08lx)\n",
349 RealPoolType = (
Entry->PoolType - 1);
358 DPRINT1(
"Wrong pool type! Expected %s, got %s\n",
471 #define ExpTagAllowPrint(Tag) \ 472 ((Tag) >= 0x20 && (Tag) <= 0x7E ) 475 #define MiDumperPrint(dbg, fmt, ...) \ 476 if (dbg) KdbpPrint(fmt, ##__VA_ARGS__); \ 477 else DPRINT1(fmt, ##__VA_ARGS__) 479 #define MiDumperPrint(dbg, fmt, ...) \ 480 DPRINT1(fmt, ##__VA_ARGS__) 494 DPRINT1(
"---------------------\n");
495 DPRINT1(
"Out of memory dumper!\n");
515 MiDumperPrint(CalledFromDbg,
"\t\t\t\tNonPaged\t\t\t\t\t\t\tPaged\n");
516 MiDumperPrint(CalledFromDbg,
"Tag\t\tAllocs\t\tFrees\t\tDiff\t\tUsed\t\tAllocs\t\tFrees\t\tDiff\t\tUsed\n");
520 MiDumperPrint(CalledFromDbg,
"\t\tNonPaged\t\t\tPaged\n");
521 MiDumperPrint(CalledFromDbg,
"Tag\t\tAllocs\t\tUsed\t\tAllocs\t\tUsed\n");
558 if (ExpTagAllowPrint(
Tag[0]) && ExpTagAllowPrint(
Tag[1]) && ExpTagAllowPrint(
Tag[2]) && ExpTagAllowPrint(
Tag[3]))
565 MiDumperPrint(CalledFromDbg,
"'%c%c%c%c'\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\n",
Tag[0],
Tag[1],
Tag[2],
Tag[3],
573 MiDumperPrint(CalledFromDbg,
"'%c%c%c%c'\t\t%ld\t\t%ld\t\t%ld\t\t%ld\n",
Tag[0],
Tag[1],
Tag[2],
Tag[3],
582 MiDumperPrint(CalledFromDbg,
"0x%08x\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\n",
TableEntry->Key,
590 MiDumperPrint(CalledFromDbg,
"0x%08x\t%ld\t\t%ld\t\t%ld\t\t%ld\n",
TableEntry->Key,
600 MiDumperPrint(CalledFromDbg,
"Anon\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\t\t%ld\n",
608 MiDumperPrint(CalledFromDbg,
"Anon\t\t%ld\t\t%ld\t\t%ld\t\t%ld\n",
618 DPRINT1(
"---------------------\n");
704 for (
i = 0;
i <
sizeof(TagList) /
sizeof(
ULONG);
i++)
816 DPRINT1(
"Empty item reached in tracker table. Hash=0x%lx, TableMask=0x%lx, Tag=0x%08lx, NumberOfBytes=%lu, PoolType=%d\n",
834 DPRINT1(
"Out of pool tag space, ignoring...\n");
952 DPRINT1(
"Out of pool tag space, ignoring...\n");
969 PoolDescriptor->PoolType =
PoolType;
970 PoolDescriptor->PoolIndex = PoolIndex;
971 PoolDescriptor->Threshold = Threshold;
972 PoolDescriptor->LockAddress = PoolLock;
977 PoolDescriptor->RunningAllocs = 0;
978 PoolDescriptor->RunningDeAllocs = 0;
979 PoolDescriptor->TotalPages = 0;
980 PoolDescriptor->TotalBytes = 0;
981 PoolDescriptor->TotalBigPages = 0;
986 PoolDescriptor->PendingFrees =
NULL;
987 PoolDescriptor->PendingFreeDepth = 0;
992 NextEntry = PoolDescriptor->ListHeads;
994 while (NextEntry < LastEntry)
1030 for (
i = 0;
i < 32;
i++)
1112 for (
i = 0;
i < 32;
i++)
1179 DPRINT(
"EXPOOL: Pool Tracker Table at: 0x%p with 0x%lx bytes\n",
1181 DPRINT(
"EXPOOL: Big Pool Tracker Table at: 0x%p with 0x%lx bytes\n",
1346 IN ULONG SystemInformationLength,
1365 TagEntry = &SystemInformation->TagInfo[0];
1366 SystemInformation->Count = 0;
1387 Context.PoolTrackTableSizeExpansion = 0;
1393 for (TrackerEntry =
Buffer; TrackerEntry < (
Buffer + EntryCount); TrackerEntry++)
1398 if (!TrackerEntry->
Key)
continue;
1404 SystemInformation->Count++;
1405 CurrentLength +=
sizeof(*TagEntry);
1406 if (SystemInformationLength < CurrentLength)
1451 ExpExpandBigPageTable(
1456 ULONG NewSizeInBytes;
1472 DPRINT1(
"Overflow expanding big page table. Size=%lu\n", OldSize);
1478 if (NewTable ==
NULL)
1480 DPRINT1(
"Could not allocate %lu bytes for new big page table\n", NewSizeInBytes);
1485 DPRINT(
"Expanding big pool tracker table to %lu entries\n",
NewSize);
1497 for (
i = 0;
i < OldSize;
i++)
1518 NewTable[
Hash] = OldTable[
i];
1586 Entry->NumberOfPages = NumberOfPages;
1600 DPRINT(
"Attempting expansion since we now have %lu entries\n",
1603 ExpExpandBigPageTable(
OldIrql);
1622 }
while (
Entry != EntryStart);
1629 if (ExpExpandBigPageTable(
OldIrql))
1634 DPRINT1(
"Big pool table expansion failed\n");
1699 *BigPages =
Entry->NumberOfPages;
1729 *PagedPoolPages = 0;
1730 *PagedPoolAllocs = 0;
1731 *PagedPoolFrees = 0;
1757 if (ExpNumberOfNonPagedPools > 1)
1759 for (
i = 0;
i < ExpNumberOfNonPagedPools;
i++)
1761 PoolDesc = ExpNonPagedPoolDescriptor[
i];
1778 ListEntry = ListEntry->
Flink)
1786 *NonPagedPoolLookasideHits +=
Lookaside->AllocateHits;
1790 *PagedPoolLookasideHits +=
Lookaside->AllocateHits;
1816 BlockSize =
Entry->BlockSize;
1826 DPRINT1(
"Object %p is not a process. Type %u, pool type 0x%x, block size %u\n",
1886 DPRINT1(
"Driver Verifier is not yet supported\n");
1968 DPRINT1(
"EX: ExAllocatePool (%lu, 0x%x) returning NULL\n",
2065 Entry->PoolType = OriginalType + 1;
2130 if (
Entry->BlockSize !=
i)
2135 if (
Entry->PreviousSize == 0)
2170 FragmentEntry =
Entry;
2237 Entry->PoolType = OriginalType + 1;
2310 DPRINT1(
"EX: ExAllocatePool (%lu, 0x%x) returning NULL\n",
2336 Entry->PoolType = OriginalType + 1;
2346 FragmentEntry->
Ulong1 = 0;
2429 Tag =
Tag >> 8 |
' ' << 24;
2481 DPRINT1(
"Verifier not yet supported\n");
2538 DPRINT1(
"We do not know the size of this allocation. This is not yet supported\n");
2550 if (TagToFree && TagToFree !=
Tag)
2552 DPRINT1(
"Freeing pool - invalid tag specified: %.4s != %.4s\n", (
char*)&TagToFree, (
char*)&
Tag);
2578 DPRINT1(
"Verifier not yet supported\n");
2598 ASSERT(RealPageCount == PageCount);
2600 -(
LONG)RealPageCount);
2616 BlockSize =
Entry->BlockSize;
2634 if (TagToFree && TagToFree !=
Tag)
2636 DPRINT1(
"Freeing pool - invalid tag specified: %.4s != %.4s\n", (
char*)&TagToFree, (
char*)&
Tag);
2647 Entry->PoolType - 1);
2659 DPRINT1(
"Object %p is not a process. Type %u, pool type 0x%x, block size %u\n",
2765 if (
Entry->PreviousSize)
2829 Entry->PoolType = 0;
2830 BlockSize =
Entry->BlockSize;
3031 else if (!(
Buffer) && (Raise))
_IRQL_requires_(DISPATCH_LEVEL)
#define KeGetCurrentIrql()
PVOID NTAPI ExAllocatePoolWithTag(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag)
static int Hash(const char *)
VOID NTAPI ExpSeedHotTags(VOID)
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
DECLSPEC_NORETURN NTSYSAPI VOID NTAPI RtlRaiseStatus(_In_ NTSTATUS Status)
GENERAL_LOOKASIDE_POOL PPNPagedLookasideList[NUMBER_POOL_LOOKASIDE_LISTS]
VOID NTAPI ExpCheckPoolLinks(IN PLIST_ENTRY ListHead)
PLIST_ENTRY NTAPI ExpRemovePoolHeadList(IN PLIST_ENTRY ListHead)
BOOLEAN NTAPI ExpIsPoolListEmpty(IN PLIST_ENTRY ListHead)
#define STATUS_INSUFFICIENT_RESOURCES
SIZE_T PoolTrackTableMask
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
VOID NTAPI InitializePool(IN POOL_TYPE PoolType, IN ULONG Threshold)
#define SESSION_POOL_MASK
VOID MiDumpPoolConsumers(BOOLEAN CalledFromDbg, ULONG Tag, ULONG Mask, ULONG Flags)
PVOID NTAPI ExAllocatePoolWithQuotaTag(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag)
#define STATUS_INFO_LENGTH_MISMATCH
NTSTATUS NTAPI PsChargeProcessPoolQuota(IN PEPROCESS Process, IN POOL_TYPE PoolType, IN SIZE_T Amount)
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _In_ _Strict_type_match_ POOL_TYPE _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_opt_ ULONG _Out_ WDFLOOKASIDE * Lookaside
LIST_ENTRY ExPoolLookasideListHead
#define POOL_FLAG_VERIFIER
SIZE_T PoolTrackTableSize
struct _KGUARDED_MUTEX * PKGUARDED_MUTEX
VOID NTAPI ExpCheckPoolAllocation(PVOID P, POOL_TYPE PoolType, ULONG Tag)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
IN BOOLEAN OUT PSTR Buffer
#define UNREFERENCED_PARAMETER(P)
#define BooleanFlagOn(F, SF)
#define POOL_FLAG_SPECIAL_POOL
struct _LIST_ENTRY * Blink
#define ExReleaseSpinLock(Lock, OldIrql)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
struct _EPROCESS * PEPROCESS
PLIST_ENTRY NTAPI ExpEncodePoolLink(IN PLIST_ENTRY Link)
SIZE_T PoolTrackTableSize
PLDR_DATA_TABLE_ENTRY NTAPI MiLookupDataTableEntry(IN PVOID Address)
#define POOL_FLAG_CRASH_ON_FAILURE
#define POOL_PREV_BLOCK(x)
IN PVOID IN PVOID IN USHORT IN USHORT Size
VOID NTAPI ExpRemovePoolEntryList(IN PLIST_ENTRY Entry)
VOID NTAPI ExReturnPoolQuota(IN PVOID P)
VOID NTAPI ExpInsertPoolHeadList(IN PLIST_ENTRY ListHead, IN PLIST_ENTRY Entry)
#define POOL_FREE_IRQL_INVALID
PKGUARDED_MUTEX ExpPagedPoolMutex
VOID NTAPI ExpInitializePoolListHead(IN PLIST_ENTRY ListHead)
LIST_ENTRY ListHeads[POOL_LISTS_PER_PAGE]
PVOID NTAPI MmAllocateSpecialPool(IN SIZE_T NumberOfBytes, IN ULONG Tag, IN POOL_TYPE PoolType, IN ULONG SpecialType)
#define ExAcquireSpinLock(Lock, OldIrql)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
static int Link(const char **args)
PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER ListHead)
BOOLEAN NTAPI ExpAddTagForBigPages(IN PVOID Va, IN ULONG Key, IN ULONG NumberOfPages, IN POOL_TYPE PoolType)
NTSTATUS NTAPI ExGetPoolTagInfo(IN PSYSTEM_POOLTAG_INFORMATION SystemInformation, IN ULONG SystemInformationLength, IN OUT PULONG ReturnLength OPTIONAL)
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE GENERAL_LOOKASIDE
KSPIN_LOCK ExpLargePoolTableLock
FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID)
#define POOL_FLAG_CHECK_TIMERS
#define POOL_FREE_BLOCK(x)
struct _POOL_DPC_CONTEXT POOL_DPC_CONTEXT
SIZE_T PoolTrackTableSizeExpansion
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PEPROCESS PsInitialSystemProcess
PPOOL_DESCRIPTOR PoolVector[2]
#define POOL_NEXT_BLOCK(x)
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE * PGENERAL_LOOKASIDE
enum _EX_POOL_PRIORITY EX_POOL_PRIORITY
VOID NTAPI ExInitializePoolDescriptor(IN PPOOL_DESCRIPTOR PoolDescriptor, IN POOL_TYPE PoolType, IN ULONG PoolIndex, IN ULONG Threshold, IN PVOID PoolLock)
SIZE_T PoolBigPageTableSize
#define InterlockedCompareExchangePointer
VOID NTAPI PsReturnPoolQuota(IN PEPROCESS Process, IN POOL_TYPE PoolType, IN SIZE_T Amount)
#define PsGetCurrentProcess
PPOOL_TRACKER_TABLE PoolTrackTableExpansion
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
struct _POOL_DPC_CONTEXT * PPOOL_DPC_CONTEXT
VOID NTAPI ExpCheckPoolHeader(IN PPOOL_HEADER Entry)
ULONG ExpNumberOfPagedPools
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
IN PSCSI_REQUEST_BLOCK IN OUT NTSTATUS IN OUT BOOLEAN * Retry
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFKEY * Key
ULONG ExpPoolBigEntriesInUse
ULONG NTAPI ExpFindAndRemoveTagBigPages(IN PVOID Va, OUT PULONG_PTR BigPages, IN POOL_TYPE PoolType)
#define BASE_POOL_TYPE_MASK
struct _POOL_TRACKER_TABLE POOL_TRACKER_TABLE
struct _POOL_HEADER * PPOOL_HEADER
#define InterlockedExchangeAdd
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 POOL_ALLOC_IRQL_INVALID
PVOID NTAPI ExAllocatePool(POOL_TYPE PoolType, SIZE_T NumberOfBytes)
VOID NTAPI ExpCheckPoolBlocks(IN PVOID Block)
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
PLIST_ENTRY NTAPI ExpDecodePoolLink(IN PLIST_ENTRY Link)
struct _LIST_ENTRY * Flink
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
POOL_TYPE NTAPI MmDeterminePoolType(IN PVOID VirtualAddress)
_Must_inspect_result_ _In_ ULONG Flags
VOID NTAPI ExpRemovePoolTracker(IN ULONG Key, IN SIZE_T NumberOfBytes, IN POOL_TYPE PoolType)
_Out_ PBOOLEAN QuotaCharged
PPOOL_TRACKER_TABLE PoolTrackTable
#define NT_SUCCESS(StatCode)
PPOOL_DESCRIPTOR ExpPagedPoolDescriptor[16+1]
_In_ WDFCOLLECTION _In_ ULONG Index
VOID NTAPI ExpGetPoolTagInfoTarget(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
#define KeAcquireSpinLock(sl, irql)
#define ObDereferenceObject
POOL_DESCRIPTOR NonPagedPoolDescriptor
VOID KdbpPrint(IN PCHAR Format, IN ... OPTIONAL)
Prints the given string with printf-like formatting.
ULONG ExpBigTableExpansionFailed
VOID FASTCALL KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, IN KIRQL OldIrql)
FORCEINLINE USHORT ExQueryDepthSList(_In_ PSLIST_HEADER SListHead)
PPOOL_TRACKER_TABLE PoolTrackTable
#define MUST_SUCCEED_POOL_MASK
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG PoolTag
PVOID NTAPI MiAllocatePoolPages(IN POOL_TYPE PoolType, IN SIZE_T SizeInBytes)
#define BYTES_TO_PAGES(Size)
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
ULONG NTAPI MiFreePoolPages(IN PVOID StartingAddress)
VOID NTAPI ExpInsertPoolTailList(IN PLIST_ENTRY ListHead, IN PLIST_ENTRY Entry)
#define InterlockedExchangeAddSizeT(a, b)
FORCEINLINE KIRQL ExLockPool(IN PPOOL_DESCRIPTOR Descriptor)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
FORCEINLINE VOID ExpCheckPoolIrqlLevel(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN PVOID Entry)
#define InterlockedDecrementUL(Addend)
_Must_inspect_result_ _In_ USHORT NewSize
NTKERNELAPI PSLIST_ENTRY FASTCALL InterlockedPushEntrySList(IN PSLIST_HEADER ListHead, IN PSLIST_ENTRY ListEntry)
KIRQL FASTCALL KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber)
PVOID NTAPI ExAllocatePoolWithQuota(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
#define POOL_FLAG_CHECK_DEADLOCK
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
#define InterlockedIncrement
VOID NTAPI KeSignalCallDpcDone(IN PVOID SystemArgument1)
#define NUMBER_POOL_LOOKASIDE_LISTS
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 ROUND_TO_PAGES(Size)
VOID NTAPI KeGenericCallDpc(IN PKDEFERRED_ROUTINE Routine, IN PVOID Context)
#define InterlockedIncrementUL(Addend)
SIZE_T NTAPI ExQueryPoolBlockSize(IN PVOID PoolBlock, OUT PBOOLEAN QuotaCharged)
#define POOL_FLAG_CHECK_WORKERS
UNICODE_STRING BaseDllName
#define FIELD_OFFSET(t, f)
PVOID NTAPI ExAllocatePoolWithTagPriority(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag, IN EX_POOL_PRIORITY Priority)
VOID NTAPI ExpInsertPoolTracker(IN ULONG Key, IN SIZE_T NumberOfBytes, IN POOL_TYPE PoolType)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER NumberOfBytes
#define KeReleaseSpinLock(sl, irql)
FORCEINLINE ULONG ExpComputeHashForTag(IN ULONG Tag, IN SIZE_T BucketMask)
#define POOL_FLAG_DBGPRINT_ON_FAILURE
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
FORCEINLINE ULONG ExpComputePartialHashForAddress(IN PVOID BaseAddress)
_Must_inspect_result_ typedef _In_ ULONG TableEntry
#define POOL_LISTS_PER_PAGE
PPOOL_TRACKER_BIG_PAGES PoolBigPageTable
SIZE_T PoolBigPageTableHash
#define POOL_BIG_TABLE_ENTRY_FREE
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
void * _ReturnAddress(void)
struct tagContext Context
#define ObReferenceObject
_Must_inspect_result_ typedef _Out_ PULONG TableSize
FORCEINLINE VOID ExUnlockPool(IN PPOOL_DESCRIPTOR Descriptor, IN KIRQL OldIrql)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
VOID NTAPI ExFreePool(PVOID P)
#define RtlZeroMemory(Destination, Length)
VOID NTAPI MmFreeSpecialPool(IN PVOID P)
#define ALIGN_UP_BY(size, align)
#define RtlCopyMemory(Destination, Source, Length)
BOOLEAN NTAPI MmUseSpecialPool(IN SIZE_T NumberOfBytes, IN ULONG Tag)
#define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
#define POOL_RAISE_IF_ALLOCATION_FAILURE
ULONG MmSizeOfNonPagedPoolInBytes
PLIST_ENTRY NTAPI ExpRemovePoolTailList(IN PLIST_ENTRY ListHead)
VOID NTAPI ExFreePoolWithTag(IN PVOID P, IN ULONG TagToFree)
BOOLEAN NTAPI MmIsSpecialPoolAddress(IN PVOID P)
ULONGLONG NTAPI KeQueryInterruptTime(VOID)
base of all file and directory entries
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
ULONGLONG MiLastPoolDumpTime
VOID NTAPI ExQueryPoolUsage(OUT PULONG PagedPoolPages, OUT PULONG NonPagedPoolPages, OUT PULONG PagedPoolAllocs, OUT PULONG PagedPoolFrees, OUT PULONG PagedPoolLookasideHits, OUT PULONG NonPagedPoolAllocs, OUT PULONG NonPagedPoolFrees, OUT PULONG NonPagedPoolLookasideHits)
#define POOL_BILLED_PROCESS_INVALID
_Must_inspect_result_ _In_ LPCGUID _In_ ULONG _In_ FSRTL_ALLOCATE_ECP_FLAGS _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK _Inout_ PVOID LookasideList
BOOLEAN NTAPI KeSignalCallDpcSynchronize(IN PVOID SystemArgument2)
#define POOL_FLAG_CHECK_RESOURCES
GENERAL_LOOKASIDE_POOL PPPagedLookasideList[NUMBER_POOL_LOOKASIDE_LISTS]
KSPIN_LOCK ExpTaggedPoolLock
PULONG MinorVersion OPTIONAL
_In_opt_ PVOID DeferredContext