KeFlushQueuedDpcs
VOID __stdcall KeFlushQueuedDpcs(){
int v0;
UINT64 ProcIndex;
_KAFFINITY_ENUMERATION_CONTEXT Context;
_KAFFINITY_EX DeepIdleMask;
_KAFFINITY_EX NonDeepIdleMask;
memset(&DeepIdleMask, 0i64, sizeof(DeepIdleMask));
*(_DWORD *)(&Context.CurrentIndex + 1) = 0;
*(&Context.CurrentIndex + 3) = 0;
LODWORD(ProcIndex) = 0;
memset(&NonDeepIdleMask, 0i64, sizeof(NonDeepIdleMask));
KiGetDeepIdleProcessors(&DeepIdleMask, &NonDeepIdleMask);
Context.CurrentMask = DeepIdleMask.Bitmap[0];
Context.Affinity = &DeepIdleMask;
Context.CurrentIndex = 0;
while( 1 )
{
KeEnumerateNextProcessor(&ProcIndex, &Context);
if( v0 )
break;
if( (*(&KiProcessorBlock + (unsigned int)ProcIndex))->$A81AFC2514E605CDBADB8E27B49DE82B::_bf_0 )
KeAddProcessorAffinityEx(&NonDeepIdleMask.Count, (unsigned int)ProcIndex);
}
KeGenericProcessorCallback(
(__int64 *)&NonDeepIdleMask,
(void(__fastcall *)(struct _KPRCB *, __int64))KiFlushQueuedDpcsWorker,
0i64,
2);
}Referenced by:
CcDeletePartition
ExpPartitionDestroy
ExpTimeZoneCleanupSiloState
IopDeleteDriver
KeCleanupThreadState
MmPageEntireDriver