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