KiInitializePrcbContext

NTSTATUS __stdcall KiInitializePrcbContext(_KPRCB *Prcb, UINT64 NodeNumber){
  UINT64 v2; 
  UINT64 v3; 
  ULONG_PTR v5; 
  UINT64 v6; 
  INT64 v7; 
  INT64 v8; 
  int v9; 
  _DWORD *v10; 
  int v11; 
  v5 = KeFeatureBits & 0x800000;
  if( (KeFeatureBits & 0x800000) != 0 )
    v6 = (unsigned int)(KeXStateLength + KiXSaveAreaLength + 885);
  else
    v6 = 0i64;
  if( (_DWORD)v6 )
  {
    MmAllocateIndependentPages(v6, NodeNumber, v2, v3);
    v8 = v7;
    if( !v7 )
      return -1073741670;
    memset(v7, 0i64);
    *((_QWORD *)Prcb + 4282) = (v8 + 63) & 0xFFFFFFFFFFFFFFC0ui64;
  }
  if( v5 )
  {
    v9 = KeXStateLength - 512;
    v10 = (_DWORD *)((*((_QWORD *)Prcb + 4282) + (unsigned int)KiXSaveAreaLength + 15i64) & 0xFFFFFFFFFFFFFFF0ui64);
    v10[313] = KeXStateLength - 512;
    v10[310] = -1232;
    v10[311] = 1232;
    v10[312] = (((_DWORD)v10 + 1319) & 0xFFFFFFC0) - ((_DWORD)v10 + 1232);
    v10[308] = -1232;
    v10[309] = (((_DWORD)v10 + 1319) & 0xFFFFFFC0) - (_DWORD)v10 + v9;
    *((_QWORD *)Prcb + 4280) = v10;
  }
  *((_DWORD *)Prcb + 8562) = 1048587;
  if( v5 )
  {
    v11 = *((_DWORD *)Prcb + 8562);
    if( !*((_DWORD *)Prcb + 9) )
      v11 = 1048651;
    *((_DWORD *)Prcb + 8562) = v11;
  }
  return 0;
}

Referenced by:

KeStartAllProcessors
KiStartDynamicProcessor