code: def directory_open(self, path, filter_p, flags):
          
          if not isinstance(path, basestring):
              raise TypeError("path can only be an instance of type basestring")
          if not isinstance(filter_p, basestring):
              raise TypeError("filter_p can only be an instance of type basestring")
          if not isinstance(flags, list):
              raise TypeError("flags can only be an instance of type list")
          for a in flags[:10]:
              if not isinstance(a, DirectoryOpenFlag):
                  raise TypeError(
                          "array can only contain objects of type DirectoryOpenFlag")
          directory = self._call("directoryOpen",
                       in_p=[path, filter_p, flags])
          directory = IGuestDirectory(directory)
          return directory
docs: Opens a directory in the guest and creates a :py:class:`IGuestDirectory` 
          object that can be used for further operations.
          
          This method follows symbolic links by default at the moment, this
          may change in the future.
  
          in path of type str
              Path to the directory to open. Guest path style.
  
          in filter_p of type str
              Optional directory listing filter to apply.  This uses the DOS/NT
              style wildcard characters '?' and '*'.
  
          in flags of type :class:`DirectoryOpenFlag`
              Zero or more :py:class:`DirectoryOpenFlag`  flags.
  
          return directory of type :class:`IGuestDirectory`
              :py:class:`IGuestDirectory`  object containing the opened directory.
  
          raises :class:`VBoxErrorObjectNotFound`
              Directory to open was not found.
          
          raises :class:`VBoxErrorIprtError`
              Error while opening the directory.
          
          raises :class:`VBoxErrorMaximumReached`
              The maximum of concurrent guest directories has been reached.