Ну если еще точнее "пародировать" плюсы то можно написать так:
<c>
typedef struct
{
void (*pStart)(void);
void (*pSeek)(DWORD dwPos);
BYTE (*pReadByte)(void);
void (*pWriteByte)(BYTE bData);
void (*pStop)(void);
void (*pDestructor)(ptr this);
}DrvVTable;
typedef struct{
BYTE bTag; //
DWORD dwSize; // Размер устройства
BYTE bPageSize;// Размер страницы
DWORD dwOffset; // Смещение, актуально при использовании
// кодовой памяти(FLASH) для хранилища
ptr *pMemPageBuff; // буфер в RAM для записи во FLASH
DrvVTable *pFuncs;
}t_Drv;
</c>
Зачем делать конструктор "виртуальным"? ф-ия open() должна инициализировать объект. Поскольку она знает тип объекта, она вызовет соответствующий конструктор.