- Use _SEH2_YIELD when returning from an exception instead of returning outside the...
[reactos.git] / reactos / ntoskrnl / dbgk / dbgkobj.c
index c59ad79..6b509a0 100644 (file)
@@ -1517,7 +1517,7 @@ NtCreateDebugObject(OUT PHANDLE DebugHandle,
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PDEBUG_OBJECT DebugObject;
     HANDLE hDebug;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PDEBUG_OBJECT DebugObject;
     HANDLE hDebug;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we were called from user mode*/
     PAGED_CODE();
 
     /* Check if we were called from user mode*/
@@ -1531,10 +1531,9 @@ NtCreateDebugObject(OUT PHANDLE DebugHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get exception error */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         } _SEH2_END;
         } _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Check for invalid flags */
     }
 
     /* Check for invalid flags */
@@ -1610,7 +1609,7 @@ NtDebugContinue(IN HANDLE DebugHandle,
 {
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PDEBUG_OBJECT DebugObject;
 {
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PDEBUG_OBJECT DebugObject;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PDEBUG_EVENT DebugEvent = NULL, DebugEventToWake = NULL;
     PLIST_ENTRY ListHead, NextEntry;
     BOOLEAN NeedsWake = FALSE;
     PDEBUG_EVENT DebugEvent = NULL, DebugEventToWake = NULL;
     PLIST_ENTRY ListHead, NextEntry;
     BOOLEAN NeedsWake = FALSE;
@@ -1632,10 +1631,9 @@ NtDebugContinue(IN HANDLE DebugHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get exception error */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         } _SEH2_END;
         } _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Make sure that the status is valid */
     }
 
     /* Make sure that the status is valid */
@@ -1869,7 +1867,7 @@ NtSetInformationDebugObject(IN HANDLE DebugHandle,
 {
     PDEBUG_OBJECT DebugObject;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PDEBUG_OBJECT DebugObject;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION DebugInfo = DebugInformation;
     PAGED_CODE();
 
     PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION DebugInfo = DebugInformation;
     PAGED_CODE();
 
@@ -1881,6 +1879,7 @@ NtSetInformationDebugObject(IN HANDLE DebugHandle,
                                        DebugInformation,
                                        DebugInformationLength,
                                        PreviousMode);
                                        DebugInformation,
                                        DebugInformationLength,
                                        PreviousMode);
+    if (!NT_SUCCESS(Status)) return Status;
 
     /* Check if the caller wanted the return length */
     if (ReturnLength)
 
     /* Check if the caller wanted the return length */
     if (ReturnLength)
@@ -1894,12 +1893,11 @@ NtSetInformationDebugObject(IN HANDLE DebugHandle,
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
-            /* Get SEH Exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
     }
         }
         _SEH2_END;
     }
-    if (!NT_SUCCESS(Status)) return Status;
 
     /* Open the Object */
     Status = ObReferenceObjectByHandle(DebugHandle,
 
     /* Open the Object */
     Status = ObReferenceObjectByHandle(DebugHandle,
@@ -1955,7 +1953,7 @@ NtWaitForDebugEvent(IN HANDLE DebugHandle,
     LARGE_INTEGER NewTime;
     PDEBUG_OBJECT DebugObject;
     DBGUI_WAIT_STATE_CHANGE WaitStateChange;
     LARGE_INTEGER NewTime;
     PDEBUG_OBJECT DebugObject;
     DBGUI_WAIT_STATE_CHANGE WaitStateChange;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PDEBUG_EVENT DebugEvent = NULL, DebugEvent2;
     PLIST_ENTRY ListHead, NextEntry, NextEntry2;
     PAGED_CODE();
     PDEBUG_EVENT DebugEvent = NULL, DebugEvent2;
     PLIST_ENTRY ListHead, NextEntry, NextEntry2;
     PAGED_CODE();
@@ -1987,11 +1985,10 @@ NtWaitForDebugEvent(IN HANDLE DebugHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {