IoFillDumpHeader
VOID __stdcall IoFillDumpHeader(
VOID *DumpHeader,
UINT64 DumpType,
UINT64 BugCheckCode,
UINT64 BugCheckParameter1,
UINT64 BugCheckParameter2,
UINT64 BugCheckParameter3,
UINT64 BugCheckParameter4,
_KTHREAD *Thread){
int v8;
char *v10;
unsigned __int64 v11;
unsigned __int64 DirectoryTableBase;
unsigned __int64 v13;
PHYSICAL_MEMORY_RANGE *PhysicalMemoryRanges;
PHYSICAL_MEMORY_RANGE *v15;
__int64 v16;
LARGE_INTEGER *p_NumberOfBytes;
LARGE_INTEGER NumberOfBytes;
__int64 v19;
char *v20;
unsigned __int64 QuadPart;
unsigned int BootId;
v8 = DumpType;
v10 = (char *)DumpHeader;
v11 = 2048i64;
if( ((unsigned __int8)DumpHeader & 4) != 0 )
{
*(_DWORD *)DumpHeader = 1162297680;
v10 = (char *)DumpHeader + 4;
v11 = 2047i64;
}
memset64(v10, 0x4547415045474150ui64, v11 >> 1);
if( (v11 & 1) != 0 )
*(_DWORD *)&v10[4 * v11 - 4] = 1162297680;
*((_QWORD *)DumpHeader + 9) = BugCheckParameter2;
*((_QWORD *)DumpHeader + 10) = BugCheckParameter3;
*((_QWORD *)DumpHeader + 11) = BugCheckParameter4;
*((_DWORD *)DumpHeader + 1) = 875976004;
*((_DWORD *)DumpHeader + 14) = BugCheckCode;
*((_QWORD *)DumpHeader + 8) = BugCheckParameter1;
if( Thread )
DirectoryTableBase = Thread->Tcb.ApcState.Process->Pcb.DirectoryTableBase;
else
DirectoryTableBase = __readcr3();
*((_QWORD *)DumpHeader + 2) = DirectoryTableBase & 0xFFFFFFFFFFFFF000ui64;
*((_DWORD *)DumpHeader + 12) = 34404;
*((_DWORD *)DumpHeader + 998) = DumpType;
*((_QWORD *)DumpHeader + 3) = MmPfnDatabase;
*((_QWORD *)DumpHeader + 4) = &PsLoadedModuleList;
*((_QWORD *)DumpHeader + 5) = &PsActiveProcessHead;
*((_QWORD *)DumpHeader + 16) = &KdDebuggerDataBlock;
*((_DWORD *)DumpHeader + 13) = KeQueryActiveProcessorCountEx(0xFFFFu);
*((_DWORD *)DumpHeader + 2) = (unsigned int)NtBuildNumber >> 28;
*((_DWORD *)DumpHeader + 3) = (unsigned __int16)NtBuildNumber;
if( (unsigned int)(v8 - 5) <= 1 || !MmPhysicalMemoryBlock )
goto LABEL_24;
if( KeGetCurrentIrql() > 1u )
{
v13 = 16 * (MmPhysicalMemoryBlock->NumberOfRuns - 1 + 2i64);
if( v13 > 0x2BC )
LODWORD(v13) = 700;
memmove((char *)DumpHeader + 136, MmPhysicalMemoryBlock, v13);
goto LABEL_25;
}
PhysicalMemoryRanges = MmGetPhysicalMemoryRanges();
v15 = PhysicalMemoryRanges;
if( !PhysicalMemoryRanges )
{
LABEL_24:
memset((char *)DumpHeader + 136, 0i64, 0x2BCu);
goto LABEL_25;
}
v16 = 0i64;
p_NumberOfBytes = &PhysicalMemoryRanges->NumberOfBytes;
NumberOfBytes = PhysicalMemoryRanges->NumberOfBytes;
v19 = 0i64;
while( NumberOfBytes.QuadPart )
{
v16 = (unsigned int)(v16 + 1);
v19 += (unsigned __int64)NumberOfBytes.QuadPart >> 12;
NumberOfBytes = PhysicalMemoryRanges[(unsigned int)v16].NumberOfBytes;
}
*((_QWORD *)DumpHeader + 18) = v19;
if( 16 * ((unsigned __int64)(unsigned int)(v16 - 1) + 2) > 0x2BC )
v16 = 42i64;
*((_DWORD *)DumpHeader + 34) = v16;
if( (_DWORD)v16 )
{
v20 = (char *)((_BYTE *)DumpHeader - (_BYTE *)PhysicalMemoryRanges);
do
{
*(LONGLONG *)((char *)&p_NumberOfBytes[18].QuadPart + (_QWORD)v20) = (unsigned __int64)p_NumberOfBytes[-1].QuadPart >> 12;
QuadPart = p_NumberOfBytes->QuadPart;
p_NumberOfBytes += 2;
*(LONGLONG *)((char *)&p_NumberOfBytes[17].QuadPart + (_QWORD)v20) = QuadPart >> 12;
--v16;
}
while( v16 );
}
ExFreePoolWithTag(v15, 0);
LABEL_25:
memset((char *)DumpHeader + 840, 0i64, 0xBB8u);
*((_QWORD *)DumpHeader + 481) = 0i64;
*((_DWORD *)DumpHeader + 966) = 0;
*((_QWORD *)DumpHeader + 482) = 0i64;
*((_DWORD *)DumpHeader + 960) = -2147483645;
*((_DWORD *)DumpHeader + 961) = 1;
*((_DWORD *)DumpHeader + 1002) = KUSER_SHARED_DATA.SystemTime.LowPart;
*((_DWORD *)DumpHeader + 1003) = KUSER_SHARED_DATA.SystemTime.High1Time;
*((_DWORD *)DumpHeader + 1036) = KUSER_SHARED_DATA.InterruptTime.LowPart;
*((_DWORD *)DumpHeader + 1037) = KUSER_SHARED_DATA.InterruptTime.High1Time;
RtlGetNtProductType((_NT_PRODUCT_TYPE *)DumpHeader + 1040);
*((_DWORD *)DumpHeader + 1041) = KUSER_SHARED_DATA.SuiteMask;
BootId = KUSER_SHARED_DATA.BootId;
*((_DWORD *)DumpHeader + 1044) = 0;
*((_DWORD *)DumpHeader + 1045) = BootId;
}Referenced by:
DbgkpTriageDumpFillHeaders
IopConstructInMemoryDumpHeader
IopLiveDumpEndMirroringCallback
IopWriteCapsuleTriageDumpToFirmware
KeInitializeCrashDumpHeader