There shouldn't be any need to store the full BITMAPINFO, or to modify the generic dibdrv at all.
The color table is already stored in the DIB section's BITMAPOBJ, it should be possible to simply use the pointer instead of copying the full color table multiple times.