- Add kdbreak.c with the following APIs: KdpLowWriteContent, KdpLowRestoreBreakpoint...
[reactos.git] / reactos / ntoskrnl / kd64 / kdapi.c
index 92a943c..99546b8 100644 (file)
@@ -243,6 +243,39 @@ KdpReadControlSpace(IN PDBGKD_MANIPULATE_STATE64 State,
                  &KdpContext);\r
 }\r
 \r
+VOID\r
+NTAPI\r
+KdpRestoreBreakpoint(IN PDBGKD_MANIPULATE_STATE64 State,\r
+                     IN PSTRING Data,\r
+                     IN PCONTEXT Context)\r
+{\r
+    PDBGKD_RESTORE_BREAKPOINT RestoreBp = &State->u.RestoreBreakPoint;\r
+    STRING Header;\r
+\r
+    /* Fill out the header */\r
+    Header.Length = sizeof(DBGKD_MANIPULATE_STATE64);\r
+    Header.Buffer = (PCHAR)State;\r
+    ASSERT(Data->Length == 0);\r
+\r
+    /* Get the version block */\r
+    if (KdpDeleteBreakpoint(RestoreBp->BreakPointHandle))\r
+    {\r
+        /* We're all good */\r
+        State->ReturnStatus = STATUS_SUCCESS;\r
+    }\r
+    else\r
+    {\r
+        /* We failed */\r
+        State->ReturnStatus = STATUS_UNSUCCESSFUL;\r
+    }\r
+\r
+    /* Send the packet */\r
+    KdSendPacket(PACKET_TYPE_KD_STATE_MANIPULATE,\r
+                 &Header,\r
+                 NULL,\r
+                 &KdpContext);\r
+}\r
+\r
 KCONTINUE_STATUS\r
 NTAPI\r
 KdpSendWaitContinue(IN ULONG PacketType,\r
@@ -327,8 +360,7 @@ SendPacket:
             case DbgKdRestoreBreakPointApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdRestoreBreakPointApi);\r
-                while (TRUE);\r
+                KdpRestoreBreakpoint(&ManipulateState, &Data, Context);\r
                 break;\r
 \r
             case DbgKdContinueApi:\r
@@ -862,7 +894,7 @@ KdEnableDebuggerWithLock(BOOLEAN NeedLock)
         {\r
             /* Reinitialize the Debugger */\r
             KdInitSystem(0, NULL) ;\r
-            //KdpRestoreAllBreakpoints();\r
+            KdpRestoreAllBreakpoints();\r
         }\r
     }\r
 \r