Re: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Maxim S. Shatskih Россия  
Дата: 09.08.05 22:13
Оценка:
Так.

Забываем про компиляцию драйверов из VC++. Берется 2003 DDK SP1, в нем w2k build env — и вперед.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[4]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Maxim S. Shatskih Россия  
Дата: 09.08.05 22:14
Оценка:
S>Ну не такое уж это пустое занятие (настройка ужасного VC++ 6.0) Совершенно не нужно
>глядеть в мейкфайлы. Если хочется сваять нативный VCшный проект, то нужно собрать при

А зачем? Для крупных проектов BUILD как раз удобнее, чем билдование из VC++. Насчет .NET и Шарпа — не знаю, но для unmanaged coda — так точно.

VC++ный проект имеет смысл использовать только тогда, когда часть кода ваяется визардами.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[7]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Maxim S. Shatskih Россия  
Дата: 09.08.05 22:16
Оценка:
>сначала пробовал не build.exe а ddkbuild.bat. Но как мне теперь свою минимальную прогу
>скомпилить, так наврядли получиться, потому что там кроме .c и .h файлов необходимы и
>разные другие (*.mk, *.rc, ...)

Элементарно. .rc указывается во фразе SOURCES= вперемежку с .C и .CPP

Что касается .mc — то там надо еще второй мейкфайл, в котором будет командная строка для message compiler. В одном из DDKшных сэмплов это все точно было сделано.

Кстати, я не помню, чтоб VC++ умел билдовать .mc файлы.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[3]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Maxim S. Shatskih Россия  
Дата: 09.08.05 22:17
Оценка:
GRO> Мне надо Win32App (которе в последствии будет dll) чтобы получить данные из
>USB_DEVICE_DESCRIPTOR для определения серийника флешки.

А узнать PnP ID через SetupDiGetDeviceRegistryProperty или типа того — не проще будет случаем? он строится из того самого USB_DEVICE_DESCRIPTOR.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[8]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: straightener Россия  
Дата: 10.08.05 08:46
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

MSS>Кстати, я не помню, чтоб VC++ умел билдовать .mc файлы.

Ну, его можно запросто научить через Custom Build Step...
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[5]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: straightener Россия  
Дата: 10.08.05 08:46
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

S>>Ну не такое уж это пустое занятие (настройка ужасного VC++ 6.0) Совершенно не нужно

>>глядеть в мейкфайлы. Если хочется сваять нативный VCшный проект, то нужно собрать при

MSS>А зачем? Для крупных проектов BUILD как раз удобнее, чем билдование из VC++. Насчет .NET и Шарпа — не знаю, но для unmanaged coda — так точно.

А затем, что мне иногда так просто удобней Естественно, имея готовый продукт, заточенный под build, перетачивать его под нативный VC-проект просто, чтобы было, бессмысленно, тем более что makefile-based проекты никто не отменял. Но начинать разработку нового модуля я предпочитаю в VC именно с нативным проектом, я уже наловчился, настраиваю его быстро, когда модуль "созреет", при помощи простых скриптов переношу его под build. Возможно не оптимальная, но удобная лично для меня схема.

А шарповые проекты билдом собираются, и ATL с MFC последних версий тоже, но требуется некоторая доработка напильником makefile.new.

MSS>VC++ный проект имеет смысл использовать только тогда, когда часть кода ваяется визардами.

На вкус и цвет... Замечания см. выше.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[6]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Maxim S. Shatskih Россия  
Дата: 10.08.05 18:19
Оценка:
На вкус и цвет — согласен, но единственный нормальный способ строить драйвер из VC++ — это DDKBUILD.BAT
Занимайтесь LoveCraftом, а не WarCraftом!
Re: USB_DEVICE_DESCRIPTOR
От: GROWER  
Дата: 17.08.05 13:31
Оценка:
Здрасьте. У меня никак не получается определить серийник флешки (или его нету на всех трёх, котроые я проверяю). В коде :

