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