KiInitializeDynamicProcessorDpc
VOID __stdcall KiInitializeDynamicProcessorDpc(
_KDPC *Dpc,
VOID *DeferredContext,
VOID *SystemArgument1,
VOID *SystemArgument2){
UINT8 v7;
unsigned __int8 CurrentIrql;
struct _KPRCB *CurrentPrcb;
_KAFFINITY_EX Affinity;
memset(Affinity.Bitmap, 0i64, sizeof(Affinity.Bitmap));
if( KeSignalCallDpcSynchronize((INT64)SystemArgument2) )
{
KiUpdateNumberProcessors(*(unsigned int *)(*(_QWORD *)DeferredContext + 36i64));
KiInitializeProcessor(*(_KPRCB **)DeferredContext);
KiConfigureProcessorBlock(*(_KPRCB **)DeferredContext, v7);
KeSetAffinityProcess(&PsInitialSystemProcess->Pcb, 0i64, &KeActiveProcessors);
*(_DWORD *)&Affinity.Count = 1310721;
memset(&Affinity.Reserved, 0i64, 0xA4u);
KeAddProcessorAffinityEx(&Affinity.Count, *(unsigned int *)(*(_QWORD *)DeferredContext + 36i64));
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xCui64);
KiIpiSendPacket(IpiAffinity, &Affinity, (INT64)KiInitDynamicProcessorIpi, 0i64, 0i64, 0i64);
CurrentPrcb = KeGetCurrentPrcb();
while( CurrentPrcb->PacketBarrier )
_mm_pause();
__writecr8(CurrentIrql);
KeRestoreMtrrBroadcast();
((void(__fastcall *)(_QWORD, __int64))off_140C006B0[0])(0i64, *(_QWORD *)DeferredContext + 36i64);
KiConfigureSchedulingInformation(*(_KPRCB **)DeferredContext, 1u);
KiReconfigureNodeSchedulingInformation(
*(_QWORD *)(*(_QWORD *)DeferredContext + 192i64),
*(_QWORD **)DeferredContext);
KiBarrierWait = 0;
*((_BYTE *)DeferredContext + 8) = 1;
}
else
{
while( !*((_BYTE *)DeferredContext + 8) )
_mm_pause();
}
KiConfigureSchedulingInformation(KeGetCurrentPrcb(), 1u);
_InterlockedDecrement((volatile signed __int32 *)SystemArgument1);
}Referenced by:
No references.