Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Можно на уровне приложения получить PipeHandle  (Прочитано 6373 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Yarilo
Гость
« : 25-09-2003 12:31 » 

Добрый день!

Согласно DDK PipeHandle может узнать только клиентский драйвер, сформировав запрос URB_FUNCTION_SELECT_CONFIGURATION или URB_FUNCTION_SELECT_INTERFACE. А из приложения можно узнать описатель pipe-а? Н-р через CreateFile? Просмотрел все структуры, использующиеся в примере usbview и ничего хорошо там не нашел. Может кто знает как это реализовать?

Thanks in advance.
С уважением Ярослав.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 25-09-2003 13:53 » 

Мы это уже обсуждали.
Через CreateFile создать handle нельзя, так как нет объекта, соответствующего каналу, это не тот handle, о котором ты думаешь.
Вот как я отвечал на подобный вопрос:
Например в примерах в DDK так запись/чтение сделана.

1) Через SetupDi... получают handle девайса и его имя, для этого используют интерфейс, зарегистрированный девайсом.
2) К полученному имени девайса приделывают имя канала, например PIPE2, поставив \\ между ними, тогда все запросы на составное имя пойдут сначала на драйвер девайса, а он просто пропарсит строку и получит имя канала.

4) делают CreateFile на полученное составное имя. Драйвер, получив IRP_MJ_CREATE разбирает полученное имя и получает номер канала, и добавляет необходимую инфу в FILE_OBJECT->FsContext. Полученный handle нельзя использовать в URB запросах так как он относится к структуре FILE_OBJECT, а не к каналу.

3) ф-циями ReadFile/WriteFile пишут. Драйвер, получив запрос чтения/записи, из FILE_OBJECT->FsContext берет инфу про канал и запускает на него чтение/запись.
Записан
Yarilo
Гость
« Ответ #2 : 25-09-2003 14:04 » 

Цитата

Через CreateFile создать handle нельзя, так как нет объекта, соответствующего каналу, это не тот handle, о котором ты думаешь.

Получается, что PipeHandle, который используется в URB можно получить только если отфильтровать запрос URB_FUNCTION_SELECT_CONFIGURATION или URB_FUNCTION_SELECT_INTERFACE для данного устройства, а другого способа не существует?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #3 : 26-09-2003 05:56 » 

Я не сказал что других способов нет. Я сказал что из юзер мода при помощи существующих функций ты этого не сделаешь.
Записан
Yarilo
Гость
« Ответ #4 : 26-09-2003 06:08 » 

OK.
Дело в том, что в driver mode я тоже не могу найти способов как это сделать. Единственный способ, который я нашел - это отфильтровать URB_FUNCTION_SELECT_CONFIGURATION или URB_FUNCTION_SELECT_INTERFACE. Но для этого нужно начинать фильтрацию до того как устройство будет вставлено. Вот если бы был способ, просто спросить у устройства (в любой момент) какие у него описатели pipe-ов. Но похоже это невозможно Жаль
Покрайней мере документированных способов нет Жаль

С уважением Ярослав.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines