code: def search(self, pattern, minAddr = None, maxAddr = None):
          
          if isinstance(pattern, str):
              return self.search_bytes(pattern, minAddr, maxAddr)
          if isinstance(pattern, compat.unicode):
              return self.search_bytes(pattern.encode("utf-16le"),
                                       minAddr, maxAddr)
          if isinstance(pattern, Pattern):
              return Search.search_process(self, pattern, minAddr, maxAddr)
          raise TypeError("Unknown pattern type: %r" % type(pattern))
docs: Search for the given pattern within the process memory.
  
          @type  pattern: str, compat.unicode or L{Pattern}
          @param pattern: Pattern to search for.
              It may be a byte string, a Unicode string, or an instance of
              L{Pattern}.
  
              The following L{Pattern} subclasses are provided by WinAppDbg:
               - L{BytePattern}
               - L{TextPattern}
               - L{RegExpPattern}
               - L{HexPattern}
  
              You can also write your own subclass of L{Pattern} for customized
              searches.
  
          @type  minAddr: int
          @param minAddr: (Optional) Start the search at this memory address.
  
          @type  maxAddr: int
          @param maxAddr: (Optional) Stop the search at this memory address.
  
          @rtype:  iterator of tuple( int, int, str )
          @return: An iterator of tuples. Each tuple contains the following:
               - The memory address where the pattern was found.
               - The size of the data that matches the pattern.
               - The data that matches the pattern.
  
          @raise WindowsError: An error occurred when querying or reading the
              process memory.