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.