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