KiInitPrcb

__int64 __fastcall KiInitPrcb(__int64 a1, int a2){
  _QWORD *v3; 
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  _QWORD *v8; 
  __int64 i; 
  __int64 result; 
  *(_DWORD *)(a1 + 31776) = 1;
  *(_DWORD *)(a1 + 31768) = 0;
  *(_DWORD *)(a1 + 32436) = 0;
  v3 = (_QWORD *)(a1 + 31872);
  *(_QWORD *)(a1 + 32440) = 0i64;
  v5 = 32i64;
  *(_QWORD *)(a1 + 11528) = 0i64;
  v6 = 32i64;
  do
  {
    v3[1] = v3;
    *v3 = v3;
    v3 += 2;
    --v6;
  }
  while( v6 );
  v7 = 0i64;
  **(_QWORD **)(a1 + 33864) = 0i64;
  *(_DWORD *)(*(_QWORD *)(a1 + 33864) + 8i64) = 0;
  *(_DWORD *)(*(_QWORD *)(a1 + 33864) + 608i64) = 0;
  *(_QWORD *)(*(_QWORD *)(a1 + 33864) + 616i64) = 0i64;
  do
  {
    v8 = (_QWORD *)(v7 + *(_QWORD *)(a1 + 33864) + 16i64);
    v7 += 16i64;
    v8[1] = v8;
    *v8 = v8;
    --v5;
  }
  while( v5 );
  memset(*(_QWORD *)(a1 + 33864) + 528i64, 127i64);
  *(_BYTE *)(*(_QWORD *)(a1 + 33864) + 592i64) = 1;
  *(_BYTE *)(*(_QWORD *)(a1 + 33864) + 593i64) = *(_BYTE *)(a1 + 209);
  for( i = 0i64; i < 2; ++i )
    *(_BYTE *)(i + *(_QWORD *)(a1 + 33864) + 594) = 1;
  *(_QWORD *)(*(_QWORD *)(a1 + 33864) + 600i64) = *(_QWORD *)(a1 + 200);
  *(_QWORD *)(a1 + 56) = *(_QWORD *)(a1 + 33864) + 528i64;
  KiInitializeDpcList((_KDPC_LIST *)(a1 + 12480));
  *(_QWORD *)(a1 + 12496) = 0i64;
  *(_DWORD *)(a1 + 12504) = 0;
  *(_DWORD *)(a1 + 12588) = 0;
  *(_BYTE *)(a1 + 12586) = 0;
  *(_DWORD *)(a1 + 12508) = 0;
  *(_DWORD *)(a1 + 12568) = KiMaximumDpcQueueDepth;
  *(_DWORD *)(a1 + 12576) = *(_DWORD *)KiMinimumDpcRate;
  *(_DWORD *)(a1 + 32404) = KiAdjustDpcThreshold;
  KeInitializeDpc((PRKDPC)(a1 + 31648), KiDpcWatchdog, 0i64);
  if( !*(_QWORD *)(a1 + 31704) )
    *(_WORD *)(a1 + 31650) = a2 + 1280;
  *(_BYTE *)(a1 + 31649) = 2;
  *(_QWORD *)(a1 + 31752) = a1 + 31744;
  *(_QWORD *)(a1 + 31744) = a1 + 31744;
  *(_QWORD *)(a1 + 12456) = 1i64;
  InitializeSListHead((_SLIST_HEADER *)(a1 + 12416));
  *((_QWORD *)KeGetPcr() + 5) = a1 + 1776;
  *(_QWORD *)(a1 + 2008) = &CcBcbSpinLock;
  *(_QWORD *)(a1 + 2000) = 0i64;
  *(_QWORD *)(a1 + 1864) = &CcMasterSpinLock;
  *(_QWORD *)(a1 + 1848) = &CcVacbSpinLock;
  *(_QWORD *)(a1 + 1880) = &NonPagedPoolLock;
  *(_QWORD *)(a1 + 1896) = &IopCancelSpinLock;
  *(_QWORD *)(a1 + 1928) = &IopVpbSpinLock;
  *(_QWORD *)(a1 + 1944) = &IopDatabaseLock;
  *(_QWORD *)(a1 + 1960) = &IopCompletionLock;
  *(_QWORD *)(a1 + 1976) = &NtfsStructLock;
  *(_QWORD *)(a1 + 1992) = &AfdWorkQueueSpinLock;
  *(_QWORD *)(a1 + 1856) = 0i64;
  *(_QWORD *)(a1 + 1840) = 0i64;
  *(_QWORD *)(a1 + 1872) = 0i64;
  *(_QWORD *)(a1 + 1888) = 0i64;
  *(_QWORD *)(a1 + 1920) = 0i64;
  *(_QWORD *)(a1 + 1936) = 0i64;
  *(_QWORD *)(a1 + 1952) = 0i64;
  *(_QWORD *)(a1 + 1968) = 0i64;
  *(_QWORD *)(a1 + 1984) = 0i64;
  *(_QWORD *)(a1 + 2032) = 0i64;
  *(_QWORD *)(a1 + 2040) = 0i64;
  *(_DWORD *)(a1 + 34272) = (3 * (_WORD)a2) & 0x3FF;
  *(_QWORD *)(a1 + 48) = 0i64;
  *(_QWORD *)(a1 + 31760) = 0i64;
  *(_DWORD *)(a1 + 31712) = 1;
  KeInitializeDpc((PRKDPC)(a1 + 34536), (PKDEFERRED_ROUTINE)KiEntropyDpcRoutine, (PVOID)(a1 + 34272));
  if( !a2 )
  {
    KiClockPollCycle = KiClockKeepAliveCycle;
    KiReverseStallIpiLock = 0i64;
    CcBcbSpinLock = 0i64;
    CcMasterSpinLock = 0i64;
    CcVacbSpinLock = 0i64;
    IopCancelSpinLock = 0i64;
    IopCompletionLock = 0i64;
    IopDatabaseLock = 0i64;
    IopVpbSpinLock = 0i64;
    NonPagedPoolLock = 0i64;
    NtfsStructLock = 0i64;
    AfdWorkQueueSpinLock = 0i64;
    *(_DWORD *)&KeSleepingProcessors.Count = 1310740;
    memset((INT64)&KeSleepingProcessors.Reserved, 0i64);
  }
  KiIntSteerInitPrcb(a1);
  KeInitializeDpc((PRKDPC)(a1 + 34688), KiAbDeferredProcessingWorker, 0i64);
  result = *(_QWORD *)(a1 + 34744);
  if( !result )
    *(_WORD *)(a1 + 34690) = a2 + 1280;
  return result;
}

Referenced by:

KiInitializeBootStructures