Author: tfaber Date: Mon Sep 16 19:02:28 2013 New Revision: 60175
URL: http://svn.reactos.org/svn/reactos?rev=60175&view=rev Log: [KMTESTS:EX] - Test that quota allocations keep their QUOTA_POOL_MASK bit in POOL_HEADER
Modified: trunk/rostests/kmtests/include/kmt_test.h trunk/rostests/kmtests/ntos_ex/ExPools.c
Modified: trunk/rostests/kmtests/include/kmt_test.h URL: http://svn.reactos.org/svn/reactos/trunk/rostests/kmtests/include/kmt_test.h... ============================================================================== --- trunk/rostests/kmtests/include/kmt_test.h [iso-8859-1] (original) +++ trunk/rostests/kmtests/include/kmt_test.h [iso-8859-1] Mon Sep 16 19:02:28 2013 @@ -131,6 +131,7 @@ VOID KmtSetIrql(IN KIRQL NewIrql); BOOLEAN KmtAreInterruptsEnabled(VOID); ULONG KmtGetPoolTag(PVOID Memory); +USHORT KmtGetPoolType(PVOID Memory); #elif defined KMT_USER_MODE DWORD KmtRunKernelTest(IN PCSTR TestName);
@@ -334,6 +335,20 @@ 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); #elif defined KMT_USER_MODE static PKMT_RESULTBUFFER KmtAllocateResultBuffer(SIZE_T ResultBufferSize)
Modified: trunk/rostests/kmtests/ntos_ex/ExPools.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/kmtests/ntos_ex/ExPools.c?... ============================================================================== --- trunk/rostests/kmtests/ntos_ex/ExPools.c [iso-8859-1] (original) +++ trunk/rostests/kmtests/ntos_ex/ExPools.c [iso-8859-1] Mon Sep 16 19:02:28 2013 @@ -10,6 +10,11 @@ #define NDEBUG #include <debug.h>
+#define TAG_POOLTEST 'tstP' + +#define BASE_POOL_TYPE_MASK 1 +#define QUOTA_POOL_MASK 8 + static LONG GetRefCount( @@ -18,8 +23,6 @@ POBJECT_HEADER Header = OBJECT_TO_OBJECT_HEADER(Object); return Header->PointerCount; } - -#define TAG_POOLTEST 'tstP'
static VOID PoolsTest(VOID) { @@ -190,6 +193,7 @@ PVOID Memory; LONG InitialRefCount; LONG RefCount; + USHORT PoolType; NTSTATUS ExceptionStatus;
InitialRefCount = GetRefCount(Process); @@ -211,6 +215,13 @@ /* A pointer to the process is found right before the next pool header */ StoredProcess = ((PVOID *)((ULONG_PTR)Memory + 2 * sizeof(LIST_ENTRY)))[-1]; 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'); RefCount = GetRefCount(Process);