KiDumpParameterImages
VOID __fastcall KiDumpParameterImages(
INT8 *Buffer,
UINT64 *BugCheckParameters,
UINT64 NumberOfParameters,
INT64 UnicodeToAnsi){
char v4;
__int64 v7;
_UNICODE_STRING *UnloadedDriver;
_UNICODE_STRING *p_BaseDllName;
UINT16 *p_Length;
_LDR_DATA_TABLE_ENTRY *v11;
char InKernelOrHal[8];
_LDR_DATA_TABLE_ENTRY *DataTableEntry;
char v14[128];
DataTableEntry = 0i64;
v4 = UnicodeToAnsi;
InKernelOrHal[0] = 0;
if( Buffer )
*Buffer = 0;
if( (_DWORD)NumberOfParameters )
{
v7 = (unsigned int)NumberOfParameters;
while( !KiPcToFileHeader((VOID *)*BugCheckParameters, &DataTableEntry, 1ui64, (UINT8 *)InKernelOrHal) )
{
UnloadedDriver = (_UNICODE_STRING *)MmLocateUnloadedDriver(*BugCheckParameters);
p_BaseDllName = UnloadedDriver;
if( UnloadedDriver )
{
if( v4 )
{
p_Length = &UnloadedDriver->Length;
goto LABEL_13;
}
goto LABEL_14;
}
LABEL_17:
++BugCheckParameters;
if( !--v7 )
return;
}
v11 = DataTableEntry;
if( MmIsAddressValidEx((INT64)DataTableEntry->DllBase) )
RtlImageNtHeader((UINT64)v11->DllBase);
p_BaseDllName = &v11->BaseDllName;
if( v4 )
{
p_Length = &p_BaseDllName->Length;
LABEL_13:
KiBugCheckUnicodeToAnsi(p_Length, v14);
}
LABEL_14:
if( Buffer )
RtlStringCbPrintfA(Buffer, 0x80ui64, (INT8 *)"%s** %12s - Address %p base at %p, DateStamp %08lx\r\n");
KiBugCheckDriver = p_BaseDllName;
goto LABEL_17;
}
}Referenced by:
KeBugCheck2
KiDisplayBlueScreen