DirectDrawSurface objects expose their functionality through the IDirectDrawSurface, IDirectDrawSurface2, IDirectDrawSurface3, and IDirectDrawSurface4 interfaces. Each new interface version provides the same utility as its predecessors, with additional options available through new methods.
When you create a surface by calling the IDirectDraw4::CreateSurface method (or another creation method from IDirectDraw4), you receive a pointer to the surface's IDirectDrawSurface4 interface. This behavior is different than previous versions of DirectX. Before the introduction of the IDirectDraw4 interface, the CreateSurface method provided a pointer to a surface's IDirectDrawSurface interface. If you wanted to work with a different iteration of the interface, you had to query for it. When using IDirectDraw4 this isn't the case, although you are free to query a surface for a previous iteration of an interface if you choose.