ExpReleaseFannedOutPushLockExclusive
VOID __stdcall ExpReleaseFannedOutPushLockExclusive(PVOID FannedOutPushLock){
unsigned int MaximumProcessorCount;
__int64 v3;
unsigned int v4;
unsigned __int64 v5;
__int64 v6;
unsigned int v7;
volatile INT64 *v8;
MaximumProcessorCount = KeQueryMaximumProcessorCountEx(0xFFFFu);
if( MaximumProcessorCount )
{
v3 = MaximumProcessorCount;
v4 = ((unsigned int)FannedOutPushLock >> 13) & 0x3FFFF;
v5 = ((unsigned __int64)FannedOutPushLock >> 4) & 0x1FF;
v6 = 0i64;
do
{
_BitScanReverse(&v7, v4);
v8 = (volatile INT64 *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(v6 + ExSaPageArrays) + 8i64 * (v7 - 2))
+ 8i64 * (v4 ^ (1 << v7))
+ 8)
+ 8 * v5);
if( (_InterlockedExchangeAdd64(v8, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v8);
v6 += 8i64;
--v3;
}
while( v3 );
}
}Referenced by:
ExReleaseAutoExpandPushLockExclusive