- Use _SEH2_YIELD when returning from an exception instead of returning outside the...
[reactos.git] / reactos / ntoskrnl / lpc / reply.c
index a0630ac..0233ea1 100644 (file)
@@ -160,12 +160,12 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
 {
     PLPCP_PORT_OBJECT Port, ReceivePort, ConnectionPort = NULL;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode(), WaitMode = PreviousMode;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PLPCP_MESSAGE Message;
     PETHREAD Thread = PsGetCurrentThread(), WakeupThread;
     PLPCP_CONNECTION_MESSAGE ConnectMessage;
     ULONG ConnectionInfoLength;
-    PORT_MESSAGE CapturedReplyMessage;
+    //PORT_MESSAGE CapturedReplyMessage;
     LARGE_INTEGER CapturedTimeout;
 
     PAGED_CODE();
@@ -178,13 +178,13 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
 
     if (KeGetPreviousMode() == UserMode)
     {
-        _SEH_TRY
+        _SEH2_TRY
         {
             if (ReplyMessage != NULL)
             {
                 ProbeForRead(ReplyMessage, sizeof(PORT_MESSAGE), sizeof(ULONG));
-                RtlCopyMemory(&CapturedReplyMessage, ReplyMessage, sizeof(PORT_MESSAGE));
-                ReplyMessage = &CapturedReplyMessage;
+                /*RtlCopyMemory(&CapturedReplyMessage, ReplyMessage, sizeof(PORT_MESSAGE));
+                ReplyMessage = &CapturedReplyMessage;*/
             }
 
             if (Timeout != NULL)
@@ -197,15 +197,13 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
             if (PortContext != NULL)
                 ProbeForWritePointer(PortContext);
         }
-        _SEH_EXCEPT(_SEH_ExSystemExceptionFilter)
+        _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
-            Status = _SEH_GetExceptionCode();
+            DPRINT1("SEH crash [1]\n");
+            DbgBreakPoint();
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
-        _SEH_END;
-
-        /* Bail out if pointer was invalid */
-        if (!NT_SUCCESS(Status))
-            return Status;
+        _SEH2_END;
     }
     else
     {
@@ -425,7 +423,7 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
     Thread->LpcReceivedMessageId = Message->Request.MessageId;
     Thread->LpcReceivedMsgIdValid = TRUE;
 
-    _SEH_TRY
+    _SEH2_TRY
     {
         /* Check if this was a connection request */
         if (LpcpGetMessageType(&Message->Request) == LPC_CONNECTION_REQUEST)
@@ -490,11 +488,13 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
             ASSERT(FALSE);
         }
     }
-    _SEH_EXCEPT(_SEH_ExSystemExceptionFilter)
+    _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
-        Status = _SEH_GetExceptionCode();
+        DPRINT1("SEH crash [2]\n");
+        DbgBreakPoint();
+        Status = _SEH2_GetExceptionCode();
     }
-    _SEH_END;
+    _SEH2_END;
 
     /* Check if we have a message pointer here */
     if (Message)