ExRngInitializeSystem

INT64 __stdcall ExRngInitializeSystem(){
  __int64 *v0; 
  unsigned int v1; 
  __int64 v2; 
  __int64 v3; 
  __int64 v4; 
  __int128 *v5; 
  __int128 v6; 
  __int128 v7; 
  __int128 v8; 
  __int128 v9; 
  __int128 v10; 
  __int128 v11; 
  __int128 v12; 
  __int64 v13; 
  __int128 v14; 
  __int128 v15; 
  __int128 v16; 
  __int128 v17; 
  __int128 v18; 
  __int128 v19; 
  __int128 v20; 
  __int128 v21; 
  __int128 v22; 
  __int128 v23; 
  __int128 v24; 
  __int128 v25; 
  __int128 v26; 
  __int64 v27; 
  __int128 v28; 
  __int128 v29; 
  __int128 v30; 
  __int128 v31; 
  INT64 result; 
  _OWORD v33[14]; 
  v0 = ExpLFGRngState;
  v1 = 220;
  ExpLFGRngLock = 0i64;
  v2 = *((_QWORD *)KeLoaderBlock_0 + 30);
  v3 = 2i64;
  do
  {
    v4 = v1;
    v1 += 220;
    v5 = (__int128 *)(v4 + v2 + 1440);
    v6 = v5[1];
    v33[0] = *v5;
    v7 = v5[2];
    v33[1] = v6;
    v8 = v5[3];
    v33[2] = v7;
    v9 = v5[4];
    v33[3] = v8;
    v10 = v5[5];
    v33[4] = v9;
    v11 = v5[6];
    v33[5] = v10;
    v12 = v5[7];
    v5 += 8;
    v33[6] = v11;
    v13 = *((_QWORD *)v5 + 10);
    v14 = *v5;
    v33[7] = v12;
    v15 = v5[1];
    v33[8] = v14;
    v16 = v5[2];
    v33[9] = v15;
    v17 = v5[3];
    v33[10] = v16;
    v18 = v5[4];
    v33[11] = v17;
    v33[12] = v18;
    *(_QWORD *)&v33[13] = v13;
    DWORD2(v33[13]) = *((_DWORD *)v5 + 22);
    v19 = v33[0];
    *((_DWORD *)v0 + 55) = 1;
    v20 = v33[1];
    *((_DWORD *)v0 + 56) = 32;
    *(_OWORD *)v0 = v19;
    v21 = v33[2];
    *((_OWORD *)v0 + 1) = v20;
    v22 = v33[3];
    *((_OWORD *)v0 + 2) = v21;
    v23 = v33[4];
    *((_OWORD *)v0 + 3) = v22;
    v24 = v33[5];
    *((_OWORD *)v0 + 4) = v23;
    v25 = v33[6];
    *((_OWORD *)v0 + 5) = v24;
    v26 = v33[7];
    *((_OWORD *)v0 + 6) = v25;
    *((_OWORD *)v0 + 7) = v26;
    v27 = *(_QWORD *)&v33[13];
    v28 = v33[9];
    *((_OWORD *)v0 + 8) = v33[8];
    v29 = v33[10];
    *((_OWORD *)v0 + 9) = v28;
    v30 = v33[11];
    *((_OWORD *)v0 + 10) = v29;
    v31 = v33[12];
    *((_OWORD *)v0 + 11) = v30;
    *((_OWORD *)v0 + 12) = v31;
    v0[26] = v27;
    *((_DWORD *)v0 + 54) = DWORD2(v33[13]);
    *(_DWORD *)v0 |= 1u;
    v0 = (__int64 *)((char *)v0 + 228);
    --v3;
  }
  while( v3 );
  ExpRemainingLeftoverBootRngData = (1024 - v1) >> 2;
  memmove(&ExpLeftoverBootRngData, (UINT8 *)(v1 + v2 + 1440), 4i64 * ((1024 - v1) >> 2));
  memset((void *)(v2 + 1440), 0, 0x400ui64);
  memset(v33, 0, 0xDCui64);
  ExpSecurityCookieRandomData = (unsigned __int64)(unsigned int)ExGenRandom(0i64) << 32;
  result = (unsigned int)ExGenRandom(0i64);
  ExpSecurityCookieRandomData = (unsigned int)result | (unsigned __int64)ExpSecurityCookieRandomData;
  HIWORD(ExpSecurityCookieRandomData) = 0;
  if( !ExpSecurityCookieRandomData )
    ExpSecurityCookieRandomData = 1i64;
  return result;
}

Referenced by:

KiInitializeBootStructures