KiInitializeDynamicProcessorDpc
VOID __stdcall KiInitializeDynamicProcessorDpc(
KDPC *Dpc,
PVOID DeferredContext,
PVOID SystemArgument1,
PVOID SystemArgument2){
UINT8 v7;
unsigned __int8 CurrentIrql;
struct _KPRCB *CurrentPrcb;
UINT16 v10[2];
INT64 result[21];
memset((INT64)result + 4, 0i64);
if( (unsigned int)KeSignalCallDpcSynchronize(SystemArgument2) )
{
KiUpdateNumberProcessors(*(unsigned int *)(*(_QWORD *)DeferredContext + 36i64));
KiInitializeProcessor(*(_KPRCB **)DeferredContext);
KiConfigureProcessorBlock(*(_KPRCB **)DeferredContext, v7);
KeSetAffinityProcess((__int64)PsInitialSystemProcess, 0, &KeActiveProcessors.Count);
*(_DWORD *)v10 = 1310721;
memset((INT64)result, 0i64);
KeAddProcessorAffinityEx(v10, *(_DWORD *)(*(_QWORD *)DeferredContext + 36i64));
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xCui64);
KiIpiSendPacket(0i64, v10, (INT64)KiInitDynamicProcessorIpi, 0i64, 0i64, 0i64);
CurrentPrcb = KeGetCurrentPrcb();
while( *((_DWORD *)CurrentPrcb + 2912) )
_mm_pause();
__writecr8(CurrentIrql);
KeRestoreMtrrBroadcast();
((void(__fastcall *)(_QWORD, __int64))off_140C006B0[0])(0i64, *(_QWORD *)DeferredContext + 36i64);
KiConfigureSchedulingInformation(*(VOID ***)DeferredContext);
KiReconfigureNodeSchedulingInformation(
*(_QWORD *)(*(_QWORD *)DeferredContext + 192i64),
*(_QWORD **)DeferredContext);
*(_DWORD *)KiBarrierWait = 0;
*((_BYTE *)DeferredContext + 8) = 1;
}
else
{
while( !*((_BYTE *)DeferredContext + 8) )
_mm_pause();
}
KiConfigureSchedulingInformation((VOID **)KeGetCurrentPrcb());
_InterlockedDecrement((volatile signed __int32 *)SystemArgument1);
}Referenced by:
No references.