VVIP
Гость
|
|
« : 19-01-2004 02:45 » |
|
Здравствуйте!
Помогите с проблемой: требуется найти USB-диск, подключенный к системе. Операционка Windows XP. Нужно примерно так же как через Мой компьютер/Упарваление/Диспетчер устройств - если выбрать в ветке DiskDrives - USB MassStorage Device, и в его свойствах на закладке "Тома" - получить информацию - узнаем, что этодиск "F:"
Пробовал: GetDriveType с перебором всех доступных (Get DeviceStrings) - не отличить от жеcтких дисков - тип возвращается DRIVE_FIXED. Не то.
Пробовал через SetupDiGetClassDevs - получается только определить наличие подключенного USB Mass Storage Device, его имя в системе вида \Device\0000072 Как от этого имени определить букву диска, подключенного к системе - Например "F:\"?
C SetupDiGetClassDevs тоже непонятки... Вот кусок кода:
Flags:=DIGCF_DEVICEINTERFACE or DIGCF_PRESENT; ClassGuid:='{4D36E967-E325-11CE-BFC1-08002BE10318}'; // Disk drives pClassGuid:=@ClassGuid; DeviceInfoSet := SetupDiGetClassDevs(pClassGuid, nil, 0, Flags); i:=0; while SetupDiEnumDeviceInfo(DeviceInfoSet, i, pDeviceInfoData) do begin if SetupDiGetDeviceRegistryProperty(DeviceInfoSet, pDeviceInfoData, SPDRP_PHYSICAL_DEVICE_OBJECT_NAME, nil, Buf, BSize, nil) then S:=Buf; Inc(i); end;
Если флаг указать DIGCF_DEVICEINTERFACE or DIGCF_PRESENT, функция SetupDiEnumDeviceInfo возвращает NO_MORE_DATA - не найдено типа таких устройств Если указать в флагах дополнительно DIGCF_ALLCLASSES или убрать DIGCF_DEVICEINTERFACE - находит устройства DiskDrives Непонятно.
В MSDN написано, что получить букву диска можно через SetupDiEnumDeviceInterfaces и SetupDiEnumDeviceInterfaceDetails, но все мои попытки вызова SetupDiEnumDeviceInterfaces для Disk Drives (хоть жестких, хоть USB, хоть CD-ROM - возвращает NO_MORE_DATA - вроде нет у них интерфейсов.
Что я неправильно делаю? Может у кого есть кусок рабочего кода?
|