### IDirectDraw2::EnumSurfaces

The IDirectDraw2::EnumSurfaces method enumerates all of the existing or possible surfaces that meet the search criterion specified.

HRESULT EnumSurfaces(

DWORD dwFlags,

LPDDSURFACEDESC lpDDSD,

LPVOID lpContext,

LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback

);

##### Parameters

dwFlags
  One of the following flags:

  DDENUMSURFACES_ALL
  | Enumerates all of the surfaces that meet the search criterion.
  DDENUMSURFACES_CANBECREATED
  | Enumerates the first surface that can be created and meets the search criterion.
  DDENUMSURFACES_DOESEXIST
  | Enumerates the already existing surfaces that meet the search criterion.
  DDENUMSURFACES_MATCH
  | Searches for any surface that matches the surface description.
  DDENUMSURFACES_NOMATCH
  | Searches for any surface that does not match the surface description.

lpDDSD
  Address of a DDSURFACEDESC structure that defines the surface of interest.
lpContext
  Address of an application-defined structure that will be passed to each enumeration member.
lpEnumSurfacesCallback
  Address of the EnumSurfacesCallback function the enumeration procedure will call every time a match is found.

##### Return Values

If the method succeeds, the return value is DD_OK.

If the method fails, the return value may be one of the following error values:

DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS

##### Remarks

If the DDENUMSURFACES_CANBECREATED flag is set, this method attempts to temporarily create a surface that meets the criterion. Note that as a surface is enumerated, its reference count is increasedžif you are not going to use the surface, use IDirectDraw::Release to release the surface after each enumeration.

As part of the IDirectDraw interface, this method did not support any values other than zero for the dwFlags parameter.