информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Возникло ещё больше вопросов. Думаю это не та статья, с... 03.07.07 07:46  Число просмотров: 3079
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Возникло ещё больше вопросов. Думаю это не та статья, с которой нужно начинать, она вроде рассчитана на продвинутых людей, имеющих опыт в программировании драйверов. Решил разбираться с DDK, открываю новую тему, по поводу: «Как компилировать в DDK?».

Прочитав некоторое число литературы, пришёл к выводу, что «просто» пообщаться с USB устройствами не получится. Если никто не докажет обратного, тему через пару дней закрою.
<programming>
[Win32] Как просто передать данные по USB? 19.06.07 14:28  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Здравствуйте, все. У меня такая проблема. Нужно обмениваться данными с USB-устройством. Есть ли простые способы для этого (например, как при работе с LPT/COM через CreateFile)?

Пока вижу только такое решение: сканировать шину PCI, потом USB и, наконец (хотя, ИМХО, это только начало...), инициализировать его и обмениваться данными.

А если учесть возможность работы под NT-подобными Виндами, то ещё и драйвер писать придётся чтобы порты открыть. Последнее меня вообще в тоску кидает, т.к. это мне пока ещё не очень по зубам.

Может кто знает способ попроще?
У Агурова в книжке "Практика программирования USB" вычитал,... 24.07.07 05:59  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
У Агурова в книжке "Практика программирования USB" вычитал, что можно создавать устройства, для которых не понадобится драйверов. Один из таких классов устройств - это CDC. Говорит, что в этом случае обмен данными будет точно такой же, как и с последовательным портом. Посмотрел программу, прилагаемую к дискете. Намёков на USB даже не обнаружил! Обычная программа для обмена данными по COM-порту. Я где-то туплю, или Агуров всех развёл?
Развел. Для USB по любому нужны драйвера 24.07.07 11:33  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> У Агурова в книжке "Практика программирования USB" вычитал,
> что можно создавать устройства, для которых не понадобится
> драйверов. Один из таких классов устройств - это CDC.

А что такое CDC?

> Говорит, что в этом случае обмен данными будет точно такой
> же, как и с последовательным портом. Посмотрел программу,
> прилагаемую к дискете. Намёков на USB даже не обнаружил!
> Обычная программа для обмена данными по COM-порту. Я где-то
> туплю, или Агуров всех развёл?

Другое дело, что есть USB класс - последовательный девайс (на нем обычно работают всякие IrDA, дата-кабели к мобилам и пр.). Вот к нему то драйвер обеспечивает доступ как к обычному COM-порту. Проблема только в том, что (насколько я помню) дрова для данного класса не bundle-ятся с WinXP всех сервис паков.
Это коммуникационные устройства и есть. 24.07.07 12:00  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Сдается мне, что начать можно вот с этой статьи 20.06.07 16:54  
Автор: Neznaika <Alex> Статус: Member
<"чистая" ссылка>
http://junglewin.narod.ru/usb.html
Neznaika, спасибо, но я пока морально не готов к разбору с... 24.06.07 16:06  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Neznaika, спасибо, но я пока морально не готов к разбору с драйверами. Вроде нашёл способ проще, правда не факт, что он работает. В нём используются GUID'ы и функции SetupDiGetInterfaceDeviceDetail, SetupDiDestroyDeviceInfoList и другие похожие, правда в MSDN'е некоторых из них нет. Кто-нибудь в этой стороне на грабли попадал? Буду, признателен, если опытом поделитесь.

PS. Несколько абзацев прочитал. Хорошая статья - на лёгком языке написана. Спасибо.
А стоило дочитать до конца, тогда вопрос бы отпал. 25.06.07 11:10  
Автор: AlexD <Alexander> Статус: Member
<"чистая" ссылка>
Возникло ещё больше вопросов. Думаю это не та статья, с... 03.07.07 07:46  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Возникло ещё больше вопросов. Думаю это не та статья, с которой нужно начинать, она вроде рассчитана на продвинутых людей, имеющих опыт в программировании драйверов. Решил разбираться с DDK, открываю новую тему, по поводу: «Как компилировать в DDK?».

Прочитав некоторое число литературы, пришёл к выводу, что «просто» пообщаться с USB устройствами не получится. Если никто не докажет обратного, тему через пару дней закрою.
А чем BuildXxxUrbRequest/IoCallDriver не просто? 03.07.07 11:08  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
А можно какую-нибудь конкретную функцию из... 03.07.07 11:46  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
А можно какую-нибудь конкретную функцию из BuildXxxUrbRequest, а то в MSDN'е много чего на слово Build начинается... И что, в этом случае без драйвера можно обойтись? Извиняюсь, если вопросы глупые.
Практически вся работа с USB-устройствами ведется через URB (USB Request Block) 03.07.07 13:05  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> А можно какую-нибудь конкретную функцию из
> BuildXxxUrbRequest, а то в MSDN'е много чего на слово Build
> начинается... И что, в этом случае без драйвера можно
> обойтись? Извиняюсь, если вопросы глупые.

Посылается URB через обычный Internal IOCTL IRP с кодом IOCTL_INTERNAL_USB_SUBMIT_URB. Один из самых широко используемых типов URB - это UrbBulkOrInterruptTransfer, его поля можно заполнить при помощи макроса UsbBuildInterruptOrBulkTransferRequest. Пример использования можно найти в том же \src\usb\bulkusb\sys\bulkrwr.c

Хотя для работы с USB надо как минимум сначала выбрать конфигурацию (UrbSelectConfiguration) и только после этого используя один из pipe handle-ов, можно посылать/принимать данные. В общем, если ты ожидал что-то типа UART-а, то придется забыть об этих мечтах.
Подключил к USB флешку, и смотрю пример bulkusb: 03.07.07 13:49  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Подключил к USB флешку, и смотрю пример bulkusb:
rwbulk -u
выдаёт: Failed to open () = 0DEV not open

rwbulk -w 5
выдаёт
Failed to GetUsbDeviceFileName

Прогонял программу в отладчике и обнаружил, что функция SetupDiEnumDeviceInterfaces возвращает ошибку 0x103 (что означает "Дополнительные данные отсутствуют"). Если просто -w, без 5, то вообще с ошибкой завершается и просит отослать отчёт Microsoft.

Может быть это всё из-за того, что я драйвер установить не смог? rwbulk его автоматически подгружает?

Пробовал следовать инструкциям Readme-файла по установке драйвера, но не получилось. Там говорится, что нужно установить драйвер для нового устройства, а как быть если я работаю с драйвером, у которого устройства нет?

Поможете корректно запустить этот пример?

PS. Трудно быть чайником...
Нет не подгружает. 03.07.07 16:02  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Может быть это всё из-за того, что я драйвер установить не
> смог? rwbulk его автоматически подгружает?

Нет не подгружает.

> Пробовал следовать инструкциям Readme-файла по установке
> драйвера, но не получилось. Там говорится, что нужно
> установить драйвер для нового устройства, а как быть если я
> работаю с драйвером, у которого устройства нет?

Я не разбирался с этим примером, но кажется мне, что драйвер надо ставить на то устройство, с которым ты собираешься работать (в твоем случае - флешку). Если будешь делать update driver, то замени vid и pid в inf файле (как написано в readme).

> Поможете корректно запустить этот пример?

Еще один вариант: создать сервис для драйвера самому
sc create bulkusb binPath= "System32\DRIVERS\bulkusb.sys" type= kernel

После этого найти Hardware Device Key нужного устройства в HKLM\System\CCS\Enum\USB\Vid_xxxx&Pid_xxxx\xxxxxx
Узнать можно в Device Manager-е. Открыть properties нужного девайса и во вкладке Details посмотреть Device Instance Id

После того, как нужный ключ найден, разрешить себе доступ на запись в этот ключ (по дефолту запись на все подключи Enum-а - только для юзера SYSTEM) и поменять значение Service с USBSTOR (скорее всего именно такой сервис будет у флешки) на bulkusb. При следующем появлении данного устройства, для него будет загружен драйвер bulkusb и ты сможешь с ним общаться.

> PS. Трудно быть чайником...
Ага :-)
Я думаю должна сработать работа с файлом USB001 или USB002 -... 20.06.07 14:47  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
Я думаю должна сработать работа с файлом USB001 или USB002 - что-то в этом роде.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach