KiExecuteDpc
VOID __stdcall __noreturn KiExecuteDpc(VOID *Context){
_ETHREAD *CurrentThread;
CHAR v3;
_ETHREAD *v4;
_BYTE DpcTracker[272];
memset(&DpcTracker[4], 0i64, 0x10Cu);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
KeSetPriorityThread(&CurrentThread->Tcb, 31);
_interlockedbittestandset((volatile signed __int32 *)&CurrentThread->Tcb.116 + 1, 8u);
KiSetSystemAffinityThreadToProcessor(*((unsigned int *)Context + 9), 0i64);
*((_BYTE *)Context + 12584) = 1;
while( 1 )
{
*(_DWORD *)DpcTracker = 0;
KeWaitForGate((_KGATE *)((char *)Context + 31616), Suspended, v3);
v4 = (_ETHREAD *)KeGetCurrentThread();
--v4->Tcb.SpecialApcDisable;
do
{
*((_WORD *)Context + 6295) = 1;
if( KeSmapEnabled )
__clac();
_disable();
KiExecuteAllDpcs(
(_KPRCB *)Context,
&CurrentThread->Tcb,
(_KDPC_TRACKER_TABLE *)DpcTracker,
1ui64,
*(UINT64 *)DpcTracker);
_enable();
if( KeSmapEnabled )
__stac();
}
while( !KiTryToEndDpcProcessing((INT16 *)Context + 6295, (_KDPC_DATA *)Context + 313) );
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
}Referenced by:
No references.