SepAcquireOrderedReadLocks
VOID __fastcall SepAcquireOrderedReadLocks(_TOKEN *Token1, _TOKEN *Token2){
_ETHREAD *CurrentThread;
_TOKEN *v3;
bool v5;
BOOL v6;
_ETHREAD *v7;
struct _ERESOURCE *TokenLock;
_ETHREAD *v9;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = Token2;
--*((_WORD *)CurrentThread + 242);
v5 = Token1 < Token2;
LOBYTE(Token2) = 1;
if( v5 )
{
ExAcquireResourceSharedLite(Token1->TokenLock, (BOOL)Token2);
v7 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v7 + 242);
TokenLock = v3->TokenLock;
}
else
{
ExAcquireResourceSharedLite(v3->TokenLock, (BOOL)Token2);
v9 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v9 + 242);
TokenLock = Token1->TokenLock;
}
LOBYTE(v6) = 1;
ExAcquireResourceSharedLite(TokenLock, v6);
}Referenced by:
NtCompareTokens
SeTokenCanImpersonate
SepIsSiblingTokenByPointer