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