Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 21.09.2017
Сообщений: 6
1

Определить в какой физический USB разъём подключена флешка

19.11.2019, 13:09. Показов 6109. Ответов 5

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Подскажите, пожалуйста, какими методами в Windows возможно определить в каком физическом разъёме находится подключенная флешка и как это можно соотнести со структурами информации о томах на ней.
Пробовал SetupAPI и WMI, но получить смог только точку монтирования и несколько ID устройства, которые никак не изменяются, при смене разъёма.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2019, 13:09
Ответы с готовыми решениями:

какой USB и HDMI разъём подойдет для fujitsu lifebook AH531 и где можно купить?
Доброго времени суток! Сломались USB и HDMI разъёмы на ноутбуке fujitsu lifebook AH531. Решил его...

Подключена флешка или нет
Используя файловую систему или API как можно узнать подключена ли флешка к телефону или нет.. ....

Коротит разъём под наушники и USB-разъём, что делать?
Доброго времени суток. Случилась со мной такая оказия: воткнул наушники (обычные капли) в передний...

Как узнать, что флешка подключена?
Подскажите пожалуйста, можно ли такое реализовать, и если да то как. Запушен бат файл и как только...

5
Эксперт С++
3701 / 2835 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
19.11.2019, 16:47 2
Цитата Сообщение от atsarkov Посмотреть сообщение
в каком физическом разъёме находится подключенная флешка
что это значит?
номер usb порта нужно определить?
может здесь найдёте что-нибудь
Как получить номер USB-порта, на котором "сидит" подключенное устройство
https://www.sql.ru/forum/10979... ustroystvo
1
4001 / 2548 / 428
Регистрация: 09.09.2017
Сообщений: 11,296
19.11.2019, 17:24 3
USB штука динамическая, кто раньше подключился, тому и первый номер на шине достанется, то есть нумерация устройств в принципе может произвольно гулять.
Конечно, это можно обойти, привязав каждый хаб и каждый его порт по какому-нибудь уникальному идентификатору, но не уверен, что в распространенных операционных системах это будет.
Цитата Сообщение от atsarkov Посмотреть сообщение
в каком физическом разъёме находится подключенная флешка
Лучше расскажите зачем это вообще надо, какую задачу вы решаете таким странным способом.
Цитата Сообщение от atsarkov Посмотреть сообщение
в каком физическом разъёме находится подключенная флешка и как это можно соотнести со структурами информации о томах на ней.
"структуры информации и тома на ней" это таблица разделов что ли? Если так, то они не связаны абсолютно никак.
.
С ходу придумывается только две задачи, где бы такое могло пригодиться: монтирование конкретного раздела в конкретную точку файловой системы (но это решается монтированием по UUID, и уж точно не по номеру порта). Либо примитивная защита вроде авторизации юзера, только когда он воткнет нужную флешку в нужный порт, но очень сомневаюсь что угадывание порта хоть немного повысит безопасность.
0
0 / 0 / 0
Регистрация: 21.09.2017
Сообщений: 6
19.11.2019, 18:07  [ТС] 4
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Лучше расскажите зачем это вообще надо, какую задачу вы решаете таким странным способом.
Таким способом решаю задачу определения сообщения юзеру какую из подключенных флешек необходимо извлечь после записи данных, которая происходит параллельно на несколько устройств и на каждый записывается различная информация.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
"структуры информации и тома на ней" это таблица разделов что ли? Если так, то они не связаны абсолютно никак.
Вы почти угадали, требуется соответствие флешки и логических дисков системы, чтобы правильно определить на какой логический диск записывать данные.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
USB штука динамическая, кто раньше подключился, тому и первый номер на шине достанется, то есть нумерация устройств в принципе может произвольно гулять.
Получается для Windows невозможно однозначно идентифицировать USB порт?
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
19.11.2019, 21:57 5
Цитата Сообщение от atsarkov Посмотреть сообщение
Подскажите, пожалуйста, какими методами в Windows возможно определить в каком физическом разъёме находится подключенная флешка и как это можно соотнести со структурами информации о томах на ней.
Пробовал SetupAPI и WMI, но получить смог только точку монтирования и несколько ID устройства, которые никак не изменяются, при смене разъёма.
WMI: Win32_DiskDrive.PNPDeviceID -> Win32_USBControllerDevice, CIM_LogicalDevice
Кликните здесь для просмотра всего текста

