ExTryAcquirePushLockSharedEx
char __fastcall ExTryAcquirePushLockSharedEx(ULONG_PTR BugCheckParameter2, ULONG_PTR BugCheckParameter1){
__int64 v2;
_ETHREAD *CurrentThread;
__int64 v5;
char v6;
int SessionId;
bool v8;
char v10;
unsigned int v11;
v2 = 0i64;
if( (BugCheckParameter1 & 0xFFFFFFFC) != 0 )
KeBugCheckEx(0x152u, (unsigned int)BugCheckParameter1, BugCheckParameter2, 0i64, 0i64);
if( (BugCheckParameter1 & 2) == 0 )
{
v11 = 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 243);
if( ++*((_BYTE *)CurrentThread + 794) != 1 )
goto LABEL_11;
LOBYTE(v5) = *((_BYTE *)CurrentThread + 792);
if( !(_BYTE)v5 )
{
if( !*((_BYTE *)CurrentThread + 870) )
{
LABEL_6:
if( v2 )
{
if( BugCheckParameter2 >= 0xFFFF800000000000ui64
&& *((_BYTE *)&antNameB + ((BugCheckParameter2 >> 39) & 0x1FF) - 256) == 1 )
{
SessionId = MmGetSessionIdEx(*((_QWORD *)CurrentThread + 23));
}
else
{
SessionId = -1;
}
*(_DWORD *)(v2 + 40) = SessionId;
*(_QWORD *)(v2 + 32) = BugCheckParameter2 & 0x7FFFFFFFFFFFFFFCi64;
LABEL_12:
--*((_BYTE *)CurrentThread + 794);
KiAbThreadRemoveBoosts((ULONG_PTR)CurrentThread, BugCheckParameter2, &v11);
v8 = (*((_WORD *)CurrentThread + 243))++ == 0xFFFF;
if( v8 && *((_ETHREAD **)CurrentThread + 19) != (_ETHREAD *)((char *)CurrentThread + 152) )
KiCheckForKernelApcDelivery();
goto LABEL_15;
}
LABEL_11:
_interlockedbittestandset((volatile signed __int32 *)CurrentThread + 30, 0x10u);
goto LABEL_12;
}
v10 = *((_BYTE *)CurrentThread + 870);
*((_BYTE *)CurrentThread + 870) = 0;
LOBYTE(v5) = *((_BYTE *)CurrentThread + 792) | v10;
}
v6 = v5;
_BitScanForward((unsigned int *)&v5, (unsigned __int8)v5);
*((_BYTE *)CurrentThread + 792) = v6 & ~(1 << v5);
v2 = *((_QWORD *)CurrentThread + 100) + 96 * v5;
goto LABEL_6;
}
LABEL_15:
if( !_InterlockedCompareExchange64((volatile signed __int64 *)BugCheckParameter2, 17i64, 0i64)
|| ExfTryAcquirePushLockShared((UINT64 *)BugCheckParameter2) )
{
if( v2 )
*(_BYTE *)(v2 + 26) |= 1u;
return 1;
}
else
{
if( v2 )
KeAbPostReleaseEx((PVOID)BugCheckParameter2, (PVOID)v2);
return 0;
}
}Referenced by:
No references.