Я сделал это так, как предложил MSalters:
std::vector<char> rawbuf(sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA) + bufferlen);
SP_DEVICE_INTERFACE_DETAIL_DATA* pDIDD =
reinterpret_cast<SP_DEVICE_INTERFACE_DETAIL_DATA*>(&rawbuf[0]);
Редактировать:
По примеру Рэймонда Чена (как также обсуждалось в его блоге ) Я мог бы выделить структуру SP_DEVICE_INTERFACE_DETAIL_DATA
следующим образом:
PSP_DEVICE_INTERFACE_DETAIL_DATA pDIDD =
malloc(FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA,
DevicePath[bufferlen]));