/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
rtldump.c
Abstract:
This module implements dump procedures for:
ContextRecords,
ExceptionReportRecords,
ExceptionRegistrationRecords
Author:
Bryan Willman (bryanwi) 12 April 90
Environment:
Callable in any mode in which DbgPrint works.
Revision History:
--*/
#include "ntrtlp.h"
VOID
RtlpContextDump(
IN PVOID Object,
IN ULONG Control OPTIONAL
)
/*++
Routine Description:
This function dumps the contents of a context record.
Currently, it does not dump floating point context.
Arguments:
Object - Address of the record to dump.
Control - Ignored, here so we look like a standard dump procedure.
Return Value:
none
--*/
{
PCONTEXT Context;
Context = (PCONTEXT)Object;
DbgPrint(" Record @ %lx\n", (ULONG)Context);
DbgPrint(" ContextFlags: %lx\n", Context->ContextFlags);
DbgPrint("\n");
DbgPrint(" SegGs: %lx\n", Context->SegGs);
DbgPrint(" SegFs: %lx\n", Context->SegFs);
DbgPrint(" SegEs: %lx\n", Context->SegEs);
DbgPrint(" SegDs: %lx\n", Context->SegDs);
DbgPrint("\n");
DbgPrint(" Edi: %lx\n", Context->Edi);
DbgPrint(" Esi: %lx\n", Context->Esi);
DbgPrint(" Ebx: %lx\n", Context->Ebx);
DbgPrint(" Edx: %lx\n", Context->Edx);
DbgPrint(" Ecx: %lx\n", Context->Ecx);
DbgPrint(" Eax: %lx\n", Context->Eax);
DbgPrint("\n");
DbgPrint(" Ebp: %lx\n", Context->Ebp);
DbgPrint(" Eip: %lx\n", Context->Eip);
DbgPrint(" SegCs: %lx\n", Context->SegCs);
DbgPrint(" EFlags: %lx\n", Context->EFlags);
DbgPrint(" Esp: %lx\n", Context->Esp);
DbgPrint(" SegSs: %lx\n", Context->SegSs);
DbgPrint("\n");
return;
}
VOID
RtlpExceptionReportDump(
IN PVOID Object,
IN ULONG Control OPTIONAL
)
/*++
Routine Description:
This function dumps the contents of an Exception report record.
Arguments:
Object - Address of the record to dump.
Control - Ignored, here so we look like a standard dump procedure.
Return Value:
none
--*/
{
ULONG i;
PEXCEPTION_RECORD Exception;
Exception = (PEXCEPTION_RECORD)Object;
DbgPrint(" Record @ %lx\n", (ULONG)Exception);
DbgPrint(" ExceptionCode: %lx\n", Exception->ExceptionCode);
DbgPrint(" ExceptionFlags: %lx\n", Exception->ExceptionFlags);
DbgPrint(" ExceptionRecord: %lx\n", Exception->ExceptionRecord);
DbgPrint(" ExceptionAddress: %lx\n", Exception->ExceptionAddress);
DbgPrint(" NumberParameters: %lx\n", Exception->NumberParameters);
for (i = 0; i < Exception->NumberParameters; i++)
DbgPrint("ExceptionInformation[%d]: %lx\n",
i, Exception->ExceptionInformation[i]);
DbgPrint("\n");
return;
}
VOID
RtlpExceptionRegistrationDump(
IN PVOID Object,
IN ULONG Control OPTIONAL
)
/*++
Routine Description:
This function dumps the contents of an exception registration record,
unless Object == NULL, in which case it dumps the entire registration
chain.
Currently, it does not dump floating point context.
Arguments:
Object - Address of the record to dump.
Control - Ignored, here so we look like a standard dump procedure.
Return Value:
none
--*/
{
PEXCEPTION_REGISTRATION_RECORD RegistrationPointer;
RegistrationPointer = (PEXCEPTION_REGISTRATION_RECORD)Object;
if (RegistrationPointer != EXCEPTION_CHAIN_END) {
DbgPrint("Record @ %lx\n", (ULONG)RegistrationPointer);
DbgPrint(" Next: %lx\n", RegistrationPointer->Next);
DbgPrint("Handler: %lx\n", RegistrationPointer->Handler);
DbgPrint("\n");
} else {
RegistrationPointer = RtlpGetRegistrationHead();
while (RegistrationPointer != EXCEPTION_CHAIN_END) {
DbgPrint("Record @ %lx\n", (ULONG)RegistrationPointer);
DbgPrint(" Next: %lx\n", RegistrationPointer->Next);
DbgPrint("Handler: %lx\n", RegistrationPointer->Handler);
DbgPrint("\n");
}
}
return;
}