WheapCallInUsePageNotificationCallbacks
INT64 __fastcall WheapCallInUsePageNotificationCallbacks(INT64 a1, CHAR a2, CHAR a3){
_BYTE *v7;
__int64 v8;
__int64 v9;
_BYTE *v10;
PVOID *i;
if( WheapInUsePageOfflineNotifyInit != 1 )
return 3221225473i64;
LODWORD(v7) = KeAbPreAcquire(&WheapInUsePageOfflineNotifyLock, 0i64, 0i64);
v10 = v7;
if( _interlockedbittestandset64((volatile signed __int32 *)&WheapInUsePageOfflineNotifyLock, 0i64) )
ExfAcquirePushLockExclusiveEx(&WheapInUsePageOfflineNotifyLock, v7, &WheapInUsePageOfflineNotifyLock);
if( v10 )
v10[26] |= 1u;
for( i = (PVOID *)WheapInUsePageOfflineNotifyList; i != &WheapInUsePageOfflineNotifyList; i = (PVOID *)*i )
{
LOBYTE(v9) = a3;
LOBYTE(v8) = a2;
((void(__fastcall *)(INT64, __int64, __int64, PVOID))i[2])(a1, v8, v9, i[3]);
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&WheapInUsePageOfflineNotifyLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&WheapInUsePageOfflineNotifyLock);
KeAbPostRelease(&WheapInUsePageOfflineNotifyLock);
return 0i64;
}Referenced by:
WheapAttemptPhysicalPageOffline