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.