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.