| 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 - вроде нет у них интерфейсов.
 
 Что я неправильно делаю? Может у кого есть кусок рабочего кода?
 |