Работа с USB в C (Windows) - PullRequest
       16

Работа с USB в C (Windows)

0 голосов
/ 04 апреля 2009

Это несколько вопросов, собранных в один пост.

1) Как лучше всего определить, подключено ли запоминающее устройство USB.

2) Как лучше всего записывать данные на USB-накопитель

3) Можете ли вы обращаться с памятью на USB-накопителе так же, как с обычной памятью .. (Могу ли я использовать как malloc и / или записать непосредственно два значения со значениями / и или обнулить его?)

Ответы [ 2 ]

5 голосов
/ 04 апреля 2009

USB-диск отображается в виде буквы диска. Вы можете обнаружить, что это может быть устройство USB, использующее GetDriveType API . Однако это говорит только о том, что он съемный, а не о том, что это USB-накопитель. Чтобы сказать это, вам, возможно, придется взглянуть на функцию SetupDiGetDeviceRegistryProperty (на которую ссылается ссылка GetDriveType MSDN). Кроме того, можно подключить диски, которые не являются буквами дисков, или буквами дисков, которые не обозначают монтирование дисков, поэтому, чтобы найти все USB-накопители, вам нужно взглянуть на некоторые другие функции SetupDi ...

Поскольку это буква диска, обычным способом чтения и записи на USB-накопитель является использование функций файловой системы, таких как fopen или Windows CreateFile. Если вы хотите записать напрямую в него, как в память, вы можете создать файл, охватывающий все устройство, а затем отобразить файл в памяти. Тем не менее, я бы не рекомендовал этого делать, кроме как в специализированных приложениях, потому что, если есть ошибка ввода-вывода (в том числе, например, пользователь отключил диск), то ваша программа получит исключение SEH, и это вызывает много сложностей, лучше избегать.

0 голосов
/ 09 апреля 2009

Возможно, вы захотите взглянуть на HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR. Он говорит вам, какие USB-накопители известны. Все записи содержат ParentIdPrefix. Если диск в настоящее время присутствует, его можно найти в части данных значения HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...