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