RtlpFindMessageInTable

INT64 __fastcall RtlpFindMessageInTable(INT64 *a1, INT64 a2, UINT64 a3, UINT16 **a4){
  __int64 v4; 
  int v5; 
  _DWORD *v6; 
  UINT16 *v7; 
  UINT16 *v8; 
  int v9; 
  v4 = (unsigned int)(a2 - 1);
  v5 = *(_DWORD *)a1;
  v6 = (_DWORD *)a1 + 1;
  v7 = (UINT16 *)((char *)a1 + v4);
  while( v5 )
  {
    --v5;
    if( (unsigned int)a3 >= *v6 && (unsigned int)a3 <= v6[1] )
    {
      v8 = (UINT16 *)((char *)a1 + (unsigned int)v6[2]);
      v9 = a3 - *v6;
      if( !v9 )
      {
LABEL_9:
        *a4 = v8;
        return 0i64;
      }
      while( 1 )
      {
        --v9;
        v8 = (UINT16 *)((char *)v8 + *v8);
        if( v8 > v7 )
          return 3221225737i64;
        if( !v9 )
          goto LABEL_9;
      }
    }
    v6 += 3;
  }
  return 3221225737i64;
}

Referenced by:

RtlFindMessage