PopReadResumeContext

INT64 __fastcall PopReadResumeContext(_DWORD *a1, _QWORD *a2){
  _DWORD *v2; 
  int v5; 
  unsigned int *v6; 
  int v7; 
  int v8; 
  UINT64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  __int64 pullResult[5]; 
  PVOID a3; 
  PVOID P; 
  P = 0i64;
  v2 = 0i64;
  pullResult[0] = 0i64;
  a3 = 0i64;
  v5 = PopReadPagesFromHiberFile(0i64, 1ui64, &P);
  v6 = (unsigned int *)P;
  v7 = v5;
  if( v5 >= 0 )
  {
    v8 = *(_DWORD *)P;
    if( *(_DWORD *)P
      && v8 != 1380075848
      && v8 != 1381258066
      && v8 != 1162559831
      && v8 != 1347113538
      && v8 != 1297239880 )
    {
      goto LABEL_8;
    }
    v9 = *((unsigned int *)P + 216);
    if( !(_DWORD)v9 )
      goto LABEL_8;
    v7 = PopReadPagesFromHiberFile(2ui64, v9, &a3);
    if( v7 < 0 || (v7 = RtlULongLongMult(v6[216], 0x1000ui64, (UINT64 *)pullResult), v7 < 0) )
    {
      v2 = a3;
    }
    else
    {
      v2 = a3;
      if( *(_DWORD *)a3 != 1 )
        goto LABEL_8;
      v10 = *((unsigned int *)a3 + 1);
      if( v10 > pullResult[0] )
        goto LABEL_8;
      v11 = 48i64 * *((unsigned int *)a3 + 2);
      if( v11 <= 0xFFFFFFFF )
      {
        v7 = 0;
        if( (unsigned int)v11 <= (unsigned int)v10 )
        {
          memset((INT64)a3 + v10, 0i64);
          *a1 = v2[1];
          *a2 = v2;
          goto LABEL_19;
        }
LABEL_8:
        v7 = -1073741271;
        goto LABEL_19;
      }
      v7 = -1073741675;
    }
  }
LABEL_19:
  if( v6 )
    ExFreePoolWithTag(v6, 0x206D654Du);
  if( v7 < 0 )
  {
    if( v2 )
      ExFreePoolWithTag(v2, 0x206D654Du);
    *a2 = 0i64;
    *a1 = 0;
  }
  return(unsigned int)v7;
}

Referenced by:

PopPowerInformationInternal