SepAcquireOrderedReadLocks

VOID __stdcall SepAcquireOrderedReadLocks(_TOKEN *Token1, _TOKEN *Token2){
  _ETHREAD *CurrentThread; 
  _ETHREAD *v5; 
  _ERESOURCE *TokenLock; 
  _ETHREAD *v7; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  if( Token1 >= Token2 )
  {
    ExAcquireResourceSharedLite((UINT64)Token2->TokenLock, 1);
    v7 = (_ETHREAD *)KeGetCurrentThread();
    --v7->Tcb.KernelApcDisable;
    TokenLock = Token1->TokenLock;
  }
  else
  {
    ExAcquireResourceSharedLite((UINT64)Token1->TokenLock, 1);
    v5 = (_ETHREAD *)KeGetCurrentThread();
    --v5->Tcb.KernelApcDisable;
    TokenLock = Token2->TokenLock;
  }
  ExAcquireResourceSharedLite((UINT64)TokenLock, 1);
}

Referenced by:

NtCompareTokens
SeTokenCanImpersonate
SepIsSiblingTokenByPointer