[ros-diffs] [ion] 24999: - Update Dbgk test application to test Win32 as well (definable by a compile-time #define).

ion at svn.reactos.org ion at svn.reactos.org
Thu Nov 30 20:02:22 CET 2006


Author: ion
Date: Thu Nov 30 22:02:22 2006
New Revision: 24999

URL: http://svn.reactos.org/svn/reactos?rev=24999&view=rev
Log:
- Update Dbgk test application to test Win32 as well (definable by a compile-time #define).

Modified:
    trunk/reactos/ntoskrnl/tests/TestDebug.c

Modified: trunk/reactos/ntoskrnl/tests/TestDebug.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/tests/TestDebug.c?rev=24999&r1=24998&r2=24999&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/tests/TestDebug.c (original)
+++ trunk/reactos/ntoskrnl/tests/TestDebug.c Thu Nov 30 22:02:22 2006
@@ -1,16 +1,30 @@
+#define NATIVE 0
+
+#if NATIVE
 #define _X86_
 #include "ntndk.h"
+#else
+#include "stdio.h"
+#include "windows.h"
+#endif
 
 VOID
 Main(VOID)
 {
+#if NATIVE
     NTSTATUS Status;
-    HANDLE hProcess;
     OBJECT_ATTRIBUTES ObjectAttributes;
     CLIENT_ID ClientId;
     DBGUI_WAIT_STATE_CHANGE State;
+#else
+    DWORD Error, BytesRead;
+    DEBUG_EVENT DebugEvent;
+    WCHAR ImageName[MAX_PATH];
+#endif
+    HANDLE hProcess;
     BOOLEAN Alive = TRUE;
 
+#if NATIVE
     printf("*** Native (DbgUi) Debugging Test Application\n");
     printf("Press any key to connect to Dbgk...");
     getchar();
@@ -19,8 +33,13 @@
     printf(" Connection Established. Status: %lx\n", Status);
     printf("Debug Object Handle: %lx\n", NtCurrentTeb()->DbgSsReserved[1]);
     printf("Press any key to debug services.exe...");
+#else
+    printf("*** Win32 (Debug) Debugging Test Application\n");
+    printf("Press any key to debug services.exe...");
+#endif
     getchar();
 
+#if NATIVE
     InitializeObjectAttributes(&ObjectAttributes, NULL, 0, 0, 0);
     ClientId.UniqueThread = 0;
     ClientId.UniqueProcess = UlongToHandle(168);
@@ -29,20 +48,41 @@
                            &ObjectAttributes,
                            &ClientId);
     Status = DbgUiDebugActiveProcess(hProcess);
+#else
+    Error = DebugActiveProcess(2648);
+#endif
+
+#if NATIVE
     printf(" Debugger Attached. Status: %lx\n", Status);
+#else
+    printf(" Debugger Attached. Error: %lx\n", Error);
+#endif
     printf("Press any key to get first debug event... ");
     getchar();
 
     while (Alive)
     {
+#if NATIVE
         Status = DbgUiWaitStateChange(&State, NULL);
         printf(" Event Received. Status: %lx\n", Status);
         printf("New State: %lx. Application Client ID: %lx/%lx\n",
                State.NewState,
                State.AppClientId.UniqueProcess, State.AppClientId.UniqueThread);
+#else
+        Error = WaitForDebugEvent(&DebugEvent, -1);
+        printf(" Event Received. Error: %lx\n", Error);
+        printf("New State: %lx. Application Client ID: %lx/%lx\n",
+               DebugEvent.dwDebugEventCode,
+               DebugEvent.dwProcessId, DebugEvent.dwThreadId);
+#endif
 
+#if NATIVE
         switch (State.NewState)
+#else
+        switch (DebugEvent.dwDebugEventCode)
+#endif
         {
+#if NATIVE
             case DbgCreateProcessStateChange:
                 printf("Process Handle: %lx. Thread Handle: %lx\n",
                     State.StateInfo.CreateProcessInfo.HandleToProcess,
@@ -51,40 +91,98 @@
                     State.StateInfo.CreateProcessInfo.NewProcess.FileHandle);
                 printf("Process image base: %lx\n",
                     State.StateInfo.CreateProcessInfo.NewProcess.BaseOfImage);
+#else
+            case CREATE_PROCESS_DEBUG_EVENT:
+                printf("Process Handle: %lx. Thread Handle: %lx\n",
+                        DebugEvent.u.CreateProcessInfo.hProcess,
+                        DebugEvent.u.CreateProcessInfo.hThread);
+                printf("Process image handle: %lx\n",
+                        DebugEvent.u.CreateProcessInfo.hFile);
+                printf("Process image base: %lx\n",
+                        DebugEvent.u.CreateProcessInfo.lpBaseOfImage);
+                hProcess = DebugEvent.u.CreateProcessInfo.hProcess;
+#endif
                 break;
 
+#if NATIVE
             case DbgCreateThreadStateChange:
                 printf("New thread: %lx\n", State.StateInfo.CreateThread.HandleToThread);
                 printf("Thread Start Address: %p\n", State.StateInfo.CreateThread.NewThread.StartAddress);
+#else
+            case CREATE_THREAD_DEBUG_EVENT:
+                printf("New thread: %lx\n", DebugEvent.u.CreateThread.hThread);
+                printf("Thread Start Address: %p\n",
+                        DebugEvent.u.CreateThread.lpStartAddress);
+#endif
                 break;
 
+#if NATIVE
             case DbgLoadDllStateChange:
                 printf("New DLL: %lx\n", State.StateInfo.LoadDll.FileHandle);
                 printf("DLL LoadAddress: %p\n", State.StateInfo.LoadDll.BaseOfDll);
+#else
+            case LOAD_DLL_DEBUG_EVENT:
+                printf("New DLL: %lx\n", DebugEvent.u.LoadDll.hFile);
+                printf("DLL LoadAddress: %p\n", DebugEvent.u.LoadDll.lpBaseOfDll);
+                Error = ReadProcessMemory(hProcess,
+                                          DebugEvent.u.LoadDll.lpImageName,
+                                          &DebugEvent.u.LoadDll.lpImageName,
+                                          sizeof(DebugEvent.u.LoadDll.lpImageName),
+                                          &BytesRead);
+                if (DebugEvent.u.LoadDll.lpImageName)
+                {
+                    Error = ReadProcessMemory(hProcess,
+                                              DebugEvent.u.LoadDll.lpImageName,
+                                              ImageName,
+                                              sizeof(ImageName),
+                                              &BytesRead);
+                    printf("DLL Name: %S\n", ImageName);
+                }
+#endif
                 break;
 
+#if NATIVE
             case DbgBreakpointStateChange:
                 printf("Initial breakpoint hit at: %p!\n",
                        State.StateInfo.Exception.ExceptionRecord.ExceptionAddress);
+#else
+
+#endif
                 break;
 
+#if NATIVE
             case DbgExitThreadStateChange:
                 printf("Thread exited: %lx\n", State.StateInfo.ExitThread.ExitStatus);
+#else
+
+#endif
                 break;
 
+#if NATIVE
             case DbgExitProcessStateChange:
                 printf("Process exited: %lx\n", State.StateInfo.ExitProcess.ExitStatus);
                 Alive = FALSE;
+#else
+
+#endif
                 break;
         }
 
         printf("Press any key to continue debuggee...");
         getchar();
 
+#if NATIVE
         ClientId.UniqueProcess = State.AppClientId.UniqueProcess;
         ClientId.UniqueThread = State.AppClientId.UniqueThread;
         Status = DbgUiContinue(&ClientId, DBG_CONTINUE);
         printf(" Debuggee Resumed. Status: %lx\n", Status);
+#else
+        Error = ContinueDebugEvent(DebugEvent.dwProcessId,
+                                   DebugEvent.dwThreadId,
+                                   DBG_CONTINUE);
+        printf(" Debuggee Resumed. Error: %lx\n", Error);
+#endif
+
         printf("Press any key to get next debug event... ");
         getchar();
     };




More information about the Ros-diffs mailing list