IopFindDiskIoAttribution

NTSTATUS __stdcall IopFindDiskIoAttribution(PVOID IoAttributionHandle){
  NTSTATUS v1; 
  KIRQL v2; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  int v5; 
  int v6; 
  unsigned __int64 v7; 
  PVOID KeyPtr; 
  KeyPtr = IoAttributionHandle;
  v1 = 0;
  v2 = ExAcquireSpinLockShared(&IopDiskIoAttributionLock);
  v3 = (unsigned __int64)IopDiskIoAttributionTree;
  v4 = v2;
  if( (*(_BYTE *)(&IopDiskIoAttributionTree + 1) & 1) != 0 && IopDiskIoAttributionTree )
    v3 = (unsigned __int64)&IopDiskIoAttributionTree ^ (unsigned __int64)IopDiskIoAttributionTree;
  v5 = *(_BYTE *)(&IopDiskIoAttributionTree + 1) & 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 = v3;
      if( _InterlockedIncrement64((volatile signed __int64 *)(v3 + 32)) <= 1 )
        __fastfail(0xEu);
    }
  }
  ExReleaseSpinLockSharedFromDpcLevel(&IopDiskIoAttributionLock);
  __writecr8(v4);
  return v1;
}

Referenced by:

IoRecordIoAttribution
IopAcquireReferencesFromIoAttributionHandle