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