Я пытаюсь обнаружить вставку съемных устройств и получить букву диска указанного устройства с помощью службы NT.Я успешно обнаружил вставку и удаление устройств, но не смог настроить структуру DEV_BROADCAST_VOLUME
, которая позволила бы мне получить букву диска, GUID и т. Д. ... с тома.
case SERVICE_CONTROL_DEVICEEVENT:{
switch(evtype){
case DBT_DEVICEARRIVAL:{
DEV_BROADCAST_VOLUME *hdr = (DEV_BROADCAST_VOLUME*) evdata;
ofstream log ("C:\\log.txt", ios::app);
log << hdr->dbcv_devicetype;
log.close();
}
break;
Приведенный выше фрагмент кода компилируется и работает правильно, но когда я вставляю флэш-диск, hdr->dbcv_devicetype
записывает в журнал значения 55555
и DBT_DEVTYP_VOLUME
(то есть, что такое USB-накопитель)определяется как 2
(hdr->dbcv_devicetype
должно равняться DBT_DEVTYP_VOLUME
, потому что я вставил флешку).По какой-то причине или DBT_DEVTYP_VOLUME
не инициализируется правильно, или что-то еще, что я делаю, неправильно.Я использую Windows 7 с Visual Studio 2011 C ++.