AFAIK from 2.1 as part of the move to a more format neutral implementation, the public interface to
VBoxDD.so VBoxHDD.h has been superceded by
VBoxHDD-new.h (which also documents this API). This defines new entries and API so, for example,
VDIDiskRead has been replaced by
VDRead. The main difference with the VD* routines is that they work on all supported image formats (VDI, VMDK, raw VMDK, VHD).
So my recommendation would be to switch to using the new interface.
As far as the MBR decode that you include, it is just that; it does not decode the EBS. Why not just use the code in the routine
VBoxInternalManage.cpp:
partRead as a template?
Two niggles: (i) I see you belong to the school of programming: documentation and comments are for wusses; and (ii) I am not sure why you bother to code up your own list processing routines rather than just use the standard STL ones.