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