MiInitializeProcessBottomUpEntropy
__int64 __fastcall MiInitializeProcessBottomUpEntropy(__int64 a1){
int v1;
unsigned int v2;
__int64 v3;
char v5;
unsigned __int64 v6;
int v7;
__int64 v8;
unsigned __int64 v9;
__int64 v10;
__int64 v11;
unsigned __int64 v12;
__int64 v13;
__int64 result;
__int64 v15;
__int64 v16;
INT64 v17;
v1 = *(_DWORD *)(a1 + 2512);
v2 = 0;
v3 = *(_QWORD *)(a1 + 1680);
v17 = 0i64;
v5 = 0;
v16 = 1i64;
v6 = 2i64;
if( (v1 & 0x40) != 0 )
goto LABEL_20;
v7 = ExGenRandom(1i64);
v8 = (unsigned __int8)v7;
if( !*(_DWORD *)InitializationPhase )
*(_DWORD *)(a1 + 2512) |= 0x20u;
if( *(_QWORD *)(a1 + 1496) > 0x100000000ui64 && (*(_DWORD *)(a1 + 2512) & 0x20) != 0 )
{
v9 = *(_QWORD *)&v7 & 0xFFFFFFi64;
v8 = 0x10000i64;
v5 = 1;
if( v9 > 0x10000 )
v8 = v9;
}
if( !v8 )
v8 = 1i64;
v16 = v8;
if( !v5 )
{
LABEL_20:
_InterlockedAnd((volatile signed __int32 *)(a1 + 2512), 0xFFFFFFDF);
v8 = v16;
}
if( v5 == 1 )
v15 = v8 + (ExGenRandom(1i64) & 0xFFFFFF) + 0x1000000;
else
v15 = v8;
if( *(_QWORD *)(a1 + 1496) <= 0x100000000ui64 )
{
v6 = 3i64;
v17 = (ExGenRandom(1i64) & 0xFFFFFF) + 0x10000;
}
*(_QWORD *)(v3 + 264) = v6;
v10 = 0i64;
do
{
v11 = 9 * v10;
v12 = *(_QWORD *)(a1 + 1496) - 1i64;
if( v2 == 2 )
v12 = 0x7FFFFFFEFFFFi64;
++v2;
*(_QWORD *)(v3 + 72 * v10 + 88) = v12 >> 16;
v13 = *(&v15 + v10);
*(_QWORD *)(v3 + 72 * v10 + 112) = v13;
result = v13 << 16;
v10 = v2;
*(_QWORD *)(v3 + 8 * v11 + 104) = result;
}
while( v2 < v6 );
return result;
}Referenced by:
MmInitializeProcessAddressSpace