Во-первых, вам нужно получить тип диска (GetDriveTypeA). Если результат равен DRIVE_REMOVABLE, буква диска будет указывать либо на дискету съемного флэш-диска (или, возможно, другого типа съемного диска). Если результат не DRIVE_REMOVABLE, нет никаких шансов, что это съемная флешка. Тем не менее, будьте осторожны с точки зрения Window, существует небольшая разница между внешним жестким диском USB и съемным флэш-диском (я думаю, единственное отличие состоит в том, что на сменном флэш-диске нет таблицы разделов, поэтому он будет иметь только раздел - хотя я не очень уверен).
В любом случае, для типа DRIVE_REMOVABLE вам необходимо запросить дополнительные параметры устройства. Чтобы сделать это, сначала вам нужно открыть физическое устройство примерно так:
hDevice = CreateFileA("\\\\?\\X:", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL)
Если открытие успешно, вам нужно выполнить команду DeviceIoControl для этого устройства:
STORAGE_PROPERTY_QUERY Query;
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;
bResult = DeviceIoControl(
hDevice, // device handle
IOCTL_STORAGE_QUERY_PROPERTY, // info of device property
&Query, sizeof(STORAGE_PROPERTY_QUERY), // input data buffer
pDevDesc, pDevDesc->Size, // output data buffer
&dwOutBytes, // out's length
(LPOVERLAPPED)NULL
);
Если pDevDesc-> BusType == BusTypeUsb, то X: указывает на съемную флешку. Код работает, однако вам необходимо прочитать документацию для DeviceIoControl, чтобы настроить параметр pDevDesc. Если у вас есть проблемы с этим, я могу дать вам весь код.