instance of Win32_DiskDrive
{
BytesPerSector = 512;
Capabilities = {3, 4, 7};
CapabilityDescriptions = {"Random Access", "Supports Writing", "Supports Removable Media"};
Caption = "Kingston DataTraveler 2.0 USB Device";
ConfigManagerErrorCode = 0;
ConfigManagerUserConfig = FALSE;
CreationClassName = "Win32_DiskDrive";
Description = "Дисковый накопитель";
DeviceID = "\\\\.\\PHYSICALDRIVE2";
FirmwareRevision = "PMAP";
Index = 2;
InterfaceType = "USB";
Manufacturer = "(Стандартные дисковые накопители)";
MediaLoaded = TRUE;
MediaType = "Removable Media";
Model = "Kingston DataTraveler 2.0 USB Device";
Name = "\\\\.\\PHYSICALDRIVE2";
Partitions = 1;
PNPDeviceID = "USBSTOR\\DISK&VEN_KINGSTON&PROD_DATATRAVELER_2.0&REV_PMAP\\001A928EED05ED602949 009F&0";
SCSIBus = 0;
SCSILogicalUnit = 0;
SCSIPort = 0;
SCSITargetId = 0;
SectorsPerTrack = 63;
SerialNumber = "0E0D16A09229";
Signature = 3585464809;
Size = "15603356160";
Status = "OK";
SystemCreationClassName = "Win32_ComputerSystem";
SystemName = "OLEG-M";
TotalCylinders = "1897";
TotalHeads = 255;
TotalSectors = "30475305";
TotalTracks = "483735";
TracksPerCylinder = 255;
};


instance of Win32_USBControllerDevice
{
Antecedent = "\\\\OLEG-M\\root\\cimv2:Win32_USBController.DeviceID="PCI\\\\VEN_8086&DEV_8C31&SUBSYS_10E E1462&REV_05\\\\3&11583659&0&A0"";
Dependent = "\\\\OLEG-M\\root\\cimv2:Win32_PnPEntity.DeviceID="USBSTOR\\\\DISK&VEN_KINGSTON&PROD_DATAT RAVELER_2.0&REV_PMAP\\\\001A928EED05ED602949009F&0"";
};


Добавлено через 11 минут
Цитата Сообщение от atsarkov Посмотреть сообщение
Получается для Windows невозможно однозначно идентифицировать USB порт?
А как их вообще идентифицировать, маркером подписывать? А если внешний хаб? Win32_USBController и есть идентификатор
0
4001 / 2548 / 428
Регистрация: 09.09.2017
Сообщений: 11,296
20.11.2019, 10:34 6
Цитата Сообщение от atsarkov Посмотреть сообщение
Вы почти угадали, требуется соответствие флешки и логических дисков системы, чтобы правильно определить на какой логический диск записывать данные.
Для этого есть уникальные UUID разделов или в крайнем случае метки, хотя метки реже бывают уникальными и не всегда срабатывают.
Цитата Сообщение от atsarkov Посмотреть сообщение
Таким способом решаю задачу определения сообщения юзеру какую из подключенных флешек необходимо извлечь после записи данных, которая происходит параллельно на несколько устройств и на каждый записывается различная информация.
А вот тут лучше меток вряд ли что можно придумать. Просто при форматировании флешки даете ей осмысленное название вместо дефолтного, а уж в назначении флешек юзер авось не запутается. Да хоть по цвету и форме назовите. Плюс в том, что это будет работать на любой системе без всяких усилий с вашей стороны.
Цитата Сообщение от atsarkov Посмотреть сообщение
Получается для Windows невозможно однозначно идентифицировать USB порт?
Не знаю. Как-то через хитрое место может и можно, если пропинать все хабы и выяснить цепочку портов. Но сама адресация USB как одномерной "шины" этому мешает.
0
20.11.2019, 10:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2019, 10:34
Помогаю со студенческими работами здесь

Как определить какой у меня разъем на метеринке AGP или PCI?
Как определить какой у меня разъем на метеринке AGP или PCI? Добавлено через 33 минуты У меня в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru