MiMapHotPatchImageInSystemSpace

VOID __stdcall MiMapHotPatchImageInSystemSpace(){
  _QWORD *v0; 
  _QWORD *v1; 
  VOID *v2; 
  __int64 v3; 
  _MDL *Mdl; 
  _MDL *v5; 
  INT64 v6; 
  UINT64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  _MDL *v10; 
  __int64 *i; 
  _MDL **v12; 
  unsigned int v13; 
  _MDL **v14; 
  __int64 v15; 
  _MDL *v16; 
  UINT64 v17; 
  INT64 a5; 
  INT64 a6; 

  v1 = v0;
  v2 = (VOID *)v0[1];
  LODWORD(a6) = 0;
  v3 = (v1[2] - (_QWORD)v2) / 4096i64;
  Mdl = IoAllocateMdl(v2, (unsigned int)((_DWORD)v3 << 12), 0, 0, 0i64);
  v5 = Mdl;
  if( Mdl )
  {
    v6 = (INT64)&Mdl[1];
    v7 = (unsigned int)v3;
    v8 = (unsigned int)v3;
    v9 = 0i64;
    v10 = Mdl + 1;
    if( &Mdl[1] > (_MDL *)((char *)&Mdl[1] + 8 * (unsigned int)v3) )
      v8 = 0i64;
    if( v8 )
    {
      do
      {
        ++v9;
        v10->Next = (_MDL *)*(&stru_140C4DB30 + 497);
        v10 = (_MDL *)((char *)v10 + 8);
      }
      while( v9 < v8 );
    }
    for( i = (__int64 *)v1[7]; i; i = (__int64 *)*i )
    {
      v12 = &v5[1].Next + (i[4] + *((unsigned int *)i + 11) - v1[1]) / 4096;
      v13 = *((_DWORD *)i + 10) >> 12;
      if( v13 )
      {
        v14 = (_MDL **)(i + 6);
        v15 = v13;
        do
        {
          v16 = *v14++;
          *v12++ = v16;
          --v15;
        }
        while( v15 );
      }
    }
    v17 = (UINT64)MiReservePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), (unsigned int)v3);
    if( v17 )
    {
      LODWORD(a5) = 4;
      MiFillSystemPtes(v17, v7, v6, 4ui64, a5, (INT64)&a6);
      v5->MdlFlags |= 1u;
      v5->MappedSystemVa = (void *)((__int64)((v17 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16);
      v1[8] = v5;
      v5 = 0i64;
    }
    if( v5 )
      IoFreeMdl(v5);
  }
}

Referenced by:

MiPrepareToHotPatchImage