IoDiskIoAttributionAllocate
EX_RUNDOWN_REF *__fastcall IoDiskIoAttributionAllocate(VOID *OwnerHandle, VOID *ParentIoAttributionContext){
EX_RUNDOWN_REF *result;
EX_RUNDOWN_REF *v5;
signed __int64 v6;
result = (EX_RUNDOWN_REF *)ExAllocatePoolWithTag(NonPagedPoolNx, 0xB8ui64, 0x41446F49ui64);
v5 = result;
if( result )
{
memset((INT64)result, 0i64);
v5[2].Count = -1i64;
v5[4].Count = 1i64;
do
{
v6 = _InterlockedExchangeAdd64(&IopDiskIoAttributionKey, 1ui64);
v5[3].Count = v6 + 1;
}
while( v6 == -1 );
ExInitializePushLock(v5 + 21);
if( OwnerHandle )
v5[20].Count = (unsigned __int64)OwnerHandle;
else
ExWaitForRundownProtectionRelease(v5 + 21);
if( ParentIoAttributionContext )
{
IoDiskIoAttributionReference(ParentIoAttributionContext);
v5[22].Count = (unsigned __int64)ParentIoAttributionContext;
}
return v5;
}
return result;
}Referenced by:
PspIoRateEntryActivate
PspSetJobIoAttribution