ExpTryToAcquireResourceExclusiveLite
INT8 __stdcall ExpTryToAcquireResourceExclusiveLite(PVOID LockAddress){
unsigned int v2;
_ETHREAD *CurrentThread;
unsigned int v4;
int v5;
unsigned int v6;
CHAR v7;
int v8;
unsigned int v9;
_KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
v2 = 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v4 = 0;
v5 = *(&PerfGlobalGroupMask + 1) & 0x20000;
v6 = 65537;
__incgsdword(0x86E0u);
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)LockAddress + 12, &LockHandle);
v7 = ExpTryAcquireResourceExclusive((INT64)LockAddress);
if( v7 )
{
v8 = *((_DWORD *)LockAddress + 14) & 7;
*((_QWORD *)LockAddress + 6) = CurrentThread;
*((_DWORD *)LockAddress + 14) = v8 | 8;
if( v5 )
{
v2 = 1;
v6 = 65569;
v4 = *((_DWORD *)LockAddress + 17);
}
}
else if( *((char *)LockAddress + 26) < 0 && *((_ETHREAD **)LockAddress + 6) == CurrentThread )
{
v9 = *((_DWORD *)LockAddress + 14) + 8;
*((_DWORD *)LockAddress + 14) = v9;
if( v5 )
{
v4 = *((_DWORD *)LockAddress + 17);
v2 = v9 >> 3;
v6 = 65585;
}
v7 = 1;
}
else
{
v7 = 0;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
if( v7 )
{
__incgsdword(0x86E4u);
__incgsdword(0x8664u);
}
if( v5 )
PerfLogExecutiveResourceAcquire(v6, LockAddress, v2, v4);
return v7;
}Referenced by:
ExTryToAcquireResourceExclusiveLite