TryLockShutdownShared
CHAR __stdcall TryLockShutdownShared(){
_ETHREAD *CurrentThread;
_BYTE *v1;
_BYTE *v2;
CHAR v3;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
LODWORD(v1) = KeAbPreAcquire(&CmpShutdownLock, 0i64, 1ui64);
v2 = v1;
v3 = 0;
if( !_InterlockedCompareExchange64((volatile signed __int64 *)&CmpShutdownLock, 17i64, 0i64)
|| ExfTryAcquirePushLockShared(&CmpShutdownLock) )
{
if( v2 )
v2[26] |= 1u;
return 1;
}
else
{
if( v2 )
KeAbPostReleaseEx(&CmpShutdownLock, v2);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}
return v3;
}Referenced by:
CmpSyncNextBackupHive