MiReserveBootDriverPtes

NTSTATUS __stdcall MiReserveBootDriverPtes(UINT64 a1, INT64 a2){
  __int64 v3; 
  __int64 v4; 
  const VOID **v5; 
  UINT64 v6; 
  __int64 v7; 
  UINT64 v8; 
  _RTL_BITMAP *Pool; 
  unsigned int v10; 
  _RTL_BITMAP *v11; 
  unsigned int *p_Buffer; 

  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 = (const VOID **)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);
      goto LABEL_7;
    }
    v5 = (const VOID **)((unsigned __int64)qword_140C4CA70 & -(__int64)(a1 < v8));
    if( v5 )
      v6 = *(_QWORD *)(((unsigned __int64)qword_140C4CA70 & -(__int64)(a1 < v8)) + 8);
  }
  v10 = (__int64)(((a1 + 4088 + 8 * v3) & 0xFFFFFFFFFFFFF000ui64) - v6) >> 3;
  Pool = (_RTL_BITMAP *)MiAllocatePool(64i64, ((unsigned __int64)v10 >> 3) + 40, 0x70446D4Dui64);
  v11 = Pool;
  if( !Pool )
    return(int)Pool;
  Pool[1].SizeOfBitMap = v10;
  p_Buffer = (unsigned int *)&Pool[2].Buffer;
  v11[1].Buffer = p_Buffer;
  if( v5 )
  {
    memmove(p_Buffer, v5[3], *((_DWORD *)v5 + 4) >> 3);
    qword_140C4CA70 = (PVOID)*v5;
    ExFreePoolWithTag(v5, 0);
  }
  RtlSetBits(v11 + 1, (unsigned int)((__int64)(a1 - v6) >> 3), (unsigned int)v3);
  v11[2].SizeOfBitMap = 0;
  *(&v11[2].SizeOfBitMap + 1) = 1;
  v11->Buffer = (unsigned int *)v6;
  *(_QWORD *)&v11->SizeOfBitMap = qword_140C4CA70;
  qword_140C4CA70 = v11;
LABEL_7:
  LODWORD(Pool) = 1;
  return(int)Pool;
}

Referenced by:

MiInitializeDriverPtes