PopPreallocateHibernateMemory

INT64 __stdcall PopPreallocateHibernateMemory(){
  __int64 v0; 
  UINT64 HighestPhysicalPage; 
  unsigned int v2; 
  int v3; 
  unsigned __int64 v4; 
  unsigned int v5; 
  unsigned int v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned int v10; 
  char *PoolWithTag; 
  char *v12; 
  INT64 result; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  if( dword_140C19650 == 2 )
    v0 = 102400i64;
  else
    v0 = v14;
  HighestPhysicalPage = MmGetHighestPhysicalPage(0i64);
  v4 = (HighestPhysicalPage + 32) & 0xFFFFFFFFFFFFFFE0ui64;
  if( v4 < HighestPhysicalPage || v4 > 0xFFFFFFFF )
    return 3221225626i64;
  v16 = v2;
  v5 = ((unsigned int)v4 >> 3) + v2;
  v17 = v5;
  v18 = (v5 + ((unsigned int)v4 >> 3) + 7) & 0xFFFFFFF8;
  v6 = ((((v5 + ((unsigned int)v4 >> 3) + 7) & 0xFFFFFFF8) + 247) & 0xFFFFFFF8) + 176;
  v19 = (((v5 + ((unsigned int)v4 >> 3) + 7) & 0xFFFFFFF8) + 247) & 0xFFFFFFF8;
  if( v3 == 2 )
  {
    v7 = ((((v5 + ((unsigned int)v4 >> 3) + 7) & 0xFFFFFFF8) + 247) & 0xFFFFFFF8) + 176;
    v6 = ((((v5 + ((unsigned int)v4 >> 3) + 7) & 0xFFFFFFF8) + 247) & 0xFFFFFFF8) + 232;
  }
  else
  {
    v7 = v15;
  }
  v8 = v6;
  v9 = (v6 + 135) & 0xFFFFFFF8;
  if( (HvlpFlags & 2) == 0 || (result = HvlpPreallocatePageListResources(), (int)result >= 0) )
  {
    v10 = (((v9 + 4159) & 0xFFFFF000) + 0x3FFF) & 0xFFFFF000;
    PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, v10, 0x72626968ui64);
    v12 = PoolWithTag;
    if( PoolWithTag )
    {
      if( (unsigned int)MmObtainChargesToLockPagedPool(PoolWithTag, v10) )
      {
        qword_140C234A8 = (__int64)(v12 + 4096);
        Length = v10;
        PagedPoolVa = v12;
        qword_140C234A0 = (__int64)v12;
        if( dword_140C19650 == 2 )
          qword_140C234F8 = (__int64)&v12[v0];
        else
          qword_140C234F8 = 0i64;
        LODWORD(xmmword_140C234C0) = v4;
        *((_QWORD *)&xmmword_140C234C0 + 1) = &v12[v16];
        LODWORD(xmmword_140C234B0) = v4;
        *((_QWORD *)&xmmword_140C234B0 + 1) = &v12[v17];
        qword_140C234D0 = (__int64)&v12[v18];
        if( dword_140C19650 == 2 )
          qword_140C23500 = (__int64)&v12[v7];
        else
          qword_140C23500 = 0i64;
        qword_140C234D8 = (INT64)&v12[v9];
        Address = &v12[((_DWORD)v9 + 4159) & 0xFFFFF000];
        qword_140C234E8 = (INT64)&v12[v8];
        qword_140C234F0 = (__int64)&v12[v19];
        return 0i64;
      }
      ExFreePoolWithTag(v12, 0x72626968u);
    }
    return 3221225626i64;
  }
  return result;
}

Referenced by:

PopEnableHiberFile