diff --git a/sdk/xtdk/amd64/mmtypes.h b/sdk/xtdk/amd64/mmtypes.h index 7f7e84a..0ce6129 100644 --- a/sdk/xtdk/amd64/mmtypes.h +++ b/sdk/xtdk/amd64/mmtypes.h @@ -110,6 +110,12 @@ /* Trampoline code address */ #define MM_TRAMPOLINE_ADDRESS 0x80000 +/* Pool block size */ +#define MM_POOL_BLOCK_SIZE 16 + +/* Number of pool lists per page */ +#define MM_POOL_LISTS_PER_PAGE (MM_PAGE_SIZE / MM_POOL_BLOCK_SIZE) + /* Page size enumeration list */ typedef enum _PAGE_SIZE { @@ -317,4 +323,22 @@ typedef struct _MMPFN } u4; } MMPFN, *PMMPFN; +/* Pool descriptor structure definition */ +typedef struct _POOL_DESCRIPTOR +{ + LIST_ENTRY ListHeads[MM_POOL_LISTS_PER_PAGE]; + PVOID LockAddress; + ULONG PoolIndex; + LONG PendingFreeDepth; + PVOID PendingFrees; + MMPOOL_TYPE PoolType; + ULONG RunningFrees; + ULONG RunningAllocations; + ULONG Threshold; + ULONG TotalPages; + ULONG TotalBigAllocations; + SIZE_T TotalBytes; + SIZE_T Reserved; +} POOL_DESCRIPTOR, *PPOOL_DESCRIPTOR; + #endif /* __XTDK_AMD64_MMTYPES_H */ diff --git a/sdk/xtdk/amd64/xtstruct.h b/sdk/xtdk/amd64/xtstruct.h index 64aa6d4..6868828 100644 --- a/sdk/xtdk/amd64/xtstruct.h +++ b/sdk/xtdk/amd64/xtstruct.h @@ -61,6 +61,7 @@ typedef struct _MMPTE_PROTOTYPE MMPTE_PROTOTYPE, *PMMPTE_PROTOTYPE; typedef struct _MMPTE_SOFTWARE MMPTE_SOFTWARE, *PMMPTE_SOFTWARE; typedef struct _MMPTE_SUBSECTION MMPTE_SUBSECTION, *PMMPTE_SUBSECTION; typedef struct _MMPTE_TRANSITION MMPTE_TRANSITION, *PMMPTE_TRANSITION; +typedef struct _POOL_DESCRIPTOR POOL_DESCRIPTOR, *PPOOL_DESCRIPTOR; typedef struct _THREAD_ENVIRONMENT_BLOCK THREAD_ENVIRONMENT_BLOCK, *PTHREAD_ENVIRONMENT_BLOCK; /* Unions forward references */ diff --git a/sdk/xtdk/i686/mmtypes.h b/sdk/xtdk/i686/mmtypes.h index 4445543..c539497 100644 --- a/sdk/xtdk/i686/mmtypes.h +++ b/sdk/xtdk/i686/mmtypes.h @@ -108,6 +108,12 @@ /* Trampoline code address */ #define MM_TRAMPOLINE_ADDRESS 0x80000 +/* Pool block size */ +#define MM_POOL_BLOCK_SIZE 8 + +/* Number of pool lists per page */ +#define MM_POOL_LISTS_PER_PAGE (MM_PAGE_SIZE / MM_POOL_BLOCK_SIZE) + /* Page size enumeration list */ typedef enum _PAGE_SIZE { @@ -410,4 +416,22 @@ typedef struct _MMPFN } u4; } MMPFN, *PMMPFN; +/* Pool descriptor structure definition */ +typedef struct _POOL_DESCRIPTOR +{ + LIST_ENTRY ListHeads[MM_POOL_LISTS_PER_PAGE]; + PVOID LockAddress; + ULONG PoolIndex; + LONG PendingFreeDepth; + PVOID PendingFrees; + MMPOOL_TYPE PoolType; + ULONG RunningFrees; + ULONG RunningAllocations; + ULONG Threshold; + ULONG TotalPages; + ULONG TotalBigAllocations; + SIZE_T TotalBytes; + SIZE_T Reserved; +} POOL_DESCRIPTOR, *PPOOL_DESCRIPTOR; + #endif /* __XTDK_I686_MMTYPES_H */ diff --git a/sdk/xtdk/i686/xtstruct.h b/sdk/xtdk/i686/xtstruct.h index 2f034d9..cb0a3d6 100644 --- a/sdk/xtdk/i686/xtstruct.h +++ b/sdk/xtdk/i686/xtstruct.h @@ -70,6 +70,7 @@ typedef struct _MMPML3_PTE_PROTOTYPE MMPML3_PTE_PROTOTYPE, *PMMPML3_PTE_PROTOTYP typedef struct _MMPML3_PTE_SOFTWARE MMPML3_PTE_SOFTWARE, *PMMPML3_PTE_SOFTWARE; typedef struct _MMPML3_PTE_SUBSECTION MMPML3_PTE_SUBSECTION, *PMMPML3_PTE_SUBSECTION; typedef struct _MMPML3_PTE_TRANSITION MMPML3_PTE_TRANSITION, *PMMPML3_PTE_TRANSITION; +typedef struct _POOL_DESCRIPTOR POOL_DESCRIPTOR, *PPOOL_DESCRIPTOR; typedef struct _THREAD_ENVIRONMENT_BLOCK THREAD_ENVIRONMENT_BLOCK, *PTHREAD_ENVIRONMENT_BLOCK; /* Unions forward references */ diff --git a/sdk/xtdk/mmtypes.h b/sdk/xtdk/mmtypes.h index 7858784..93a1142 100644 --- a/sdk/xtdk/mmtypes.h +++ b/sdk/xtdk/mmtypes.h @@ -33,9 +33,13 @@ #define MM_POOL_INVALID_ALLOC_RUNLEVEL 8 #define MM_POOL_INVALID_FREE_RUNLEVEL 9 +/* Big allocations entry flags */ +#define MM_POOL_BIG_ALLOCATIONS_ENTRY_FREE 0x1 + /* Number of reserved zeroed PTEs */ #define MM_RESERVED_ZERO_PTES 32 + /* Memory manager page lists */ typedef enum _MMPAGELISTS { @@ -66,14 +70,14 @@ typedef enum _MMPOOL_TYPE NonPagedPoolMustSucceed = 2, NonPagedPoolCacheAligned = 4, PagedPoolCacheAligned = 5, - NonPagedPoolCacheAlignedMustS = 6, + NonPagedPoolCacheAlignedMustSucceed = 6, MaxPoolType = 7, NonPagedPoolSession = 32, PagedPoolSession = 33, NonPagedPoolMustSucceedSession = 34, NonPagedPoolCacheAlignedSession = 36, PagedPoolCacheAlignedSession = 37, - NonPagedPoolCacheAlignedMustSSession = 38 + NonPagedPoolCacheAlignedMustSucceedSession = 38 } MMPOOL_TYPE, *PMMPOOL_TYPE; /* Page table pool types */ @@ -192,4 +196,39 @@ typedef struct _PHYSICAL_MEMORY_DESCRIPTOR PHYSICAL_MEMORY_RUN Run[1]; } PHYSICAL_MEMORY_DESCRIPTOR, *PPHYSICAL_MEMORY_DESCRIPTOR; +/* Pool header structure definition */ +typedef struct _POOL_HEADER +{ + union + { + struct + { + USHORT PreviousSize:9; + USHORT PoolIndex:7; + USHORT BlockSize:9; + USHORT PoolType:7; + }; + ULONG Long; + }; + union + { + ULONG PoolTag; + PEPROCESS ProcessBilled; + struct + { + USHORT AllocatorBackTraceIndex; + USHORT PoolTagHash; + }; + }; +} POOL_HEADER, *PPOOL_HEADER; + +/* Pool descriptor structure definition */ +typedef struct _POOL_TRACKER_BIG_ALLOCATIONS +{ + PVOID VirtualAddress; + ULONG Key; + ULONG NumberOfPages; + PVOID QuotaObject; +} POOL_TRACKER_BIG_ALLOCATIONS, *PPOOL_TRACKER_BIG_ALLOCATIONS; + #endif /* __XTDK_MMTYPES_H */ diff --git a/sdk/xtdk/xtstruct.h b/sdk/xtdk/xtstruct.h index 31c2337..9c8f999 100644 --- a/sdk/xtdk/xtstruct.h +++ b/sdk/xtdk/xtstruct.h @@ -312,6 +312,8 @@ typedef struct _PECOFF_IMAGE_SECTION_HEADER PECOFF_IMAGE_SECTION_HEADER, *PPECOF typedef struct _PECOFF_IMAGE_VXD_HEADER PECOFF_IMAGE_VXD_HEADER, *PPECOFF_IMAGE_VXD_HEADER; typedef struct _PHYSICAL_MEMORY_DESCRIPTOR PHYSICAL_MEMORY_DESCRIPTOR, *PPHYSICAL_MEMORY_DESCRIPTOR; typedef struct _PHYSICAL_MEMORY_RUN PHYSICAL_MEMORY_RUN, *PPHYSICAL_MEMORY_RUN; +typedef struct _POOL_HEADER POOL_HEADER, *PPOOL_HEADER; +typedef struct _POOL_TRACKER_BIG_ALLOCATIONS POOL_TRACKER_BIG_ALLOCATIONS, *PPOOL_TRACKER_BIG_ALLOCATIONS; typedef struct _PROCESSOR_IDENTITY PROCESSOR_IDENTITY, *PPROCESSOR_IDENTITY; typedef struct _PROCESSOR_POWER_STATE PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE; typedef struct _RTL_BITMAP RTL_BITMAP, *PRTL_BITMAP;