ResFwGetContext

NTSTATUS __stdcall ResFwGetContext(VOID **Context){
  char *v1; 
  char v3; 
  int v4; 
  unsigned int v5; 
  unsigned int v6; 
  PMDL *PagesForMdl; 
  PMDL *v8; 
  PMDL v9; 
  __int64 v10; 
  NTSTATUS result; 
  UINT64 CacheType; 
  UINT64 Flags; 

  v1 = 0i64;
  if( !Context )
    return -1073741811;
  v3 = *(&SbiVmbusArrivalEvent + 368);
  *Context = 0i64;
  if( (v3 & 1) == 0 )
    return -1073741823;
  v4 = *(&SbiVmbusArrivalEvent + 99);
  if( *(&SbiVmbusArrivalEvent + 100) >= *(&SbiVmbusArrivalEvent + 99) )
    v4 = *(&SbiVmbusArrivalEvent + 100);
  v5 = (*(&SbiVmbusArrivalEvent + 103) + v4 + *(&SbiVmbusArrivalEvent + 102) + 20479) & 0xFFFFF000;
  v6 = ((v5 >> 3) + 4095) & 0xFFFFF000;
  PagesForMdl = MmAllocatePagesForMdlEx(0i64, (PHYSICAL_ADDRESS)-1i64, 0i64, v5 + v6, MmCached, 5u);
  v8 = PagesForMdl;
  if( PagesForMdl )
  {
    if( (*((_BYTE *)PagesForMdl + 10) & 5) != 0 )
    {
      v9 = PagesForMdl[3];
    }
    else
    {
      LODWORD(Flags) = 1073741856;
      LODWORD(CacheType) = 0;
      v9 = (PMDL)MmMapLockedPagesSpecifyCache((_MDL *)PagesForMdl, 0, MmCached, 0i64, CacheType, Flags);
    }
  }
  else
  {
    v9 = 0i64;
  }
  v10 = *(&SbiVmbusArrivalEvent + 52);
  *(_QWORD *)(*(&SbiVmbusArrivalEvent + 52) + 8i64) = v8;
  *(_QWORD *)(v10 + 16) = v9;
  if( v9 )
    v1 = (char *)v9 + v6;
  *(_DWORD *)(v10 + 24) = v9 != 0i64 ? v5 + v6 : 0;
  *(_DWORD *)(v10 + 248) = v9 != 0i64 ? v5 : 0;
  *(_QWORD *)(v10 + 240) = v1;
  qword_140C50460 = *(&SbiVmbusArrivalEvent + 70);
  qword_140C50458 = *(&SbiVmbusArrivalEvent + 71);
  result = 0;
  *Context = (VOID *)v10;
  return result;
}

Referenced by:

BgGetContext