IoRegisterPriorityCallback

__int64 __fastcall IoRegisterPriorityCallback(unsigned __int64 a1, unsigned __int64 a2){
  _EX_RUNDOWN_REF *PoolWithTag; 
  __int64 v5; 

  if( (*(_DWORD *)(a1 + 16) & 0x200) != 0 )
    return 3221227288i64;
  PoolWithTag = (_EX_RUNDOWN_REF *)ExAllocatePoolWithTag(0x200ui64, 0x28ui64, 1648586569i64);
  if( !PoolWithTag )
    return 3221225626i64;
  PoolWithTag[2].Count = (unsigned __int64)PoolWithTag;
  PoolWithTag[1].Count = (unsigned __int64)IopBoostThreadCallback;
  PoolWithTag[4].Count = a1;
  PoolWithTag[3].Count = a2;
  ExInitializePushLock(&PoolWithTag->Count);
  v5 = 0i64;
  do
  {
    if( ExCompareExchangeCallBack((_EX_CALLBACK *)&stru_140C452E0 + 2 * v5 + 256, PoolWithTag, 0i64) )
    {
      _InterlockedIncrement((_DWORD *)&stru_140CF2E80 + 1201);
      *(_DWORD *)(a1 + 16) |= 0x200u;
      return 0i64;
    }
    v5 = (unsigned int)(v5 + 1);
  }
  while( (unsigned int)v5 < 8 );
  SC_ENV::Free(PoolWithTag);
  return 3221225485i64;
}

Referenced by:

No references.