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.