IopProcessIoTracking

VOID __stdcall IopProcessIoTracking(UINT64 ElapsedTime, UINT64 DeviceType){
  char v2; 
  _ETHREAD *CurrentThread; 
  _ETHREAD *v4; 
  __int64 v5; 
  unsigned __int8 AbEntrySummary; 
  __int64 AbOrphanedEntrySummary; 
  __int64 v8; 
  NTSTATUS SessionId; 
  bool v10; 
  __int64 **i; 
  UINT64 a3; 
  _QWORD v13[3]; 

  v13[0] = 24i64;
  v2 = 0;
  v13[1] = ElapsedTime;
  v13[2] = (unsigned int)DeviceType;
  if( KeGetCurrentIrql() < 2u )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.SpecialApcDisable;
    v2 = 1;
  }
  LODWORD(a3) = 0;
  v4 = (_ETHREAD *)KeGetCurrentThread();
  --v4->Tcb.SpecialApcDisable;
  if( ++v4->Tcb.AbAllocationRegionCount != 1 )
  {
    v5 = 0i64;
    goto LABEL_5;
  }
  AbEntrySummary = v4->Tcb.AbEntrySummary;
  if( !AbEntrySummary )
  {
    if( !v4->Tcb.AbOrphanedEntrySummary )
    {
      v5 = 0i64;
      goto LABEL_5;
    }
    AbOrphanedEntrySummary = v4->Tcb.AbOrphanedEntrySummary;
    v4->Tcb.AbOrphanedEntrySummary = 0;
    AbEntrySummary = AbOrphanedEntrySummary | v4->Tcb.AbEntrySummary;
  }
  _BitScanForward((unsigned int *)&v8, AbEntrySummary);
  v4->Tcb.AbEntrySummary = AbEntrySummary & ~(1 << v8);
  v5 = (__int64)&v4->Tcb.LockEntries[v8];
  if( !v5 )
  {
LABEL_5:
    _interlockedbittestandset((volatile signed __int32 *)&v4->Tcb.116 + 1, 0x10u);
    goto LABEL_16;
  }
  if( (unsigned __int64)&stru_140C452E0 + 1648 >= 0xFFFF800000000000ui64
    && *((_BYTE *)&stru_140C4DB30 + ((((unsigned __int64)&stru_140C452E0 + 1648) >> 39) & 0x1FF) + 6872) == 1 )
  {
    SessionId = MmGetSessionIdEx(v4->Tcb.ApcState.Process);
  }
  else
  {
    SessionId = -1;
  }
  *(_DWORD *)(v5 + 40) = SessionId;
  *(_QWORD *)(v5 + 32) = ((unsigned __int64)&stru_140C452E0 + 1648) & 0x7FFFFFFFFFFFFFFCi64;
LABEL_16:
  --v4->Tcb.AbAllocationRegionCount;
  KiAbThreadRemoveBoosts(&v4->Tcb, (char *)&stru_140C452E0 + 1648, &a3);
  v10 = v4->Tcb.SpecialApcDisable++ == -1;
  if( v10 && ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)v4->Tcb.ApcState.ApcListHead[0].Flink != &v4->Tcb.152 )
    KiCheckForKernelApcDelivery();
  if( !_InterlockedCompareExchange64((_QWORD *)&stru_140C452E0 + 206, 17i64, 0i64)
    || ExfTryAcquirePushLockShared((_EX_PUSH_LOCK *)&stru_140C452E0 + 206) )
  {
    if( v5 )
      *(_BYTE *)(v5 + 26) |= 1u;
    for( i = (__int64 **)*(&stru_140C452E0 + 210); i != (__int64 **)((char *)&stru_140C452E0 + 1680); i = (__int64 **)*i )
      ((void(__fastcall *)(_QWORD *))i[2])(v13);
    if( _InterlockedCompareExchange64((_QWORD *)&stru_140C452E0 + 206, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared((_EX_PUSH_LOCK *)&stru_140C452E0 + 206);
    KeAbPostRelease((char *)&stru_140C452E0 + 1648);
  }
  else if( v5 )
  {
    KeAbPostReleaseEx((char *)&stru_140C452E0 + 1648, (VOID *)v5);
  }
  if( v2 == 1 )
    KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}

Referenced by:

IopPerfCompleteRequest