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