34 if (CallersAddress !=
NULL)
39 *CallersAddress = BackTrace[0];
43 *CallersAddress =
NULL;
48 if (CallersCaller !=
NULL)
53 *CallersCaller = BackTrace[1];
57 *CallersCaller =
NULL;
89 RegistrationFrame = RtlpGetExceptionList();
98 RegistrationFrameEnd = (
ULONG_PTR)RegistrationFrame +
102 if ((RegistrationFrameEnd > StackHigh) ||
103 ((
ULONG_PTR)RegistrationFrame < StackLow) ||
108 RegistrationFrameEnd,
132 sizeof(*RegistrationFrame));
135 Disposition = RtlpExecuteHandlerForException(ExceptionRecord,
142 if (RegistrationFrame == NestedFrame)
218 RegistrationFrame = RegistrationFrame->
Next;
248 if (!ExceptionRecord)
251 ExceptionRecord = &ExceptionRecord3;
282 Context->Esp +=
sizeof(TargetFrame) +
284 sizeof(ExceptionRecord) +
291 RegistrationFrame = RtlpGetExceptionList();
317 RegistrationFrameEnd = (
ULONG_PTR)RegistrationFrame +
321 if ((RegistrationFrameEnd > StackHigh) ||
322 ((
ULONG_PTR)RegistrationFrame < StackLow) ||
327 RegistrationFrameEnd,
351 RegistrationFrame->Handler);
383 OldFrame = RegistrationFrame;
384 RegistrationFrame = RegistrationFrame->
Next;
387 RtlpSetExceptionList(OldFrame);
#define STATUS_INVALID_UNWIND_TARGET
struct _EXCEPTION_REGISTRATION_RECORD * Next
VOID NTAPI RtlRaiseException(IN PEXCEPTION_RECORD ExceptionRecord)
NTSYSAPI NTSTATUS NTAPI ZwRaiseException(_In_ PEXCEPTION_RECORD ExceptionRecord, _In_ PCONTEXT Context, _In_ BOOLEAN SearchFrames)
#define EXCEPTION_NONCONTINUABLE
#define EXCEPTION_UNWINDING
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
PEXCEPTION_ROUTINE Handler
EXCEPTION_DISPOSITION NTAPI RtlpExecuteHandlerForUnwind(PEXCEPTION_RECORD ExceptionRecord, PEXCEPTION_REGISTRATION_RECORD RegistrationFrame, PCONTEXT Context, PVOID DispatcherContext, PEXCEPTION_ROUTINE ExceptionHandler)
NTSYSAPI NTSTATUS NTAPI ZwContinue(_In_ PCONTEXT Context, _In_ BOOLEAN TestAlert)
UINT32 void void ** ReturnValue
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define STATUS_INVALID_DISPOSITION
_IRQL_requires_same_ _In_ PVOID _Inout_ struct _CONTEXT _In_ PVOID DispatcherContext
_In_ ULONG _Out_opt_ PULONG BackTraceHash
#define EXCEPTION_STACK_INVALID
VOID NTAPI RtlpCaptureContext(OUT PCONTEXT ContextRecord)
BOOLEAN NTAPI RtlpHandleDpcStackException(IN PEXCEPTION_REGISTRATION_RECORD RegistrationFrame, IN ULONG_PTR RegistrationFrameEnd, IN OUT PULONG_PTR StackLow, IN OUT PULONG_PTR StackHigh)
BOOLEAN NTAPI RtlCallVectoredExceptionHandlers(_In_ PEXCEPTION_RECORD ExceptionRecord, _In_ PCONTEXT Context)
VOID NTAPI RtlGetCallersAddress(_Out_ PVOID *CallersAddress, _Out_ PVOID *CallersCaller)
#define EXCEPTION_EXIT_UNWIND
#define STATUS_NONCONTINUABLE_EXCEPTION
VOID NTAPI RtlpGetStackLimits(PULONG_PTR StackBase, PULONG_PTR StackLimit)
struct _EXCEPTION_RECORD * ExceptionRecord
#define EXCEPTION_NESTED_CALL
#define EXCEPTION_CHAIN_END
void * _ReturnAddress(void)
struct tagContext Context
NTSYSAPI USHORT NTAPI RtlCaptureStackBackTrace(_In_ ULONG FramesToSkip, _In_ ULONG FramesToCapture, _Out_writes_to_(FramesToCapture, return) PVOID *BackTrace, _Out_opt_ PULONG BackTraceHash)
VOID NTAPI RtlUnwind(_In_opt_ PVOID TargetFrame, _In_opt_ PVOID TargetIp, _In_opt_ PEXCEPTION_RECORD ExceptionRecord, _In_ PVOID ReturnValue)
VOID NTAPI RtlCallVectoredContinueHandlers(_In_ PEXCEPTION_RECORD ExceptionRecord, _In_ PCONTEXT Context)
BOOLEAN NTAPI RtlDispatchException(_In_ PEXCEPTION_RECORD ExceptionRecord, _In_ PCONTEXT ContextRecord)
VOID NTAPI RtlpCheckLogException(IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT ContextRecord, IN PVOID ContextData, IN ULONG Size)
enum _EXCEPTION_DISPOSITION EXCEPTION_DISPOSITION
PULONG MinorVersion OPTIONAL