Мне нужно получить информацию обо всех подключенных USB-накопителях. На данный момент я использую этот код для выполнения задания
HDEVINFO deviceInfoList;
deviceInfoList = SetupDiGetClassDevs(NULL, _T("USBSTOR"), NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
if (deviceInfoList != INVALID_HANDLE_VALUE)
{
SP_DEVINFO_DATA deviceInfoData;
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (DWORD i = 0; SetupDiEnumDeviceInfo(deviceInfoList, i, &deviceInfoData); i++)
{
LPTSTR buffer = NULL;
DWORD buffersize = 0;
while (!SetupDiGetDeviceInstanceId(deviceInfoList, &deviceInfoData, buffer, buffersize, &buffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if (buffer) delete buffer;
buffer = new TCHAR[buffersize];
}
else
{
_tprintf(_T("%ls\n"), _T("error"));
break;
}
}
_tprintf(_T("%ls\n"), buffer);
if (buffer) { delete buffer; buffer = NULL; }
etc...
Как видите, я создаю список устройств с помощью SetupDiGetClassDevs с перечислителем «USBSTOR», а затем перечисляю его с помощью SetupDiEnumDeviceInfo. Вопрос в том, могу ли я как-то получить путь к устройству для вызова CreateFile внутри моего перечисления? Как я вижу, вы можете получить правильный путь, используя SetupDiGetDeviceInterfaceDetail, но для этого я должен перечислить устройства, используя функцию SetupDiEnumDeviceInterfaces. Я пытался перечислить устройства таким образом, но безуспешно. Мне кажется, что когда вы перечисляете устройства с помощью SetupDiEnumDeviceInterfaces, вы должны передать GUID интерфейса устройства в SetupDiGetClassDevs, но я не могу найти конкретный интерфейс устройства для запоминающих устройств USB. Мне были прочитаны документы msdn об устройстве Информационные наборы и действительно не понимают, что такое "интерфейс устройства".
Последний вопрос: могу ли я получить путь к устройству при перечислении устройств с помощью SetupDiEnumDeviceInfo? Если нет, как я могу перечислить все подключенные запоминающие устройства USB с помощью SetupDiEnumDeviceInterfaces?