KiGenericCallDpcWorker

VOID __stdcall KiGenericCallDpcWorker(_KPRCB *CurrentPrcb, VOID *DeferredContext){
  unsigned __int8 CurrentIrql; 
  unsigned int ActiveProcessorCount; 
  __int64 *v6; 
  __int64 v7; 
  _KDPC *v8; 
  unsigned int SystemArgument1; 
  UINT64 SpinCount; 
  unsigned int SystemArgument2; 
  unsigned int v12; 

  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
  SystemArgument1 = ActiveProcessorCount;
  v12 = ActiveProcessorCount;
  SystemArgument2 = ActiveProcessorCount;
  if( ActiveProcessorCount > 1 )
  {
    v6 = &qword_140CFCCC8;
    v7 = ActiveProcessorCount - 1;
    do
    {
      v8 = (_KDPC *)(*v6 + 31648);
      v8->DeferredRoutine = *(void(__fastcall **)(_KDPC *, void *, void *, void *))DeferredContext;
      v8->DeferredContext = (void *)*((_QWORD *)DeferredContext + 1);
      KiInsertQueueDpc(v8, &SystemArgument1, &SystemArgument2, 0i64, 0);
      ++v6;
      --v7;
    }
    while( v7 );
  }
  (*(void(__fastcall **)(_KDPC *, _QWORD, unsigned int *, unsigned int *))DeferredContext)(
    &CurrentPrcb->CallDpc,
    *((_QWORD *)DeferredContext + 1),
    &SystemArgument1,
    &SystemArgument2);
  LODWORD(SpinCount) = 0;
  while( SystemArgument1 )
    KeYieldProcessorEx(&SpinCount);
  __writecr8(CurrentIrql);
}

Referenced by:

No references.