PoRegisterCoalescingCallback
INT64 __fastcall PoRegisterCoalescingCallback(INT64 a1, CHAR a2, _QWORD *a3, INT64 a4){
EX_RUNDOWN_REF *PoolWithTag;
EX_RUNDOWN_REF *v9;
void **v10;
EX_RUNDOWN_REF *v11;
INT64 result;
PoolWithTag = (EX_RUNDOWN_REF *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x48ui64, 0x62436F50ui64);
v9 = PoolWithTag;
if( !PoolWithTag )
return 3221225626i64;
memset((INT64)PoolWithTag, 0i64);
v9[2].Count = (unsigned __int64)v9;
v9[1].Count = (unsigned __int64)PopCoalescingCallback;
v9[5].Count = a4;
v9[3].Count = a1;
LOBYTE(v9[4].Count) = a2 != 0;
ExInitializePushLock(v9);
if( !ExCompareExchangeCallBack((INT64 *)&v9[8], v9, 0i64) )
return 3221225485i64;
PopAcquireRwLockExclusive((_POP_RW_LOCK *)&PopCoalRegistrationListLock);
v10 = off_140C046D8;
v11 = v9 + 6;
if( *off_140C046D8 != &PopCoalRegistrationList )
__fastfail(3u);
v9[7].Count = (unsigned __int64)off_140C046D8;
v11->Count = (unsigned __int64)&PopCoalRegistrationList;
*v10 = v11;
off_140C046D8 = (void **)&v9[6];
PopReleaseRwLock((UINT64)&PopCoalRegistrationListLock);
result = 0i64;
*a3 = v9;
return result;
}Referenced by:
CcInitializeCacheManager
CmpCmdInit
PopCoalescingInitialize