ExpTryConvertSharedToExclusiveLite

CHAR __stdcall ExpTryConvertSharedToExclusiveLite(){
  _ETHREAD *CurrentThread; 
  CHAR v1; 
  _OWNER_ENTRY *v2; 
  UINT64 v4; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  KeAcquireInStackQueuedSpinLock(&CmpRegistryLock.SpinLock, &LockHandle);
  v1 = ExpTryUpgradeResource((INT64)&CmpRegistryLock);
  if( v1 )
  {
    LODWORD(v4) = 0;
    v2 = ExpFindCurrentThread(&CmpRegistryLock, (UINT64)CurrentThread, &LockHandle, 0i64, v4);
    if( v2 != &CmpRegistryLock.OwnerEntry )
    {
      CmpRegistryLock.OwnerEntry = *v2;
      CmpRegistryLock.OwnerEntry._bf_0 = _mm_cvtsi128_si32(_mm_srli_si128((__m128i)CmpRegistryLock.OwnerEntry, 8)) & 7 | 8;
      *v2 = 0i64;
    }
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  return v1;
}

Referenced by:

ExTryConvertSharedToExclusiveLite