MiInitializeDriverPtes

INT64 __stdcall MiInitializeDriverPtes(INT64 LoaderBlock){
  _QWORD *v1; 
  INT64 v2; 
  __int64 *v3; 
  bool v4; 
  _QWORD *v5; 
  _QWORD *v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  _QWORD *v10; 
  _QWORD *v11; 
  _QWORD *v12; 
  _MMPTE *PteBase; 
  _QWORD *v14; 
  _QWORD *v15; 
  PVOID i; 
  unsigned int v17; 
  unsigned int v18; 
  unsigned int v19; 
  unsigned int v20; 
  int v21; 
  __int64 v22; 
  unsigned int v23; 
  unsigned int v24; 
  __int64 *v25; 
  __int64 j; 
  unsigned __int64 v27; 
  unsigned int v28; 
  __int64 v29; 
  unsigned int v30; 
  unsigned int v31; 
  unsigned int v32; 
  unsigned int v33; 
  int v34; 
  __int64 v35; 
  unsigned int v36; 
  unsigned int v37; 
  _QWORD *v38; 
  __int64 k; 
  unsigned __int64 v40; 
  unsigned int v41; 
  INT64 v42; 
  int v43; 
  int v44; 
  __int64 *v45; 
  __int64 *m; 
  __int64 *v47; 
  __int64 **v48; 
  __int64 *v49; 
  __int64 *v50; 
  unsigned int v52; 
  _QWORD *v53; 
  v1 = 0i64;
  v2 = LoaderBlock + 16;
  v3 = *(__int64 **)(LoaderBlock + 16);
  v53 = 0i64;
  while( v3 != (__int64 *)v2 )
  {
    if( !(unsigned int)MI_IS_PHYSICAL_ADDRESS((PVOID)v3[6]) )
    {
      LODWORD(v5) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
      v6 = v5;
      if( !v5 )
        return 0i64;
      v4 = 0;
      v5[3] = v3;
      v7 = v3[6];
      if( v1 )
      {
        while( 1 )
        {
          v8 = v1[3];
          v9 = *(_QWORD *)(v8 + 48);
          if( v7 <= v9 + (unsigned int)(*(_DWORD *)(v8 + 64) - 1) && v7 < v9 )
          {
            v10 = (_QWORD *)*v1;
            if( !*v1 )
              break;
          }
          else
          {
            v10 = (_QWORD *)v1[1];
            if( !v10 )
            {
              v4 = 1;
              break;
            }
          }
          v1 = v10;
        }
      }
      RtlAvlInsertNodeEx((unsigned __int64 *)&v53, (__int64)v1, v4, v6);
      v1 = v53;
    }
    v3 = (__int64 *)*v3;
  }
  v11 = 0i64;
  while( v1 )
  {
    v11 = v1;
    v1 = (_QWORD *)*v1;
  }
  while( 1 )
  {
    PteBase = MmGetPteBase();
    if( !v11 )
      break;
    if( !(unsigned int)MiReserveBootDriverPtes(
                          (UINT64)PteBase + ((*(_QWORD *)(v11[3] + 48i64) >> 9) & 0x7FFFFFFFF8i64),
                          *(_DWORD *)(v11[3] + 64i64) >> 12) )
      return 0i64;
    v14 = (_QWORD *)v11[1];
    v15 = v11;
    if( v14 )
    {
      v12 = (_QWORD *)*v14;
      v11 = (_QWORD *)v11[1];
      if( *v14 )
      {
        do
        {
          v11 = v12;
          v12 = (_QWORD *)*v12;
        }
        while( v12 );
      }
    }
    else
    {
      while( 1 )
      {
        v11 = (_QWORD *)(v11[2] & 0xFFFFFFFFFFFFFFFCui64);
        if( !v11 || (_QWORD *)*v11 == v15 )
          break;
        v15 = v11;
      }
    }
  }
  for( i = qword_140C4CA70; i; i = *(PVOID *)i )
  {
    v17 = 0;
    do
    {
      v18 = *((_DWORD *)i + 4);
      v19 = v17 < v18 ? v17 : 0;
      v20 = v18 - 1;
      v21 = (*((_DWORD *)i + 6) & 4) != 0i64 ? 0x20 : 0;
      v22 = *((_QWORD *)i + 3) - ((*((_QWORD *)i + 3) & 4i64) != 0 ? 4 : 0);
      while( 1 )
      {
        v23 = v21 + v20;
        v24 = v21 + v19;
        if( v20 - v19 == -1 )
          goto LABEL_65;
        v25 = (__int64 *)(v22 + 8 * ((unsigned __int64)v24 >> 6));
        for( j = *v25 | ((1i64 << (v24 & 0x3F)) - 1); j == -1; j = *v25 )
        {
          if( (unsigned __int64)++v25 > v22 + 8 * ((unsigned __int64)v23 >> 6) )
            goto LABEL_65;
        }
        _BitScanForward64(&v27, ~j);
        v28 = v27 + ((unsigned int)(((__int64)v25 - v22) >> 3) << 6);
        if( v28 > v23 )
        {
LABEL_65:
          v28 = -1;
        }
        else if( v28 != -1 )
        {
          break;
        }
        if( !v19 )
          break;
        v52 = v17 + 1;
        if( v17 + 1 > v18 )
          v52 = *((_DWORD *)i + 4);
        v20 = v52 - 1;
        v19 = 0;
      }
      v29 = v28 - v21;
      if( v28 == -1 )
        v29 = 0xFFFFFFFFi64;
      if( (unsigned int)v29 < v17 || (_DWORD)v29 == -1 )
        break;
      v30 = *((_DWORD *)i + 4);
      v31 = v29 + 1;
      v32 = v31 < v30 ? v31 : 0;
      v33 = v30 - 1;
      v34 = (*((_DWORD *)i + 6) & 4) != 0i64 ? 0x20 : 0;
      v35 = *((_QWORD *)i + 3) - ((*((_QWORD *)i + 3) & 4i64) != 0 ? 4 : 0);
      while( 1 )
      {
        v36 = v34 + v33;
        v37 = v34 + v32;
        if( v33 - v32 == -1 )
          goto LABEL_60;
        v38 = (_QWORD *)(v35 + 8 * ((unsigned __int64)v37 >> 6));
        for( k = ~*v38 | ((1i64 << (v37 & 0x3F)) - 1); k == -1; k = ~*v38 )
        {
          if( (unsigned __int64)++v38 > v35 + 8 * ((unsigned __int64)v36 >> 6) )
            goto LABEL_60;
        }
        _BitScanForward64(&v40, ~k);
        v41 = v40 + ((unsigned int)(((__int64)v38 - v35) >> 3) << 6);
        if( v41 > v36 )
        {
LABEL_60:
          v41 = -1;
        }
        else if( v41 != -1 )
        {
          break;
        }
        if( !v32 )
          break;
        v44 = v29 + 2;
        if( (int)v29 + 2 > v30 )
          v44 = *((_DWORD *)i + 4);
        v33 = v44 - 1;
        v32 = 0;
      }
      v17 = v41 - v34;
      if( v41 == -1 )
        v17 = -1;
      if( v17 < v31 || v17 == -1 )
        v17 = *((_DWORD *)i + 4);
      v42 = *((_QWORD *)i + 1) + 8 * v29;
      v43 = v17 - v29;
      if( v17 != (_DWORD)v29 )
      {
        do
        {
          if( MI_READ_PTE_LOCK_FREE(v42) )
            _bittestandset(*((signed __int32 **)i + 3), v29);
          LODWORD(v29) = v29 + 1;
          v42 += 8i64;
          --v43;
        }
        while( v43 );
      }
    }
    while( v17 < *((_DWORD *)i + 4) );
  }
  if( (KiSpeculationFeatures & 0x4000000) != 0 )
    qword_140C4DE38 = (unsigned __int64)(((__int64)((*((_QWORD *)qword_140C4CA70 + 1) << 25)
                                                  + ((unsigned __int64)*((unsigned int *)qword_140C4CA70 + 4) << 28)
                                                  - ((_QWORD)MmGetPteBase() << 25)) >> 16)
                                       - qword_140C4DE40) >> 21;
  v45 = v53;
  m = 0i64;
  while( v45 )
  {
    m = v45;
    v45 = (__int64 *)*v45;
  }
  while( m )
  {
    v48 = (__int64 **)m[1];
    v49 = m;
    v50 = m;
    if( v48 )
    {
      v47 = *v48;
      for( m = (__int64 *)m[1]; v47; v47 = (__int64 *)*v47 )
        m = v47;
    }
    else
    {
      while( 1 )
      {
        m = (__int64 *)(m[2] & 0xFFFFFFFFFFFFFFFCui64);
        if( !m || (__int64 *)*m == v50 )
          break;
        v50 = m;
      }
    }
    RtlAvlRemoveNode((unsigned __int64 *)&v53, v49);
    ExFreePoolWithTag(v49, 0);
  }
  return 1i64;
}

Referenced by:

MiInitializeDriverImages