DeviceIoControl (hPhysicalDriveIOCTL, IOCTL_STORAGE_QUERY_PROPERTY,
& query,
sizeof (query),
& buffer,
sizeof (buffer),
& cbBytesReturned, NULL) )
{
STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & buffer;
.............

descrip -> SerialNumberOffset всегда равно 0 (HDD & USB), почему ? VendorIdOffset, ProductIdOffset, ProductRevisionOffset нормально. Это можно получить и так :

SetupDiGetDeviceRegistryProperty(devs,&devInfo,SPDRP_HARDWAREID, NULL, buffer,bsize,NULL),

buffer = "USB\Vid_066f&Pid_8000&Rev_1001"

Но этого SPDRP_HARDWAREID, я так понимаю, недостаточно для уникальности (возможно могут быть два устройста с одинаковой такой строкой). Какие ещё плюс к этому можно добавить данные ? Может Cylinders, RawPropertiesLength ...

А usbview показывает iSerialNumber: 0x03 ,и для другой флешки 0x02.
Re[7]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 18.08.05 13:10
Оценка:
GRO>> Я пробую перенести usbview в VC++ (что б отлаживать можно было, смотреть на ход программы). Обычная минимальная прога идёт нормально (взял пример WinBuild), а вот usbview выдаёт :

GRO>>Linking Executable — libchk\i386\usbview.exe for i386

GRO>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Get_Parent@12
GRO>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Get_Sibling@12
GRO>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Get_Child@12
GRO>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Get_DevNode_Registry_PropertyA@24
GRO>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Locate_DevNodeA@12
GRO>>source\usbview.obj() : error LNK2001: unresolved external symbol __imp__InitCommonControls@0
GRO>>source\usbview.obj() : error LNK2001: unresolved external symbol __imp__ImageList_ReplaceIcon@12
GRO>>source\usbview.obj() : error LNK2001: unresolved external symbol __imp__ImageList_Create@20
GRO>>libchk\i386\usbview.exe() : error LNK1120: 8 unresolved externals

GRO>> Что нужно сделать ?


А>Выкинуть нафиг usbview из проекта.

А>1. За основу взять только файл enum.c + код функции DriverNameToDeviceDesc из файла devnode.c
А>2. Из функций энумирации выкинуть код который работает с ListView
А>3. Для начала начни перенос с функции EnumerateHostControllers и потехоньку переноси все те функции которые теребуются
А>4. Повторять перенос.
А>

Сделал так. Всё почти также осталось, кроме трёх последних ошибок, и добавилось "unresolved external symbol _ConnectionStatuses". У меня весь код с объявлениями в одном файле. Как можно скомпилировать ?
Re[8]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Аноним  
Дата: 21.08.05 07:07
Оценка:
Здравствуйте, GROWER, Вы писали:

GRO>>> Я пробую перенести usbview в VC++ (что б отлаживать можно было, смотреть на ход программы). Обычная минимальная прога идёт нормально (взял пример WinBuild), а вот usbview выдаёт :


GRO>>>Linking Executable — libchk\i386\usbview.exe for i386

GRO>>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Get_Parent@12
GRO>>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Get_Sibling@12
GRO>>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Get_Child@12
GRO>>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Get_DevNode_Registry_PropertyA@24
GRO>>>source\devnode.obj() : error LNK2001: unresolved external symbol __imp__CM_Locate_DevNodeA@12
GRO>>>source\usbview.obj() : error LNK2001: unresolved external symbol __imp__InitCommonControls@0
GRO>>>source\usbview.obj() : error LNK2001: unresolved external symbol __imp__ImageList_ReplaceIcon@12
GRO>>>source\usbview.obj() : error LNK2001: unresolved external symbol __imp__ImageList_Create@20
GRO>>>libchk\i386\usbview.exe() : error LNK1120: 8 unresolved externals

GRO>>> Что нужно сделать ?


А>>Выкинуть нафиг usbview из проекта.

А>>1. За основу взять только файл enum.c + код функции DriverNameToDeviceDesc из файла devnode.c
А>>2. Из функций энумирации выкинуть код который работает с ListView
А>>3. Для начала начни перенос с функции EnumerateHostControllers и потехоньку переноси все те функции которые теребуются
А>>4. Повторять перенос.
А>>

GRO> Сделал так. Всё почти также осталось, кроме трёх последних ошибок, и добавилось "unresolved external symbol _ConnectionStatuses". У меня весь код с объявлениями в одном файле. Как можно скомпилировать ?


Так помоему у тебя еще большие сложности с основами линковки програм. Если видишь что то типа
unresolved external symbol __imp__CM_Get_Child@12 то поищи в какой библиотеке она находится и подключи к проекту!!!
Ну а на счет ConnectionStatuses, что я могу сказать, ВНИМАТЕЛЬНО КОД usbview СМОТРИ!!!
Re[9]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 22.08.05 13:08
Оценка:
Наконец-то я сделал и всё получилось ! Хотя, почти ... Я достаю номер из функции GetAllStringDescriptors после :

if (DeviceDesc->iSerialNumber)
{
stringDescNodeTail = GetStringDescriptors(hHubDevice,
ConnectionIndex,
DeviceDesc->iSerialNumber,
numLanguageIDs,
languageIDs,
stringDescNodeTail);

в stringDescNodeTail->StringDescriptor храняться данные, где серийный номер начинаеться с индекса stringDescNodeTail->DescriptorIndex. Так вот, если индексация начинаеться с нуля, то для одной флешки индекс равен 2, и номер именно оттуда и начинается, а для другой DescriptorIndex == 3, но номер всё равно начинается с 2 ! т.е. там в [3] уже идет 0x00 (unicode). Как такое может быть и что можно с этим сделать ?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.