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);