ExpInitBootEntropyInformation

UINT64 __stdcall ExpInitBootEntropyInformation(_RTL_RUN_ONCE *RunOnce, VOID *Parameter, VOID **Context){
  unsigned int *v4; 
  _BOOT_ENTROPY_LDR_RESULT *p_BootEntropyResult; 
  _DWORD *v6; 
  signed __int64 v7; 
  __int64 v8; 
  __int128 v9; 

  v4 = *(unsigned int **)Parameter;
  p_BootEntropyResult = &KeLoaderBlock_0->Extension->BootEntropyResult;
  if( *(_QWORD *)Parameter )
  {
    memset(v4, 0i64, 0x448u);
    v6 = v4 + 4;
    v7 = (char *)p_BootEntropyResult - (char *)v4;
    v8 = 10i64;
    do
    {
      *(v6 - 2) = *(_DWORD *)((char *)v6 + v7 - 8);
      *(_QWORD *)v6 = *(_QWORD *)((char *)v6 + v7);
      v6[2] = *(_DWORD *)((char *)v6 + v7 + 8);
      v6[3] = *(_DWORD *)((char *)v6 + v7 + 12);
      *((_QWORD *)v6 + 2) = *(_QWORD *)((char *)v6 + v7 + 16);
      v6[6] = *(_DWORD *)((char *)v6 + v7 + 24);
      v9 = *(_OWORD *)((char *)v6 + v7 + 28);
      v6 += 26;
      *(_OWORD *)(v6 - 19) = v9;
      *(_OWORD *)(v6 - 15) = *(_OWORD *)((char *)v6 + v7 - 60);
      *(_OWORD *)(v6 - 11) = *(_OWORD *)((char *)v6 + v7 - 44);
      *(_OWORD *)(v6 - 7) = *(_OWORD *)((char *)v6 + v7 - 28);
      --v8;
    }
    while( v8 );
    *v4 = p_BootEntropyResult->maxEntropySources;
    *(_OWORD *)(v4 + 262) = *(_OWORD *)p_BootEntropyResult->SeedBytesForCng;
    *(_OWORD *)(v4 + 266) = *(_OWORD *)&p_BootEntropyResult->SeedBytesForCng[16];
    *(_OWORD *)(v4 + 270) = *(_OWORD *)&p_BootEntropyResult->SeedBytesForCng[32];
  }
  memset(p_BootEntropyResult, 0, 0x448ui64);
  *(_QWORD *)Parameter = -1i64;
  return 1i64;
}

Referenced by:

No references.