IoDiskIoAttributionAllocate
VOID *__stdcall IoDiskIoAttributionAllocate(VOID *OwnerHandle, VOID *ParentIoAttributionContext){
VOID *result;
_EX_RUNDOWN_REF *v5;
signed __int64 v6;
result = ExAllocatePoolWithTag(0x200ui64, 0xB8ui64, 1095003977i64);
v5 = (_EX_RUNDOWN_REF *)result;
if( result )
{
memset(result, 0i64, 0xB8u);
v5[2].Count = -1i64;
v5[4].Count = 1i64;
do
{
v6 = _InterlockedExchangeAdd64((_QWORD *)&stru_140C452E0 + 138, 1ui64);
v5[3].Count = v6 + 1;
}
while( v6 == -1 );
ExInitializePushLock(&v5[21].Count);
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