RtlUpdateSwapReference
VOID __stdcall RtlUpdateSwapReference(INT64 rcx0, CHAR a2){
unsigned __int64 v4;
unsigned __int64 CompareAddress;
__int64 result[22];
memset((INT64)result, 0i64);
v4 = (unsigned __int64)_InterlockedExchange64((volatile __int64 *)rcx0, a2 & 1) >> 1;
if( v4 )
{
PoCopyDeepIdleMask(result);
KeSubtractAffinityEx(&KeActiveProcessors, (_KAFFINITY_EX *)result, (_KAFFINITY_EX *)result);
KeRemoveProcessorAffinityEx((unsigned __int16 *)result, *((_DWORD *)KeGetPcr() + 105));
KeGenericProcessorCallback(result, (void(__fastcall *)(struct _KPRCB *, __int64))xHalTimerWatchdogStop, 0i64, 0);
for( CompareAddress = v4 + _InterlockedExchangeAdd64((volatile signed __int64 *)(rcx0 + 8), v4);
CompareAddress;
CompareAddress = *(_QWORD *)(rcx0 + 8) )
{
ExBlockOnAddressPushLock((_EX_PUSH_LOCK *)(rcx0 + 16), (volatile VOID *)(rcx0 + 8), &CompareAddress, 8ui64, 0i64);
}
}
}Referenced by:
CmFcManagerStartRuntimePhase
CmFcpManagerDrainUsageNotifications
RtlpFcBufferManagerUpdateBuffers