PpmHeteroInitializeHgsSupport

INT64 __stdcall PpmHeteroInitializeHgsSupport(){
  MDL *v0; 
  char v1; 
  __int64 v2; 
  unsigned int v3; 
  PMDL PagesForMdl; 
  PVOID MappedSystemVa; 
  v0 = 0i64;
  if( !PpmHeteroHgsDisabled
    && (unsigned int)EAX(__cpuid(0, 0)) >= 6
    && (v2 = __cpuid(6, 0), v1 = EDX(v2), (EAX(v2) & 0x80000) != 0) )
  {
    if( (v1 & 1) != 0 && (v1 & 2) != 0 )
    {
      PagesForMdl = MmAllocatePagesForMdlEx(0i64, MmNotMapped, 0);
      v0 = PagesForMdl;
      if( !PagesForMdl )
        return(unsigned int)-1073741670;
      if( (PagesForMdl->MdlFlags & 5) != 0 )
        MappedSystemVa = PagesForMdl->MappedSystemVa;
      else
        MappedSystemVa = MmMapLockedPagesSpecifyCache(PagesForMdl, 0, MmCached, 0i64, 0, 0x40000000u);
      if( MappedSystemVa )
      {
        __writemsr(0x17D0u, ((__int64)v0[1].Next << 12) | 1);
        __writemsr(0x17D1u, 1ui64);
        PpmHeteroHgsInterface = (__int64)MappedSystemVa;
        qword_140CFBE28 = (__int64)PpmHeteroHgsUpdateDpcRoutine;
        v3 = 0;
        LODWORD(PpmHeteroHgsUpdateDpc) = 787;
        PpmHeteroHgsUpdateWorkItem.WorkerRoutine = (void(__fastcall *)(void *))PpmHeteroHgsUpdateWorker;
        qword_140CFBE30 = 0i64;
        qword_140CFBE48 = 0i64;
        qword_140CFBE20 = 0i64;
        PpmHeteroHgsUpdateWorkItem.Parameter = 0i64;
        PpmHeteroHgsUpdateWorkItem.List.Flink = 0i64;
        PpmHeteroHgsTableMdl = (__int64)v0;
        PpmHeteroHgsEnabled = 1;
        return v3;
      }
      v3 = -1073741670;
    }
    else
    {
      v3 = -1073741637;
    }
    if( v0 )
    {
      MiFreePagesFromMdl(v0, 0i64);
      ExFreePoolWithTag(v0, 0);
    }
  }
  else
  {
    return(unsigned int)-1073741637;
  }
  return v3;
}

Referenced by:

PoInitSystem
PpmHeteroHgsBackupInit