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