- Re-enable user mode probes in KiRaiseException; they do not seem to be an issue anymore -- booting and running the ntdll exception Winetest didn't reveal any issue. Put a breakpoint there in case this code is ever hit (unlikely).
svn path=/trunk/; revision=42923
IN va_list ap,
IN BOOLEAN HandleBreakpoint)
{
IN va_list ap,
IN BOOLEAN HandleBreakpoint)
{
- NTSTATUS Status = STATUS_SUCCESS;
ANSI_STRING DebugString;
CHAR Buffer[512];
ULONG Length, PrefixLength;
ANSI_STRING DebugString;
CHAR Buffer[512];
ULONG Length, PrefixLength;
!(NtQueryDebugFilterState(ComponentId, Level)))
{
/* This message is masked */
!(NtQueryDebugFilterState(ComponentId, Level)))
{
/* This message is masked */
}
/* For user mode, don't recursively DbgPrint */
}
/* For user mode, don't recursively DbgPrint */
- if (RtlpSetInDbgPrint(TRUE)) return Status;
+ if (RtlpSetInDbgPrint(TRUE)) return STATUS_SUCCESS;
/* Guard against incorrect pointers */
_SEH2_TRY
/* Guard against incorrect pointers */
_SEH2_TRY
{
/* Fail */
Length = PrefixLength = 0;
{
/* Fail */
Length = PrefixLength = 0;
- Status = _SEH2_GetExceptionCode();
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
- if (!NT_SUCCESS(Status)) return Status;
/* Check if we went past the buffer */
if (Length == -1U)
/* Check if we went past the buffer */
if (Length == -1U)
IN ULONG CreateOptions,
OUT PULONG Disposition OPTIONAL)
{
IN ULONG CreateOptions,
OUT PULONG Disposition OPTIONAL)
{
- NTSTATUS Status = STATUS_SUCCESS;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
CM_PARSE_CONTEXT ParseContext = {0};
HANDLE Handle;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
CM_PARSE_CONTEXT ParseContext = {0};
HANDLE Handle;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- /* Get the error code */
- Status = _SEH2_GetExceptionCode();
+ /* Return the exception code */
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
- if(!NT_SUCCESS(Status)) return Status;
{
CM_PARSE_CONTEXT ParseContext = {0};
HANDLE Handle;
{
CM_PARSE_CONTEXT ParseContext = {0};
HANDLE Handle;
- NTSTATUS Status = STATUS_SUCCESS;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PAGED_CODE();
DPRINT("NtOpenKey(OB 0x%wZ)\n", ObjectAttributes->ObjectName);
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PAGED_CODE();
DPRINT("NtOpenKey(OB 0x%wZ)\n", ObjectAttributes->ObjectName);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- /* Get the status */
- Status = _SEH2_GetExceptionCode();
+ /* Return the exception code */
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
- if(!NT_SUCCESS(Status)) return Status;
}
/* Just let the object manager handle this */
}
/* Just let the object manager handle this */
sizeof(ULONG));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
sizeof(ULONG));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
-
- if (!NT_SUCCESS(Status))
{
/* Dereference and return status */
ObDereferenceObject(KeyObject);
{
/* Dereference and return status */
ObDereferenceObject(KeyObject);
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
}
/* Setup the callback */
}
/* Setup the callback */
sizeof(ULONG));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
sizeof(ULONG));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
-
- if (!NT_SUCCESS(Status))
{
/* Dereference and return status */
ObDereferenceObject(KeyObject);
{
/* Dereference and return status */
ObDereferenceObject(KeyObject);
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
}
/* Setup the callback */
}
/* Setup the callback */
sizeof(ULONG));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
sizeof(ULONG));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
-
- if (!NT_SUCCESS(Status))
{
/* Dereference and return status */
ObDereferenceObject(KeyObject);
{
/* Dereference and return status */
ObDereferenceObject(KeyObject);
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
}
/* Setup the callback */
}
/* Setup the callback */
sizeof(ULONG));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
sizeof(ULONG));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
-
- if (!NT_SUCCESS(Status))
{
/* Dereference and return status */
ObDereferenceObject(KeyObject);
{
/* Dereference and return status */
ObDereferenceObject(KeyObject);
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
}
/* Make sure the name is aligned properly */
}
/* Make sure the name is aligned properly */
- NTSTATUS Status = STATUS_SUCCESS;
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING ObjectName;
CM_PARSE_CONTEXT ParseContext = {0};
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING ObjectName;
CM_PARSE_CONTEXT ParseContext = {0};
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- /* Get the error code */
- Status = _SEH2_GetExceptionCode();
+ /* Return the exception code */
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
- if(!NT_SUCCESS(Status)) return Status;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PDEBUG_OBJECT DebugObject;
HANDLE hDebug;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PDEBUG_OBJECT DebugObject;
HANDLE hDebug;
- NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
/* Check if we were called from user mode*/
PAGED_CODE();
/* Check if we were called from user mode*/
}
_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());
- if (!NT_SUCCESS(Status)) return Status;
}
/* Check for invalid flags */
}
/* Check for invalid flags */
{
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PDEBUG_OBJECT DebugObject;
{
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PDEBUG_OBJECT DebugObject;
- NTSTATUS Status = STATUS_SUCCESS;
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;
}
_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());
- if (!NT_SUCCESS(Status)) return Status;
}
/* Make sure that the status is valid */
}
/* Make sure that the status is valid */
{
PDEBUG_OBJECT DebugObject;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
{
PDEBUG_OBJECT DebugObject;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
- NTSTATUS Status = STATUS_SUCCESS;
PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION DebugInfo = DebugInformation;
PAGED_CODE();
PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION DebugInfo = DebugInformation;
PAGED_CODE();
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)
}
_SEH2_EXCEPT(ExSystemExceptionFilter())
{
}
_SEH2_EXCEPT(ExSystemExceptionFilter())
{
- /* Get SEH Exception code */
- Status = _SEH2_GetExceptionCode();
+ /* Return the exception code */
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
- if (!NT_SUCCESS(Status)) return Status;
/* Open the Object */
Status = ObReferenceObjectByHandle(DebugHandle,
/* Open the Object */
Status = ObReferenceObjectByHandle(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;
PDEBUG_EVENT DebugEvent = NULL, DebugEvent2;
PLIST_ENTRY ListHead, NextEntry, NextEntry2;
PAGED_CODE();
PDEBUG_EVENT DebugEvent = NULL, DebugEvent2;
PLIST_ENTRY ListHead, NextEntry, NextEntry2;
PAGED_CODE();
}
_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());
- if (!NT_SUCCESS(Status)) return Status;
ULONG ParameterCount, Size;
NTSTATUS Status = STATUS_SUCCESS;
ULONG ParameterCount, Size;
NTSTATUS Status = STATUS_SUCCESS;
- /* Set up SEH */
- _SEH2_TRY
+ /* Check if we need to probe */
+ if (PreviousMode != KernelMode)
- /* Check the previous mode */
- if (PreviousMode != KernelMode)
+ /* Set up SEH */
+ _SEH2_TRY
/* Probe the context */
ProbeForRead(Context, sizeof(CONTEXT), sizeof(ULONG));
/* Probe the context */
ProbeForRead(Context, sizeof(CONTEXT), sizeof(ULONG));
FIELD_OFFSET(EXCEPTION_RECORD, NumberParameters) +
sizeof(ULONG),
sizeof(ULONG));
FIELD_OFFSET(EXCEPTION_RECORD, NumberParameters) +
sizeof(ULONG),
sizeof(ULONG));
/* Validate the maximum parameters */
if ((ParameterCount = ExceptionRecord->NumberParameters) >
EXCEPTION_MAXIMUM_PARAMETERS)
/* Validate the maximum parameters */
if ((ParameterCount = ExceptionRecord->NumberParameters) >
EXCEPTION_MAXIMUM_PARAMETERS)
/* Update the parameter count */
ExceptionRecord->NumberParameters = ParameterCount;
}
/* Update the parameter count */
ExceptionRecord->NumberParameters = ParameterCount;
}
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ DbgBreakPoint();
+
+ /* Return the exception code */
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
+ }
+ _SEH2_END;
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- /* Get the exception code */
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
- if (!NT_SUCCESS(Status)) return Status;
/* Convert the context record */
KeContextToTrapFrame(Context,
/* Convert the context record */
KeContextToTrapFrame(Context,
NTAPI
KeRaiseUserException(IN NTSTATUS ExceptionCode)
{
NTAPI
KeRaiseUserException(IN NTSTATUS ExceptionCode)
{
- NTSTATUS Status = STATUS_SUCCESS;
ULONG OldEip;
PTEB Teb = KeGetCurrentThread()->Teb;
PKTRAP_FRAME TrapFrame = KeGetCurrentThread()->TrapFrame;
ULONG OldEip;
PTEB Teb = KeGetCurrentThread()->Teb;
PKTRAP_FRAME TrapFrame = KeGetCurrentThread()->TrapFrame;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- /* Save exception code */
- Status = ExceptionCode;
+ /* Return the exception code */
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
- if (!NT_SUCCESS(Status)) return Status;
/* Get the old EIP */
OldEip = TrapFrame->Eip;
/* Get the old EIP */
OldEip = TrapFrame->Eip;
{
ULONG_PTR NewStack, OldStack;
PULONG UserEsp;
{
ULONG_PTR NewStack, OldStack;
PULONG UserEsp;
- NTSTATUS CallbackStatus = STATUS_SUCCESS;
+ NTSTATUS CallbackStatus;
PEXCEPTION_REGISTRATION_RECORD ExceptionList;
PTEB Teb;
ULONG GdiBatchCount = 0;
PEXCEPTION_REGISTRATION_RECORD ExceptionList;
PTEB Teb;
ULONG GdiBatchCount = 0;
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* Get the SEH exception */
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* Get the SEH exception */
- CallbackStatus = _SEH2_GetExceptionCode();
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
- if (!NT_SUCCESS(CallbackStatus)) return CallbackStatus;
/* Check if we have GDI Batch operations */
if (GdiBatchCount)
/* Check if we have GDI Batch operations */
if (GdiBatchCount)
{
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
LARGE_INTEGER SafeInterval;
{
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
LARGE_INTEGER SafeInterval;
- NTSTATUS Status = STATUS_SUCCESS;
/* Check the previous mode */
/* Check the previous mode */
- if(PreviousMode != KernelMode)
+ if (PreviousMode != KernelMode)
{
/* Enter SEH for probing */
_SEH2_TRY
{
/* Enter SEH for probing */
_SEH2_TRY
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- /* Get SEH exception */
- Status = _SEH2_GetExceptionCode();
+ /* Return the exception code */
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
- if (!NT_SUCCESS(Status)) return Status;
}
/* Call the Kernel Function */
}
/* Call the Kernel Function */
{
PLPCP_PORT_OBJECT Port, ReceivePort, ConnectionPort = NULL;
KPROCESSOR_MODE PreviousMode = KeGetPreviousMode(), WaitMode = PreviousMode;
{
PLPCP_PORT_OBJECT Port, ReceivePort, ConnectionPort = NULL;
KPROCESSOR_MODE PreviousMode = KeGetPreviousMode(), WaitMode = PreviousMode;
- NTSTATUS Status = STATUS_SUCCESS;
PLPCP_MESSAGE Message;
PETHREAD Thread = PsGetCurrentThread(), WakeupThread;
PLPCP_CONNECTION_MESSAGE ConnectMessage;
PLPCP_MESSAGE Message;
PETHREAD Thread = PsGetCurrentThread(), WakeupThread;
PLPCP_CONNECTION_MESSAGE ConnectMessage;
_SEH2_EXCEPT(ExSystemExceptionFilter())
{
DPRINT1("SEH crash [1]\n");
_SEH2_EXCEPT(ExSystemExceptionFilter())
{
DPRINT1("SEH crash [1]\n");
- DbgBreakPoint();
- Status = _SEH2_GetExceptionCode();
+ DbgBreakPoint();
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
-
- /* Bail out if pointer was invalid */
- if (!NT_SUCCESS(Status))
- return Status;
/* No callback, just copy the message */
_SEH2_TRY
{
/* No callback, just copy the message */
_SEH2_TRY
{
LpcpMoveMessage(&Message->Request,
LpcRequest,
LpcRequest + 1,
LpcpMoveMessage(&Message->Request,
LpcRequest,
LpcRequest + 1,
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
-
- if (!NT_SUCCESS(Status))
- {
LpcpFreeToPortZone(Message, 0);
ObDereferenceObject(Port);
LpcpFreeToPortZone(Message, 0);
ObDereferenceObject(Port);
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
/* Acquire the LPC lock */
KeAcquireGuardedMutex(&LpcpLock);
/* Acquire the LPC lock */
KeAcquireGuardedMutex(&LpcpLock);
/* Check if the pointer is valid */
ProbeForWriteUlong(PreviousFlags);
}
/* Check if the pointer is valid */
ProbeForWriteUlong(PreviousFlags);
}
- _SEH2_EXCEPT(ExSystemExceptionFilter())
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* It isn't -- fail */
_SEH2_YIELD(return _SEH2_GetExceptionCode());
{
/* It isn't -- fail */
_SEH2_YIELD(return _SEH2_GetExceptionCode());
- /* Now, copy the first physical page into the first virtual page */
+ /* Copy the first physical page into the first virtual page */
RtlMoveMemory(NullAddress, BaseAddress, ViewSize);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
RtlMoveMemory(NullAddress, BaseAddress, ViewSize);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- /* Get the status */
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
-
- if (!NT_SUCCESS(Status))
- {
DPRINT1("Couldn't copy first page (%x)\n", Status);
ZwClose(PhysMemHandle);
ZwUnmapViewOfSection(NtCurrentProcess(), BaseAddress);
DPRINT1("Couldn't copy first page (%x)\n", Status);
ZwClose(PhysMemHandle);
ZwUnmapViewOfSection(NtCurrentProcess(), BaseAddress);
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
/* Close physical memory section handle */
ZwClose(PhysMemHandle);
/* Close physical memory section handle */
ZwClose(PhysMemHandle);