MiCheckAndUpdateIoAttribution

VOID __fastcall MiCheckAndUpdateIoAttribution(INT64 a1){
  _ETHREAD *CurrentThread; 
  __int64 v2; 
  __int64 v3; 
  unsigned __int64 v4; 
  PVOID v5; 
  KIRQL v6; 
  __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  __int64 v10; 
  PVOID OpaqueContext; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v2 = *(_QWORD *)(a1 + 16);
  OpaqueContext = 0i64;
  if( qword_140C4DC80 && (v2 & 0x10) == 0 )
    v2 &= ~qword_140C4DC80;
  v3 = *(_QWORD *)(v2 >> 16);
  if( (*(_DWORD *)(v3 + 56) & 0x20) == 0 && IoReferenceIoAttributionFromThread(CurrentThread, &OpaqueContext) >= 0 )
  {
    v4 = (unsigned __int64)OpaqueContext;
    if( OpaqueContext == (PVOID)(8i64 * *(_QWORD *)(v3 + 120)) )
    {
      v5 = OpaqueContext;
    }
    else
    {
      v6 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v3 + 72));
      v7 = *(_QWORD *)(v3 + 120);
      v8 = v6;
      v9 = v7 & 0xE000000000000000ui64;
      v10 = 8 * v7;
      *(_QWORD *)(v3 + 120) = (v4 >> 3) | v9;
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
      __writecr8(v8);
      if( !v10 )
        return;
      v5 = (PVOID)v10;
    }
    IoDiskIoAttributionDereference(v5);
  }
}

Referenced by:

MiCompleteProtoPteFault
MiValidFault