mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 00:45:49 +00:00
[KMTESTS:EX]
- Test that quota allocations keep their QUOTA_POOL_MASK bit in POOL_HEADER svn path=/trunk/; revision=60175
This commit is contained in:
parent
3aad455588
commit
4dcd167f3e
2 changed files with 28 additions and 2 deletions
|
@ -131,6 +131,7 @@ extern PDRIVER_OBJECT KmtDriverObject;
|
||||||
VOID KmtSetIrql(IN KIRQL NewIrql);
|
VOID KmtSetIrql(IN KIRQL NewIrql);
|
||||||
BOOLEAN KmtAreInterruptsEnabled(VOID);
|
BOOLEAN KmtAreInterruptsEnabled(VOID);
|
||||||
ULONG KmtGetPoolTag(PVOID Memory);
|
ULONG KmtGetPoolTag(PVOID Memory);
|
||||||
|
USHORT KmtGetPoolType(PVOID Memory);
|
||||||
#elif defined KMT_USER_MODE
|
#elif defined KMT_USER_MODE
|
||||||
DWORD KmtRunKernelTest(IN PCSTR TestName);
|
DWORD KmtRunKernelTest(IN PCSTR TestName);
|
||||||
|
|
||||||
|
@ -334,6 +335,20 @@ ULONG KmtGetPoolTag(PVOID Memory)
|
||||||
return Header->PoolTag;
|
return Header->PoolTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
USHORT KmtGetPoolType(PVOID Memory)
|
||||||
|
{
|
||||||
|
PPOOL_HEADER Header;
|
||||||
|
|
||||||
|
/* it's not so easy for allocations of PAGE_SIZE */
|
||||||
|
if (((ULONG_PTR)Memory & (PAGE_SIZE - 1)) == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
Header = Memory;
|
||||||
|
Header--;
|
||||||
|
|
||||||
|
return Header->PoolType;
|
||||||
|
}
|
||||||
|
|
||||||
INT __cdecl KmtVSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR Format, va_list Arguments) KMT_FORMAT(ms_printf, 3, 0);
|
INT __cdecl KmtVSNPrintF(PSTR Buffer, SIZE_T BufferMaxLength, PCSTR Format, va_list Arguments) KMT_FORMAT(ms_printf, 3, 0);
|
||||||
#elif defined KMT_USER_MODE
|
#elif defined KMT_USER_MODE
|
||||||
static PKMT_RESULTBUFFER KmtAllocateResultBuffer(SIZE_T ResultBufferSize)
|
static PKMT_RESULTBUFFER KmtAllocateResultBuffer(SIZE_T ResultBufferSize)
|
||||||
|
|
|
@ -10,6 +10,11 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
|
#define TAG_POOLTEST 'tstP'
|
||||||
|
|
||||||
|
#define BASE_POOL_TYPE_MASK 1
|
||||||
|
#define QUOTA_POOL_MASK 8
|
||||||
|
|
||||||
static
|
static
|
||||||
LONG
|
LONG
|
||||||
GetRefCount(
|
GetRefCount(
|
||||||
|
@ -19,8 +24,6 @@ GetRefCount(
|
||||||
return Header->PointerCount;
|
return Header->PointerCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TAG_POOLTEST 'tstP'
|
|
||||||
|
|
||||||
static VOID PoolsTest(VOID)
|
static VOID PoolsTest(VOID)
|
||||||
{
|
{
|
||||||
PVOID Ptr;
|
PVOID Ptr;
|
||||||
|
@ -190,6 +193,7 @@ TestPoolQuota(VOID)
|
||||||
PVOID Memory;
|
PVOID Memory;
|
||||||
LONG InitialRefCount;
|
LONG InitialRefCount;
|
||||||
LONG RefCount;
|
LONG RefCount;
|
||||||
|
USHORT PoolType;
|
||||||
NTSTATUS ExceptionStatus;
|
NTSTATUS ExceptionStatus;
|
||||||
|
|
||||||
InitialRefCount = GetRefCount(Process);
|
InitialRefCount = GetRefCount(Process);
|
||||||
|
@ -212,6 +216,13 @@ TestPoolQuota(VOID)
|
||||||
StoredProcess = ((PVOID *)((ULONG_PTR)Memory + 2 * sizeof(LIST_ENTRY)))[-1];
|
StoredProcess = ((PVOID *)((ULONG_PTR)Memory + 2 * sizeof(LIST_ENTRY)))[-1];
|
||||||
ok_eq_pointer(StoredProcess, Process);
|
ok_eq_pointer(StoredProcess, Process);
|
||||||
|
|
||||||
|
/* Pool type should have QUOTA_POOL_MASK set */
|
||||||
|
PoolType = KmtGetPoolType(Memory);
|
||||||
|
ok(PoolType != 0, "PoolType is 0\n");
|
||||||
|
PoolType--;
|
||||||
|
ok(PoolType & QUOTA_POOL_MASK, "PoolType = %x\n", PoolType);
|
||||||
|
ok((PoolType & BASE_POOL_TYPE_MASK) == PagedPool, "PoolType = %x\n", PoolType);
|
||||||
|
|
||||||
ExFreePoolWithTag(Memory, 'tQmK');
|
ExFreePoolWithTag(Memory, 'tQmK');
|
||||||
RefCount = GetRefCount(Process);
|
RefCount = GetRefCount(Process);
|
||||||
ok_eq_long(RefCount, InitialRefCount);
|
ok_eq_long(RefCount, InitialRefCount);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue