SymCryptDetectCpuFeaturesByCpuid
VOID __stdcall SymCryptDetectCpuFeaturesByCpuid(UINT32 flags){
char v1;
int v2;
int v3;
int v4;
__int64 *v5;
unsigned int i;
int v7;
int v8;
unsigned int v9;
INT64 v10;
int v11;
int v12;
v1 = flags;
v2 = 0;
v3 = -2016;
SymCryptCpuidExFunc(&v10, 0i64, 0i64);
v4 = v10;
v5 = cpuidBitInfo;
for( i = 0; i < 0xD; ++i )
{
v7 = *(unsigned __int8 *)v5;
if( v7 != v2 )
{
v2 = *(unsigned __int8 *)v5;
SymCryptCpuidExFunc(&v10, *(unsigned __int8 *)v5, 0i64);
LOBYTE(v7) = *(_BYTE *)v5;
}
if( (unsigned __int8)v7 > v4
|| (v8 = *((_DWORD *)&v10 + *((unsigned __int8 *)v5 + 1)), !_bittest(&v8, *((unsigned __int8 *)v5 + 2))) )
{
v3 |= *((_DWORD *)v5 + 1);
}
++v5;
}
if( (v1 & 1) != 0 )
{
SymCryptCpuidExFunc(&v10, 1i64, 0i64);
if( (v11 & 0x8000000) == 0 || (_xgetbv(0) & 6) != 6 )
v3 |= 0x10u;
}
if( (v3 & 4) == 0 )
{
SymCryptCpuidExFunc(&v10, 0i64, 0i64);
if( HIDWORD(v10) == 1752462657 && v11 == 1145913699 && v12 == 1769238117 )
{
SymCryptCpuidExFunc(&v10, 1i64, 0i64);
v9 = ((int)v10 >> 8) & 0xF;
if( v9 == 15 )
v9 = (unsigned __int8)((int)v10 >> 20) + 15;
if( v9 < 0x15 )
v3 |= 4u;
}
}
SymCryptCpuidExFunc(g_SymCryptCpuid1, 1i64, 0i64);
g_SymCryptCpuFeaturesNotPresent = v3;
}Referenced by:
SymCryptInitEnvWindowsKernelmodeWin8_1nLater