IopPassiveInterruptWorker

VOID __stdcall IopPassiveInterruptWorker(PVOID Context){
  UINT64 *v2; 
  char v3[8]; 
  struct _GROUP_AFFINITY Affinity; 
  struct _GROUP_AFFINITY PreviousAffinity; 
  v3[0] = 0;
  PreviousAffinity = 0i64;
  IopAcquireReleaseDispatcherLock((INT64)Context, 1);
  if( !*((_BYTE *)Context + 28) )
  {
    Affinity = *(struct _GROUP_AFFINITY *)((char *)Context + 40);
    KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
  }
  IopAcquirePassiveInterruptBlockLock((__int64)Context, (unsigned __int8 *)v3);
  while( 1 )
  {
    v2 = (UINT64 *)((char *)Context + 56);
    if( !*((_BYTE *)Context + 65) )
      break;
    *((_BYTE *)Context + 65) = 0;
    KxReleaseSpinLock(v2);
    __writecr8((unsigned __int8)v3[0]);
    KiInterruptDispatchCommon(*((_BYTE *)Context + 28) != 0, *((_DWORD *)Context + 5), 1, 0i64, 0i64);
    IopAcquirePassiveInterruptBlockLock((__int64)Context, (unsigned __int8 *)v3);
  }
  *((_BYTE *)Context + 64) = 0;
  KxReleaseSpinLock(v2);
  __writecr8((unsigned __int8)v3[0]);
  if( !*((_BYTE *)Context + 28) )
    KeRevertToUserGroupAffinityThread(&PreviousAffinity);
  IopAcquireReleaseDispatcherLock((INT64)Context, 0);
  if( !*((_DWORD *)Context + 8) )
    ((void(__fastcall *)(_QWORD, __int64))off_140C00778[0])(*((unsigned int *)Context + 6), 2i64);
  IopDereferencePassiveInterruptBlock(Context);
}

Referenced by:

No references.