KiMarkBugCheckRegions
VOID __fastcall KiMarkBugCheckRegions(INT64 rcx0, INT64 rdx0, UINT64 a3, INT64 a4){
int v6;
int v7;
__int64 v8;
unsigned int i;
char v10;
void **v11;
__int64 v12;
unsigned __int64 v13;
int v14;
int v15;
int v16;
int v17;
void *v18;
PVOID *v19;
__int64 v20;
int *v21;
UINT64 v22;
UINT64 v23;
char v24;
void **v25;
__int64 v26;
unsigned __int64 v27;
int v28;
int v29;
int v30;
int v31;
void *v32;
char v33;
void **v34;
__int64 v35;
unsigned __int64 v36;
int v37;
void *v38;
char v39;
void *Address[4];
void *v41[4];
void *v42[12];
PVOID VirtualAddress;
UINT64 *ApiSetSchemaSize;
_mm_lfence();
v6 = 4;
if( KdpBreakpointChangeCount )
IoAddTriageDumpDataBlock(&KdpBreakpointChangeCount, 4ui64);
if( qword_140C12EA0 )
{
KiMismatchSummary = qword_140C12EA0;
IoAddTriageDumpDataBlock(&KiMismatchSummary, 8ui64);
}
v7 = 3;
if( (_DWORD)a4 == 257 && dword_140C12E98 )
{
v8 = qword_140C12E88;
for( i = 0; i < dword_140C12E98; i += 4096 )
{
_mm_lfence();
MmIsAddressValid((PVOID)((v8 + i) & 0xFFFFFFFFFFFFF000ui64));
if( v10 )
{
v11 = Address;
v12 = 4i64;
v13 = MmPteBase + ((((v8 + i) & 0xFFFFFFFFFFFFF000ui64) >> 9) & 0x7FFFFFFFF8i64);
do
{
*v11++ = (void *)v13;
v13 = MmPteBase + ((v13 >> 9) & 0x7FFFFFFFF8i64);
--v12;
}
while( v12 );
v14 = 0;
v15 = 3;
do
{
v16 = v15;
if( v14 )
{
Address[v15] = 0i64;
}
else
{
if( !v15 )
break;
if( *(char *)Address[v15] < 0 )
v14 = 1;
}
--v15;
}
while( v16 );
v17 = 4;
do
{
v18 = Address[v17 - 1];
if( !v18 )
break;
IoAddTriageDumpDataBlock(v18, 8ui64);
--v17;
}
while( v17 );
}
}
dword_140C12E98 = 4096;
}
v19 = (PVOID *)&qword_140C12E88;
v20 = 2i64;
v21 = &dword_140C12E98;
do
{
v22 = (unsigned int)*v21;
if( (_DWORD)v22 )
IoAddTriageDumpDataBlock(*v19, v22);
++v21;
++v19;
--v20;
}
while( v20 );
if( a3 )
{
IoAddTriageDumpDataBlock((PVOID)(a3 & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64);
v23 = (a3 & 0xFFFFFFFFFFFFF000ui64) + 4096;
IoAddTriageDumpDataBlock((PVOID)v23, 0x1000ui64);
_mm_lfence();
MmIsAddressValid((PVOID)(a3 & 0xFFFFFFFFFFFFF000ui64));
if( v24 )
{
v25 = v41;
v26 = 4i64;
v27 = MmPteBase + (((a3 & 0xFFFFFFFFFFFFF000ui64) >> 9) & 0x7FFFFFFFF8i64);
do
{
*v25++ = (void *)v27;
v27 = MmPteBase + ((v27 >> 9) & 0x7FFFFFFFF8i64);
--v26;
}
while( v26 );
v28 = 0;
v29 = 3;
do
{
v30 = v29;
if( v28 )
{
v41[v29] = 0i64;
}
else
{
if( !v29 )
break;
if( *(char *)v41[v29] < 0 )
v28 = 1;
}
--v29;
}
while( v30 );
v31 = 4;
do
{
v32 = v41[v31 - 1];
if( !v32 )
break;
IoAddTriageDumpDataBlock(v32, 8ui64);
--v31;
}
while( v31 );
}
_mm_lfence();
MmIsAddressValid((PVOID)v23);
if( v33 )
{
v34 = v42;
v35 = 4i64;
v36 = MmPteBase + ((v23 >> 9) & 0x7FFFFFFFF8i64);
do
{
*v34++ = (void *)v36;
v36 = MmPteBase + ((v36 >> 9) & 0x7FFFFFFFF8i64);
--v35;
}
while( v35 );
do
{
v37 = v7;
if( (_DWORD)v35 )
{
v42[v7] = 0i64;
}
else
{
if( !v7 )
goto LABEL_50;
if( *(char *)v42[v7] < 0 )
LODWORD(v35) = 1;
}
--v7;
}
while( v37 );
do
{
LABEL_50:
v38 = v42[v6 - 1];
if( !v38 )
break;
IoAddTriageDumpDataBlock(v38, 8ui64);
--v6;
}
while( v6 );
}
if( (PVOID)a3 == HvlpHypercallCodeVa )
IoAddTriageDumpDataBlock(&HvlpHypercallCodeVa, 8ui64);
if( a3 == HvlpVsmVtlCallVa )
IoAddTriageDumpDataBlock(&HvlpVsmVtlCallVa, 8ui64);
MmQueryApiSetSchema((PVOID **)&VirtualAddress, &ApiSetSchemaSize);
MmIsAddressValid(VirtualAddress);
if( v39 && a3 == *(_QWORD *)VirtualAddress )
IoAddTriageDumpDataBlock(VirtualAddress, 8ui64);
}
sub_1403EA874(rcx0, rdx0, a3, a4);
if( Src )
IoAddTriageDumpDataBlock(Src, 0xAA0ui64);
}Referenced by:
KeBugCheck2