Author: tfaber
Date: Sat Jul  9 22:02:54 2011
New Revision: 52592

URL: http://svn.reactos.org/svn/reactos?rev=52592&view=rev
Log:
[KMTESTS]
- decrease log buffer size because ROS has a problem with unlocking it 
otherwise ;)
- add test for critical/guarded regions
- add test for executive resources (part 1)

Added:
    branches/GSoC_2011/KMTestSuite/kmtests/ntos_ex/ExResource.c   (with props)
    branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeApc.c   (with props)
Modified:
    branches/GSoC_2011/KMTestSuite/kmtests/CMakeLists.txt
    branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c
    branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv.rbuild
    branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv/testlist.c
    branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeDpc.c

Modified: branches/GSoC_2011/KMTestSuite/kmtests/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/CMakeLists.txt?rev=52592&r1=52591&r2=52592&view=diff
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/CMakeLists.txt [iso-8859-1] 
(original)
+++ branches/GSoC_2011/KMTestSuite/kmtests/CMakeLists.txt [iso-8859-1] Sat Jul  
9 22:02:54 2011
@@ -15,11 +15,13 @@
 
     example/Example.c
     ntos_ex/ExPools.c
+    ntos_ex/ExResource.c
     ntos_ex/ExTimer.c
     ntos_fsrtl/FsRtlExpression.c
     ntos_io/IoDeviceInterface.c
     ntos_io/IoIrp.c
     ntos_io/IoMdl.c
+    ntos_ke/KeApc.c
     ntos_ke/KeDpc.c
     ntos_ke/KeIrql.c
     ntos_ke/KeProcessor.c

Modified: branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c?rev=52592&r1=52591&r2=52592&view=diff
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c [iso-8859-1] 
(original)
+++ branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c [iso-8859-1] Sat Jul 
 9 22:02:54 2011
@@ -23,7 +23,7 @@
 #define SERVICE_NAME        L"Kmtest"
 #define SERVICE_PATH        L"kmtest_drv.sys"
 
-#define LOGBUFFER_SIZE      65000
+#define LOGBUFFER_SIZE      16364
 #define RESULTBUFFER_SIZE   FIELD_OFFSET(KMT_RESULTBUFFER, 
LogBuffer[LOGBUFFER_SIZE])
 
 HANDLE KmtestHandle;

Modified: branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv.rbuild
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv.rbuild?rev=52592&r1=52591&r2=52592&view=diff
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv.rbuild [iso-8859-1] 
(original)
+++ branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv.rbuild [iso-8859-1] Sat 
Jul  9 22:02:54 2011
@@ -14,6 +14,7 @@
        </directory>
        <directory name="ntos_ex">
                <file>ExPools.c</file>
+               <file>ExResource.c</file>
                <file>ExTimer.c</file>
        </directory>
        <directory name="ntos_fsrtl">
@@ -25,6 +26,7 @@
                <file>IoMdl.c</file>
        </directory>
        <directory name="ntos_ke">
+               <file>KeApc.c</file>
                <file>KeDpc.c</file>
                <file>KeIrql.c</file>
                <file>KeProcessor.c</file>

Modified: branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv/testlist.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv/testlist.c?rev=52592&r1=52591&r2=52592&view=diff
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv/testlist.c [iso-8859-1] 
(original)
+++ branches/GSoC_2011/KMTestSuite/kmtests/kmtest_drv/testlist.c [iso-8859-1] 
Sat Jul  9 22:02:54 2011
@@ -10,11 +10,13 @@
 
 KMT_TESTFUNC Test_Example;
 KMT_TESTFUNC Test_ExPools;
+KMT_TESTFUNC Test_ExResource;
 KMT_TESTFUNC Test_ExTimer;
 KMT_TESTFUNC Test_FsRtlExpression;
 KMT_TESTFUNC Test_IoDeviceInterface;
 KMT_TESTFUNC Test_IoIrp;
 KMT_TESTFUNC Test_IoMdl;
+KMT_TESTFUNC Test_KeApc;
 KMT_TESTFUNC Test_KeDpc;
 KMT_TESTFUNC Test_KeIrql;
 KMT_TESTFUNC Test_KeProcessor;
