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