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.