RtlpFindDynamicEHContinuationTarget
BOOL __stdcall RtlpFindDynamicEHContinuationTarget(UINT64 a1){
_EPROCESS *Process;
_ETHREAD *CurrentThread;
_EX_PUSH_LOCK *p_DynamicEHContinuationTargetsLock;
_RTL_BALANCED_NODE *Root;
NTSTATUS v6;
Process = KeGetCurrentThread()->ApcState.Process;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
p_DynamicEHContinuationTargetsLock = &Process->DynamicEHContinuationTargetsLock;
ExAcquirePushLockSharedEx(&Process->DynamicEHContinuationTargetsLock, 0i64);
Root = Process->DynamicEHContinuationTargetsTree.Root;
while( Root )
{
v6 = MiHotPatchImageTreeCompare(a1, (INT64)Root);
if( v6 >= 0 )
{
if( v6 <= 0 )
break;
Root = Root->Children[1];
}
else
{
Root = Root->Children[0];
}
}
if( _InterlockedCompareExchange64(&p_DynamicEHContinuationTargetsLock->_bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(p_DynamicEHContinuationTargetsLock);
KeAbPostRelease(p_DynamicEHContinuationTargetsLock);
KeLeaveCriticalRegion();
return Root != 0i64;
}Referenced by:
RtlVerifyUserUnwindTarget