MiReserveBootDriverPtes

INT64 __stdcall MiReserveBootDriverPtes(UINT64 a1, INT64 a2){
  __int64 v3; 
  __int64 v4; 
  UINT8 **v5; 
  UINT64 v6; 
  __int64 v7; 
  UINT64 v8; 
  INT64 result; 
  RTL_BITMAP *v10; 
  UINT8 *v11; 
  v3 = ((dword_140C4C9F0 & 0xFFF) != 0) + (unsigned int)a2 + ((unsigned int)dword_140C4C9F0 >> 12);
  v4 = (__int64)((a1 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
  if( (PVOID)v4 != PsHalImageBase && v4 != PsNtosImageBase )
    v3 = (unsigned int)(dword_140C4C98C + v3);
  v5 = (UINT8 **)qword_140C4CA70;
  v6 = a1 & 0xFFFFFFFFFFFFF000ui64;
  if( qword_140C4CA70 )
  {
    v7 = *((_QWORD *)qword_140C4CA70 + 1);
    v8 = v7 + 8i64 * *((unsigned int *)qword_140C4CA70 + 4);
    if( a1 + 8 * v3 <= v8 )
    {
      RtlSetBits((RTL_BITMAP *)qword_140C4CA70 + 1, (unsigned int)((__int64)(a1 - v7) >> 3), (unsigned int)v3);
      return 1i64;
    }
    v5 = (UINT8 **)((unsigned __int64)qword_140C4CA70 & -(__int64)(a1 < v8));
    if( v5 )
      v6 = *(_QWORD *)(((unsigned __int64)qword_140C4CA70 & -(__int64)(a1 < v8)) + 8);
  }
  LODWORD(result) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
  v10 = (RTL_BITMAP *)result;
  if( result )
  {
    *(_DWORD *)(result + 16) = (__int64)(((a1 + 4088 + 8 * v3) & 0xFFFFFFFFFFFFF000ui64) - v6) >> 3;
    v11 = (UINT8 *)(result + 40);
    v10[1].Buffer = (unsigned int *)v11;
    if( v5 )
    {
      memmove(v11, v5[3], (unsigned __int64)*((unsigned int *)v5 + 4) >> 3);
      qword_140C4CA70 = *v5;
      ExFreePoolWithTag(v5, 0);
    }
    RtlSetBits(v10 + 1, (unsigned int)((__int64)(a1 - v6) >> 3), (unsigned int)v3);
    v10[2].SizeOfBitMap = 0;
    *(&v10[2].SizeOfBitMap + 1) = 1;
    v10->Buffer = (unsigned int *)v6;
    *(_QWORD *)&v10->SizeOfBitMap = qword_140C4CA70;
    qword_140C4CA70 = v10;
    return 1i64;
  }
  return result;
}

Referenced by:

MiInitializeDriverPtes