685{
689 PRUNTIME_FUNCTION FunctionEntry;
693
694
696
697
698 if (TargetFrame !=
NULL)
699 {
700 StackHigh = (
ULONG64)TargetFrame + 1;
701 }
702
703
705
706
710
711
713 {
715 {
717 }
718
719
721 if (FunctionEntry ==
NULL)
722 {
723
724
725 UnwindContext.Rip = *(
DWORD64*)UnwindContext.Rsp;
726 UnwindContext.Rsp +=
sizeof(
DWORD64);
727
729 {
730
732 }
733 continue;
734 }
735
736
738
739
741 ImageBase,
742 UnwindContext.Rip,
743 FunctionEntry,
744 &UnwindContext,
748
749
753 {
755
756
758 {
761 }
762
765 }
766
767
768 if (ExceptionRoutine !=
NULL)
769 {
770
772 {
773
775 }
776
777
779 &UnwindContext,
782
783
789
790
792
793
794 do
795 {
797
802
803
806
807
809 {
811 {
812
814 {
817 }
818
819
821 }
823 {
826 }
827 }
828
830 {
833 }
834
835
837 {
840 }
842 }
843
844
848 {
851
853 {
855 }
856 else
857 {
859 }
860 }
861
863 {
864 break;
865 }
866
868 {
869
871 }
872 }
873
875 {
877 }
878
879
881
882
884
885
888}
UINT32 void void ** ReturnValue
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE ACPI_HANDLE ACPI_HANDLE *OutHandle ACPI_HANDLE *OutHandle void *Context void *Context ACPI_EVENT_HANDLER Handler UINT32 UINT32 ACPI_GPE_HANDLER void *Context UINT32 HandlerType
VOID NTAPI RtlpCheckLogException(IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT ContextRecord, IN PVOID ContextData, IN ULONG Size)
VOID NTAPI RtlpGetStackLimits(OUT PULONG_PTR LowLimit, OUT PULONG_PTR HighLimit)
@ ExceptionContinueSearch
@ ExceptionCollidedUnwind
@ ExceptionNestedException
@ ExceptionContinueExecution
EXCEPTION_ROUTINE * PEXCEPTION_ROUTINE
enum _EXCEPTION_DISPOSITION EXCEPTION_DISPOSITION
void __cdecl __debugbreak(void)
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
NTSYSAPI NTSTATUS NTAPI ZwRaiseException(_In_ PEXCEPTION_RECORD ExceptionRecord, _In_ PCONTEXT Context, _In_ BOOLEAN SearchFrames)
DECLSPEC_NORETURN NTSYSAPI VOID NTAPI RtlRaiseStatus(_In_ NTSTATUS Status)
_IRQL_requires_same_ _In_ PVOID EstablisherFrame
_IRQL_requires_same_ _In_ PVOID _Inout_ struct _CONTEXT _In_ PVOID DispatcherContext
#define STATUS_INVALID_DISPOSITION
#define STATUS_UNWIND_CONSOLIDATE
#define STATUS_BAD_FUNCTION_TABLE
#define EXCEPTION_NONCONTINUABLE
PEXCEPTION_ROUTINE NTAPI RtlVirtualUnwind(_In_ ULONG HandlerType, _In_ ULONG64 ImageBase, _In_ ULONG64 ControlPc, _In_ PRUNTIME_FUNCTION FunctionEntry, _Inout_ PCONTEXT Context, _Outptr_ PVOID *HandlerData, _Out_ PULONG64 EstablisherFrame, _Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers)
VOID RtlRestoreContext(_In_ PCONTEXT ContextRecord, _In_ PEXCEPTION_RECORD ExceptionRecord)
PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry(IN DWORD64 ControlPc, OUT PDWORD64 ImageBase, OUT PUNWIND_HISTORY_TABLE HistoryTable)
Locates the RUNTIME_FUNCTION entry corresponding to a code address. https://learn....
static __inline BOOL RtlpIsStackPointerValid(_In_ ULONG64 StackPointer, _In_ ULONG64 LowLimit, _In_ ULONG64 HighLimit)
#define EXCEPTION_NONCONTINUABLE_EXCEPTION
#define EXCEPTION_STACK_INVALID
#define EXCEPTION_TARGET_UNWIND
#define EXCEPTION_COLLIDED_UNWIND