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