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.…
==============================================================================
--- 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);