IopFindDiskIoAttribution

VOID *__stdcall IopFindDiskIoAttribution(VOID *IoAttributionHandle){
  VOID *v1; 
  unsigned __int8 v2; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  int v5; 
  NTSTATUS v6; 
  unsigned __int64 v7; 
  VOID *KeyPtr; 

  KeyPtr = IoAttributionHandle;
  v1 = 0i64;
  v2 = ExAcquireSpinLockShared((INT64 *)&stru_140C452E0 + 139);
  v3 = *(&stru_140C452E0 + 214);
  v4 = v2;
  if( (*(&stru_140C452E0 + 1720) & 1) != 0 && *(&stru_140C452E0 + 214) )
    v3 = ((unsigned __int64)&stru_140C452E0 + 1712) ^ *(&stru_140C452E0 + 214);
  v5 = *(&stru_140C452E0 + 1720) & 1;
  if( v3 )
  {
    do
    {
      v6 = IopDiskIoAttributionTreeCompare(&KeyPtr, (_RTL_BALANCED_NODE *)v3);
      if( v6 >= 0 )
      {
        if( v6 <= 0 )
          break;
        v7 = *(_QWORD *)(v3 + 8);
      }
      else
      {
        v7 = *(_QWORD *)v3;
      }
      if( v5 && v7 )
        v3 ^= v7;
      else
        v3 = v7;
    }
    while( v3 );
    if( v3 )
    {
      v1 = (VOID *)v3;
      if( _InterlockedIncrement64((volatile signed __int64 *)(v3 + 32)) <= 1 )
        __fastfail(0xEu);
    }
  }
  ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&stru_140C452E0 + 278);
  __writecr8(v4);
  return v1;
}

Referenced by:

IoRecordIoAttribution
IopAcquireReferencesFromIoAttributionHandle