The heart of an object relational mapper is the mapping information that glues everything together. It instructs the EntityManager how it should behave when dealing with the different entities.
Something important to note about the above drivers is they are all an intermediate step to the same end result. The mapping information is populated to Doctrine\ORM\Mapping\ClassMetadata instances. So in the end, Doctrine only ever has to work with the API of the ClassMetadata class to get mapping information for an entity.
When using the AbstractFileDriver it requires that you only have one entity defined per file and the file named after the class described inside where namespace separators are replaced by periods. So if you have an entity named Entities\User and you wanted to write a mapping file for your driver above you would need to name the file Entities.User.dcm.ext for it to be recognized.
The last piece you need to know and understand about metadata in Doctrine 2 is the API of the ClassMetadata classes. You need to be familiar with them in order to implement your own drivers but more importantly to retrieve mapping information for a certain entity when needed.
You have all the methods you need to manually specify the mapping information instead of using some mapping file to populate it from. The ClassMetadata class is responsible for only data storage and is not meant for runtime use. It does not require that the class actually exists yet so it is useful for describing some entity before it exists and using that information to generate for example the entities themselves.