#include <ntoskrnl.h>
#define NDEBUG
-#include <internal/debug.h>
+#include <debug.h>
extern PGDI_BATCHFLUSH_ROUTINE KeGdiFlushUserBatch;
/* PRIVATE FUNCTIONS *********************************************************/
-_SEH_DEFINE_LOCALS(KiCopyInfo)
-{
- volatile EXCEPTION_RECORD SehExceptRecord;
-};
-
-_SEH_FILTER(KiCopyInformation2)
-{
- _SEH_ACCESS_LOCALS(KiCopyInfo);
-
- /* Copy the exception records and return to the handler */
- RtlCopyMemory((PVOID)&_SEH_VAR(SehExceptRecord),
- _SEH_GetExceptionPointers()->ExceptionRecord,
- sizeof(EXCEPTION_RECORD));
- return EXCEPTION_EXECUTE_HANDLER;
-}
-
/*++
* @name KiInitializeUserApc
*
ULONG_PTR Stack, AlignedEsp;
ULONG ContextLength;
EXCEPTION_RECORD SehExceptRecord;
- _SEH_DECLARE_LOCALS(KiCopyInfo);
/* Don't deliver APCs in V86 mode */
if (TrapFrame->EFlags & EFLAGS_V86_MASK) return;
KeTrapFrameToContext(TrapFrame, ExceptionFrame, &Context);
/* Protect with SEH */
- _SEH_TRY
+ _SEH2_TRY
{
/* Sanity check */
ASSERT((TrapFrame->SegCs & MODE_MASK) != KernelMode);
TrapFrame->EFlags = Ke386SanitizeFlags(Context.EFlags, UserMode);
/* Check if thread has IOPL and force it enabled if so */
- if (KeGetCurrentThread()->Iopl) TrapFrame->EFlags |= 0x3000;
+ if (KeGetCurrentThread()->Iopl) TrapFrame->EFlags |= EFLAGS_IOPL;
/* Setup the stack */
*(PULONG_PTR)(Stack + 0 * sizeof(ULONG_PTR)) = (ULONG_PTR)NormalRoutine;
*(PULONG_PTR)(Stack + 2 * sizeof(ULONG_PTR)) = (ULONG_PTR)SystemArgument1;
*(PULONG_PTR)(Stack + 3 * sizeof(ULONG_PTR)) = (ULONG_PTR)SystemArgument2;
}
- _SEH_EXCEPT(KiCopyInformation2)
+ _SEH2_EXCEPT((RtlCopyMemory(&SehExceptRecord, _SEH2_GetExceptionInformation()->ExceptionRecord, sizeof(EXCEPTION_RECORD)), EXCEPTION_EXECUTE_HANDLER))
{
/* Dispatch the exception */
- _SEH_VAR(SehExceptRecord).ExceptionAddress = (PVOID)TrapFrame->Eip;
+ SehExceptRecord.ExceptionAddress = (PVOID)TrapFrame->Eip;
KiDispatchException(&SehExceptRecord,
ExceptionFrame,
TrapFrame,
UserMode,
TRUE);
}
- _SEH_END;
+ _SEH2_END;
}
/* PUBLIC FUNCTIONS **********************************************************/
{
ULONG_PTR NewStack, OldStack;
PULONG UserEsp;
- NTSTATUS CallbackStatus = STATUS_SUCCESS;
+ NTSTATUS CallbackStatus;
PEXCEPTION_REGISTRATION_RECORD ExceptionList;
PTEB Teb;
ULONG GdiBatchCount = 0;
OldStack = *UserEsp;
/* Enter a SEH Block */
- _SEH_TRY
+ _SEH2_TRY
{
/* Calculate and align the stack size */
NewStack = (OldStack - ArgumentLength) & ~3;
/* Read the GDI Batch count */
GdiBatchCount = Teb->GdiBatchCount;
}
- _SEH_HANDLE
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* Get the SEH exception */
- CallbackStatus = _SEH_GetExceptionCode();
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
}
- _SEH_END;
- if (!NT_SUCCESS(CallbackStatus)) return CallbackStatus;
+ _SEH2_END;
/* Check if we have GDI Batch operations */
if (GdiBatchCount)