KiInterruptSubDispatchNoLock

VOID __fastcall KiInterruptSubDispatchNoLock(){
  __int64 v0; 
  INT64 v1; 
  unsigned __int8 CurrentIrql; 
  struct _KPRCB *CurrentPrcb; 
  unsigned __int64 v4; 
  int v5; 
  _DWORD *v6; 
  __int64 v7; 
  UINT64 v8; 
  __int64 v9; 
  UINT64 v10; 
  int v11; 
  bool v12; 
  UINT8 v13; 
  INT64 v14; 
  LARGE_INTEGER v15[5]; 
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(*(unsigned __int8 *)(v1 + 93));
  *(_BYTE *)(v0 - 87) = CurrentIrql;
  *(_DWORD *)(v0 - 96) = 0;
  CurrentPrcb = KeGetCurrentPrcb();
  if( ++*((_BYTE *)CurrentPrcb + 32) == 1 )
  {
    v4 = __rdtsc();
    v5 = *((_DWORD *)CurrentPrcb + 8568);
    v6 = (_DWORD *)((char *)CurrentPrcb + 4 * ((unsigned __int16)(v5 & 0x7FF) >> 5) + 34276);
    *v6 = v4 ^ __ROR4__(*v6, 5);
    *((_DWORD *)CurrentPrcb + 8568) = ++v5;
    if( (v5 & 0x3FF) == 0 )
      *(_DWORD *)(v0 - 96) = 1;
    v7 = *((_QWORD *)CurrentPrcb + 1);
    v8 = v4 - *((_QWORD *)CurrentPrcb + 4056);
    *(_QWORD *)(v7 + 72) += v8;
    v9 = *(unsigned int *)(v7 + 80);
    *((_QWORD *)CurrentPrcb + 4056) += v8;
    v10 = v8 + v9;
    v11 = v10;
    if( HIDWORD(v10) )
      v11 = -1;
    *(_DWORD *)(v7 + 80) = v11;
    if( (*(_BYTE *)(v7 + 2) & 0x3E) != 0 )
      KiEndThreadAccountingPeriod(KeGetCurrentPrcb(), (_KTHREAD *)v7, v8);
  }
  _enable();
  if( *(_DWORD *)(v0 - 96) )
    KiEntropyQueueDpc((__int64)KeGetCurrentPrcb());
  *(_QWORD *)(v1 + 136) = v0 - 128;
  v12 = (PerfGlobalGroupMask & 0x400000000000i64) == 0;
  *(_BYTE *)(v0 + 243) = (PerfGlobalGroupMask & 0x400000000000i64) != 0;
  if( !v12 )
    EtwGetKernelTraceTimestamp(v15, 0x20004000ui64);
  v13 = KiCallInterruptServiceRoutine((_KINTERRUPT *)v1, 0);
  if( *(_BYTE *)(v0 + 243) )
  {
    v14 = v13;
    BYTE1(v14) = *(_BYTE *)(v1 + 88);
    PerfInfoLogInterrupt(v1, v14, (INT64)v15);
  }
  _disable();
}

Referenced by:

No references.