@@ -24,11 +26,13 @@
 {
     { "Example",            Test_Example },
     { "ExPools",            Test_ExPools },
+    { "ExResource",         Test_ExResource },
     { "ExTimer",            Test_ExTimer },
     { "FsRtlExpression",    Test_FsRtlExpression },
     { "IoDeviceInterface",  Test_IoDeviceInterface },
     { "IoIrp",              Test_IoIrp },
     { "IoMdl",              Test_IoMdl },
+    { "KeApc",              Test_KeApc },
     { "KeDpc",              Test_KeDpc },
     { "KeIrql",             Test_KeIrql },
     { "KeProcessor",        Test_KeProcessor },

Added: branches/GSoC_2011/KMTestSuite/kmtests/ntos_ex/ExResource.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/ntos_ex/ExResource.c?rev=52592&view=auto
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/ntos_ex/ExResource.c (added)
+++ branches/GSoC_2011/KMTestSuite/kmtests/ntos_ex/ExResource.c [iso-8859-1] 
Sat Jul  9 22:02:54 2011
@@ -1,0 +1,270 @@
+/*
+ * PROJECT:         ReactOS kernel-mode tests
+ * LICENSE:         GPLv2+ - See COPYING in the top level directory
+ * PURPOSE:         Kernel-Mode Test Suite Executive Resource test
+ * PROGRAMMER:      Thomas Faber <[email protected]>
+ */
+
+#undef NTDDI_VERSION
+#define NTDDI_VERSION NTDDI_WS03SP1
+#include <ntddk.h>
+#include <ntifs.h>
+#include <ndk/extypes.h>
+#include <kmt_test.h>
+#include <pseh/pseh2.h>
+
+//#define NDEBUG
+#include <debug.h>
+
+/* TODO: this is the Windows Server 2003 version! ROS should use this!
+ *       This declaration can be removed once ROS headers are corrected */
+typedef struct _ERESOURCE_2K3 {
+  LIST_ENTRY SystemResourcesList;
+  POWNER_ENTRY OwnerTable;
+  SHORT ActiveCount;
+  USHORT Flag;
+  volatile PKSEMAPHORE SharedWaiters;
+  volatile PKEVENT ExclusiveWaiters;
+  OWNER_ENTRY OwnerThreads[2];
+  ULONG ContentionCount;
+  USHORT NumberOfSharedWaiters;
+  USHORT NumberOfExclusiveWaiters;
+#if defined(_WIN64)
+  PVOID Reserved2; /* TODO: not sure if this should be in here for 2k3 */
+#endif
+  _ANONYMOUS_UNION union {
+    PVOID Address;
+    ULONG_PTR CreatorBackTraceIndex;
+  } DUMMYUNIONNAME;
+  KSPIN_LOCK SpinLock;
+} ERESOURCE_2K3, *PERESOURCE_2K3;
+
+#define CheckResourceFields(Res) do                                            
                                 \
+{                                                                              
                                 \
+    ok_eq_pointer((Res)->SystemResourcesList.Flink->Blink, 
&(Res)->SystemResourcesList);                        \
+    ok_eq_pointer((Res)->SystemResourcesList.Blink->Flink, 
&(Res)->SystemResourcesList);                        \
+    ok_eq_pointer((Res)->OwnerTable, NULL);                                    
                                 \
+    ok_eq_int((Res)->ActiveCount, 0);                                          
                                 \
+    ok_eq_uint((Res)->Flag, 0);                                                
                                 \
+    ok_eq_pointer((Res)->SharedWaiters, NULL);                                 
                                 \
+    ok_eq_pointer((Res)->ExclusiveWaiters, NULL);                              
                                 \
+    ok_eq_pointer((PVOID)(Res)->OwnerThreads[0].OwnerThread, NULL);            
                                 \
+    ok_eq_ulong((Res)->OwnerThreads[0].TableSize, 0LU);                        
                                 \
+    ok_eq_pointer((PVOID)(Res)->OwnerThreads[1].OwnerThread, NULL);            
                                 \
+    ok_eq_ulong((Res)->OwnerThreads[1].TableSize, 0LU);                        
                                 \
+    ok_eq_ulong((Res)->ContentionCount, 0LU);                                  
                                 \
+    ok_eq_uint((Res)->NumberOfSharedWaiters, 0);                               
                                 \
+    ok_eq_uint((Res)->NumberOfExclusiveWaiters, 0);                            
                                 \
+    /* ok_eq_pointer((Res)->Reserved2, NULL); */                               
                                 \
+    ok_eq_pointer((Res)->Address, NULL);                                       
                                 \
+    ok_eq_pointer((PVOID)(Res)->SpinLock, NULL);                               
                                 \
+} while (0)
+
+#define CheckResourceStatus(Res, Exclusive, Shared, ExclusiveWaiters, 
SharedWaiters) do                         \
+{                                                                              
                                 \
+    if (Exclusive)                                                             
                                 \
+        ok_bool_true(ExIsResourceAcquiredExclusiveLite(Res), 
"ExIsResourceAcquiredExclusiveLite returned");     \
+    else                                                                       
                                 \
+        ok_bool_false(ExIsResourceAcquiredExclusiveLite(Res), 
"ExIsResourceAcquiredExclusiveLite returned");    \
+    ok_eq_ulong(ExIsResourceAcquiredSharedLite(Res), Shared);                  
                                 \
+    ok_eq_ulong(ExGetExclusiveWaiterCount(Res), ExclusiveWaiters);             
                                 \
+    ok_eq_ulong(ExGetSharedWaiterCount(Res), SharedWaiters);                   
                                 \
+} while (0)
+
+static
+VOID
+TestResourceSharedAccess(
+    IN PERESOURCE Res)
+{
+    LONG Count = 0;
+
+    KeEnterCriticalRegion();
+    ok_bool_true(ExAcquireResourceSharedLite(Res, FALSE), 
"ExAcquireResourceSharedLite returned"); ++Count;
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    ok_bool_true(ExAcquireResourceSharedLite(Res, FALSE), 
"ExAcquireResourceSharedLite returned"); ++Count;
+    ok_bool_true(ExAcquireResourceSharedLite(Res, TRUE), 
"ExAcquireResourceSharedLite returned"); ++Count;
+    ok_bool_true(ExAcquireSharedStarveExclusive(Res, FALSE), 
"ExAcquireSharedStarveExclusive returned"); ++Count;
+    ok_bool_true(ExAcquireSharedStarveExclusive(Res, TRUE), 
"ExAcquireSharedStarveExclusive returned"); ++Count;
+    ok_bool_true(ExAcquireSharedWaitForExclusive(Res, FALSE), 
"ExAcquireSharedWaitForExclusive returned"); ++Count;
+    ok_bool_true(ExAcquireSharedWaitForExclusive(Res, TRUE), 
"ExAcquireSharedWaitForExclusive returned"); ++Count;
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    /* this one fails, TRUE would deadlock */
+    ok_bool_false(ExAcquireResourceExclusiveLite(Res, FALSE), 
"ExAcquireResourceExclusiveLite returned");
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    /* this must not crash or deadlock (but can assert) */
+    ExConvertExclusiveToSharedLite(Res);
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    while (Count--)
+        ExReleaseResourceLite(Res);
+    KeLeaveCriticalRegion();
+}
+
+static
+VOID
+TestResourceExclusiveAccess(
+    IN PERESOURCE Res)
+{
+    LONG Count = 0;
+
+    KeEnterCriticalRegion();
+    ok_bool_true(ExAcquireResourceExclusiveLite(Res, FALSE), 
"ExAcquireResourceExclusiveLite returned"); ++Count;
+
+    CheckResourceStatus(Res, TRUE, Count, 0LU, 0LU);
+
+    ok_bool_true(ExAcquireResourceExclusiveLite(Res, TRUE), 
"ExAcquireResourceExclusiveLite returned"); ++Count;
+    CheckResourceStatus(Res, TRUE, Count, 0LU, 0LU);
+
+    ok_bool_true(ExAcquireResourceSharedLite(Res, FALSE), 
"ExAcquireResourceSharedLite returned"); ++Count;
+    ok_bool_true(ExAcquireResourceSharedLite(Res, TRUE), 
"ExAcquireResourceSharedLite returned"); ++Count;
+    ok_bool_true(ExAcquireSharedStarveExclusive(Res, FALSE), 
"ExAcquireSharedStarveExclusive returned"); ++Count;
+    ok_bool_true(ExAcquireSharedStarveExclusive(Res, TRUE), 
"ExAcquireSharedStarveExclusive returned"); ++Count;
+    ok_bool_true(ExAcquireSharedWaitForExclusive(Res, FALSE), 
"ExAcquireSharedWaitForExclusive returned"); ++Count;
+    ok_bool_true(ExAcquireSharedWaitForExclusive(Res, TRUE), 
"ExAcquireSharedWaitForExclusive returned"); ++Count;
+    CheckResourceStatus(Res, TRUE, Count, 0LU, 0LU);
+
+    ExConvertExclusiveToSharedLite(Res);
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    while (Count--)
+        ExReleaseResourceLite(Res);
+    KeLeaveCriticalRegion();
+}
+
+static
+VOID
+TestResourceUndocumentedShortcuts(
+    IN PERESOURCE Res,
+    IN BOOLEAN AreApcsDisabled)
+{
+    PVOID Ret;
+    LONG Count = 0;
+
+    ok_bool_false(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_uint(KeAreAllApcsDisabled(), AreApcsDisabled);
+
+    /* ExEnterCriticalRegionAndAcquireResourceShared, 
ExEnterCriticalRegionAndAcquireSharedWaitForExclusive */
+    Count = 0;
+    Ret = ExEnterCriticalRegionAndAcquireResourceShared(Res); ++Count;
+    ok_eq_pointer(Ret, KeGetCurrentThread()->Win32Thread);
+    ok_bool_true(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    Ret = ExEnterCriticalRegionAndAcquireResourceShared(Res); ++Count;
+    ok_eq_pointer(Ret, KeGetCurrentThread()->Win32Thread);
+    ok_bool_true(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(Res); ++Count;
+    ok_eq_pointer(Ret, KeGetCurrentThread()->Win32Thread);
+    ok_bool_true(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    while (Count-- > 1)
+    {
+        ExReleaseResourceAndLeaveCriticalRegion(Res);
+        ok_bool_true(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+        ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+        CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+    }
+
+    ExReleaseResourceAndLeaveCriticalRegion(Res);
+    ok_bool_false(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+
+    /* ExEnterCriticalRegionAndAcquireResourceExclusive */
+    Count = 0;
+    ok_bool_false(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+    Ret = ExEnterCriticalRegionAndAcquireResourceExclusive(Res); ++Count;
+    ok_eq_pointer(Ret, KeGetCurrentThread()->Win32Thread);
+    ok_bool_true(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+    CheckResourceStatus(Res, TRUE, Count, 0LU, 0LU);
+
+    Ret = ExEnterCriticalRegionAndAcquireResourceExclusive(Res); ++Count;
+    ok_eq_pointer(Ret, KeGetCurrentThread()->Win32Thread);
+    ok_bool_true(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+    CheckResourceStatus(Res, TRUE, Count, 0LU, 0LU);
+
+    ExReleaseResourceAndLeaveCriticalRegion(Res); --Count;
+    ok_bool_true(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_bool(KeAreAllApcsDisabled(), AreApcsDisabled);
+    CheckResourceStatus(Res, TRUE, Count, 0LU, 0LU);
+
+    ExReleaseResourceAndLeaveCriticalRegion(Res); --Count;
+    ok_bool_false(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    ok_eq_uint(KeAreAllApcsDisabled(), AreApcsDisabled);
+    CheckResourceStatus(Res, FALSE, Count, 0LU, 0LU);
+}
+
+START_TEST(ExResource)
+{
+    NTSTATUS Status;
+    ERESOURCE Res;
+    KIRQL Irql;
+
+    /* this must be true even with the different structure versions */
+    ASSERT(sizeof(ERESOURCE) == sizeof(ERESOURCE_2K3));
+
+    /* functional tests & internals */
+    Irql = KeRaiseIrqlToDpcLevel();
+      Status = ExInitializeResourceLite(&Res);
+      ok_eq_hex(Status, STATUS_SUCCESS);
+    KeLowerIrql(APC_LEVEL);
+
+      Status = ExDeleteResourceLite(&Res);
+      ok_eq_hex(Status, STATUS_SUCCESS);
+    KeLowerIrql(Irql);
+
+    memset(&Res, 0x55, sizeof Res);
+    Status = ExInitializeResourceLite(&Res);
+    ok_eq_hex(Status, STATUS_SUCCESS);
+    CheckResourceFields((PERESOURCE_2K3)&Res);
+
+    CheckResourceStatus(&Res, FALSE, 0LU, 0LU, 0LU);
+
+    TestResourceSharedAccess(&Res);
+    CheckResourceStatus(&Res, FALSE, 0LU, 0LU, 0LU);
+
+    TestResourceExclusiveAccess(&Res);
+    CheckResourceStatus(&Res, FALSE, 0LU, 0LU, 0LU);
+
+    TestResourceUndocumentedShortcuts(&Res, FALSE);
+    CheckResourceStatus(&Res, FALSE, 0LU, 0LU, 0LU);
+    KeRaiseIrql(APC_LEVEL, &Irql);
+      TestResourceUndocumentedShortcuts(&Res, TRUE);
+    KeLowerIrql(Irql);
+    ok_bool_false(KeAreApcsDisabled(), "KeAreApcsDisabled returned");
+    CheckResourceStatus(&Res, FALSE, 0LU, 0LU, 0LU);
+
+    /* ExReinitializeResourceLite cleans up after us */
+    Status = ExReinitializeResourceLite(&Res);
+    ok_eq_hex(Status, STATUS_SUCCESS);
+    CheckResourceFields((PERESOURCE_2K3)&Res);
+    CheckResourceStatus(&Res, FALSE, 0LU, 0LU, 0LU);
+
+    Status = ExDeleteResourceLite(&Res);
+    ok_eq_hex(Status, STATUS_SUCCESS);
+
+    /* parameter checks */
+    Status = STATUS_SUCCESS;
+    _SEH2_TRY {
+        ExInitializeResourceLite(NULL);
+    } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
+        Status = _SEH2_GetExceptionCode();
+    } _SEH2_END;
+    ok_eq_hex(Status, STATUS_ACCESS_VIOLATION);
+
+    /* these bugcheck
+    ExDeleteResourceLite(NULL);
+    Status = ExDeleteResourceLite(&Res);*/
+}

Propchange: branches/GSoC_2011/KMTestSuite/kmtests/ntos_ex/ExResource.c
------------------------------------------------------------------------------
    svn:eol-style = native

Added: branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeApc.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeApc.c?rev=52592&view=auto
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeApc.c (added)
+++ branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeApc.c [iso-8859-1] Sat Jul 
 9 22:02:54 2011
@@ -1,0 +1,153 @@
+/*
+ * PROJECT:         ReactOS kernel-mode tests
+ * LICENSE:         GPLv2+ - See COPYING in the top level directory
+ * PURPOSE:         Kernel-Mode Test Suite Asynchronous Procedure Call test
+ * PROGRAMMER:      Thomas Faber <[email protected]>
+ */
+
+#undef NTDDI_VERSION
+#define NTDDI_VERSION NTDDI_WS03SP1
+#include <ntddk.h>
+#include <kmt_test.h>
+
+#define CheckApcs(KernelApcsDisabled, SpecialApcsDisabled, Irql) do \
+{                                                                   \
+    ok_eq_bool(KeAreApcsDisabled(), KernelApcsDisabled);            \
+    ok_eq_bool(KeAreAllApcsDisabled(), SpecialApcsDisabled);        \
+    ok_irql(Irql);                                                  \
+} while (0)
+
+START_TEST(KeApc)
+{
+    KIRQL Irql;
+
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    /* critical region */
+    KeEnterCriticalRegion();
+      CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+      KeEnterCriticalRegion();
+        CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+        KeEnterCriticalRegion();
+          CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+        KeLeaveCriticalRegion();
+        CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+      KeLeaveCriticalRegion();
+      CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+    KeLeaveCriticalRegion();
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    /* guarded region */
+    KeEnterGuardedRegion();
+      CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+      KeEnterGuardedRegion();
+        CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+        KeEnterGuardedRegion();
+          CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+        KeLeaveGuardedRegion();
+        CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+      KeLeaveGuardedRegion();
+      CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+    KeLeaveGuardedRegion();
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    /* mix them */
+    KeEnterGuardedRegion();
+      CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+      KeEnterCriticalRegion();
+        CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+      KeLeaveCriticalRegion();
+      CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+    KeLeaveGuardedRegion();
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    KeEnterCriticalRegion();
+      CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+      KeEnterGuardedRegion();
+        CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+      KeLeaveGuardedRegion();
+      CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+    KeLeaveCriticalRegion();
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    /* raised irql - APC_LEVEL should disable APCs */
+    KeRaiseIrql(APC_LEVEL, &Irql);
+      CheckApcs(FALSE, TRUE, APC_LEVEL);
+    KeLowerIrql(Irql);
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    /* KeAre*ApcsDisabled are documented to work up to DISPATCH_LEVEL... */
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+      CheckApcs(FALSE, TRUE, DISPATCH_LEVEL);
+    KeLowerIrql(Irql);
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    /* ... but also work on higher levels! */
+    KeRaiseIrql(HIGH_LEVEL, &Irql);
+      CheckApcs(FALSE, TRUE, HIGH_LEVEL);
+    KeLowerIrql(Irql);
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    /* now comes the crazy stuff */
+    KeRaiseIrql(HIGH_LEVEL, &Irql);
+      CheckApcs(FALSE, TRUE, HIGH_LEVEL);
+      KeEnterCriticalRegion();
+        CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+      KeLeaveCriticalRegion();
+      CheckApcs(FALSE, TRUE, HIGH_LEVEL);
+
+      KeEnterGuardedRegion();
+        CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+      KeLeaveGuardedRegion();
+      CheckApcs(FALSE, TRUE, HIGH_LEVEL);
+    KeLowerIrql(Irql);
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    KeRaiseIrql(HIGH_LEVEL, &Irql);
+    CheckApcs(FALSE, TRUE, HIGH_LEVEL);
+    KeEnterCriticalRegion();
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeEnterGuardedRegion();
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeLowerIrql(Irql);
+    CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+    KeLeaveCriticalRegion();
+    CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+    KeLeaveGuardedRegion();
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    KeEnterGuardedRegion();
+    CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+    KeRaiseIrql(HIGH_LEVEL, &Irql);
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeEnterCriticalRegion();
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeLeaveGuardedRegion();
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeLowerIrql(Irql);
+    CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+    KeLeaveCriticalRegion();
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    KeEnterCriticalRegion();
+    CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+    KeRaiseIrql(HIGH_LEVEL, &Irql);
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeEnterGuardedRegion();
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeLeaveCriticalRegion();
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeLowerIrql(Irql);
+    CheckApcs(TRUE, TRUE, PASSIVE_LEVEL);
+    KeLeaveGuardedRegion();
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+
+    KeEnterCriticalRegion();
+    CheckApcs(TRUE, FALSE, PASSIVE_LEVEL);
+    KeRaiseIrql(HIGH_LEVEL, &Irql);
+    CheckApcs(TRUE, TRUE, HIGH_LEVEL);
+    KeLeaveCriticalRegion();
+    CheckApcs(FALSE, TRUE, HIGH_LEVEL);
+    KeLowerIrql(Irql);
+    CheckApcs(FALSE, FALSE, PASSIVE_LEVEL);
+}

Propchange: branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeApc.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeDpc.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeDpc.c?rev=52592&r1=52591&r2=52592&view=diff
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeDpc.c [iso-8859-1] 
(original)
+++ branches/GSoC_2011/KMTestSuite/kmtests/ntos_ke/KeDpc.c [iso-8859-1] Sat Jul 
 9 22:02:54 2011
@@ -82,12 +82,12 @@
     ok_eq_uint(Dpc.Type, DpcObject);
     ok_eq_uint(Dpc.Importance, DpcImportance);
     ok_eq_uint(Dpc.Number, 0);
-    ok_eq_pointer(Dpc.DpcListEntry.Flink, (LIST_ENTRY *)0x5555555555555555);
-    ok_eq_pointer(Dpc.DpcListEntry.Blink, (LIST_ENTRY *)0x5555555555555555);
+    ok_eq_pointer(Dpc.DpcListEntry.Flink, (LIST_ENTRY *)0x5555555555555555LL);
+    ok_eq_pointer(Dpc.DpcListEntry.Blink, (LIST_ENTRY *)0x5555555555555555LL);
     ok_eq_pointer(Dpc.DeferredRoutine, DpcHandler);
     ok_eq_pointer(Dpc.DeferredContext, &Dpc);
-    ok_eq_pointer(Dpc.SystemArgument1, (PVOID)0x5555555555555555);
-    ok_eq_pointer(Dpc.SystemArgument2, (PVOID)0x5555555555555555);
+    ok_eq_pointer(Dpc.SystemArgument1, (PVOID)0x5555555555555555LL);
+    ok_eq_pointer(Dpc.SystemArgument2, (PVOID)0x5555555555555555LL);
     ok_eq_pointer(Dpc.DpcData, NULL);
 
     /* simply run the Dpc a few times */
@@ -117,8 +117,6 @@
           KeRaiseIrql(HIGH_LEVEL, &Irql3);
             ok_dpccount();
           KeLowerIrql(Irql3);
-          ok_dpccount();
-          DPRINT1("This is a debug print\n");
           ok_dpccount();
         KeLowerIrql(Irql2);
         ++ExpectedDpcCount;


Reply via email to