Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 04.08.05 13:24
Оценка:
Здрасьте. Скажите пожалуйста, как настроить win2kddk (у меня VC++ 6.0, Windows2000prof), что б всё нормально компилировалось. Пытаюсь скомпилить usbview (все файлы из папки добавил в проект), — "C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE/common.ver (83): error RC2104 : undefined keyword or key name: VER_FILEFLAGSMASK". А когда удаляю из проекта файл usbview.rc, то куча ошибок (непонятные идентификаторы). Добавил в Tools -> Options -> Directories : D:\NTDDK\inc\ddk и D:\NTDDK\inc. Может не так надо , а как-то по другому ? Мне вообще надо получить USB_DEVICE_DESCRIPTOR что б узнать серийный номер флешки , может у кого-то код есть ... Пока я пробую скомпилить такой вот :

// #include <какие файлы надо подключать ?> ... (usb100.h, usbdi.h, wdm.h, usbdlib.h)
// при подключении куча ошибок в разных файлах

void main(void)
{
//PDEVICE_EXTENSION deviceExtension;
//NTSTATUS ntStatus;
PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL;
PURB urb;
ULONG siz;

urb = ExAllocatePool(NonPagedPool,
sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

if (urb) {
siz = sizeof(USB_DEVICE_DESCRIPTOR);
deviceDescriptor = ExAllocatePool(NonPagedPool,
siz);

if (deviceDescriptor) {

UsbBuildGetDescriptorRequest(urb,
(USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
USB_DEVICE_DESCRIPTOR_TYPE,
0,
0,
deviceDescriptor,
NULL,
siz,
NULL);
}
}
//ntStatus = IsoUsb_CallUSBD(DeviceObject, urb);
}
Re: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Samael  
Дата: 04.08.05 14:00
Оценка: +1
Здравствуйте, GROWER, Вы писали:

GRO>Здрасьте. Скажите пожалуйста, как настроить win2kddk (у меня VC++ 6.0, Windows2000prof), что б всё нормально компилировалось.


Оставить это пустое занятие (настройка ужасного VC++ 6.0) и использовать DDK'шный build.exe. Если сомневаетесь, то гляньте на досуге в %BASEDIR%\bin\makefile.def и makefile.new для того, чтобы оценить сколько понадобится времени для выстраивания правильных опций компилятору и линкеру.

Чтобы пользоваться средой, лучше сходить на http://www.osronline.com/article.cfm?article=43 и взять готовый батник DDKBUILD для среды, создать т.н. makefile project в среде и вызывать этот батник.
Re[2]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 04.08.05 15:01
Оценка:
Здравствуйте, Samael, Вы писали:

S>Здравствуйте, GROWER, Вы писали:


S>Оставить это пустое занятие (настройка ужасного VC++ 6.0) и использовать DDK'шный build.exe. Если сомневаетесь, то гляньте на досуге в %BASEDIR%\bin\makefile.def и makefile.new для того, чтобы оценить сколько понадобится времени для выстраивания правильных опций компилятору и линкеру.


S>Чтобы пользоваться средой, лучше сходить на http://www.osronline.com/article.cfm?article=43 и взять готовый батник DDKBUILD для среды, создать т.н. makefile project в среде и вызывать этот батник.


Спасибо за ответ, makefile.def посмотрел а makefile.new такого нету , ну это не важно. Скачал этот батник ddkbuild.bat, а нельзя ли поподробней рассказать что дальше делать .... как это всё настроить.
Re: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Аноним  
Дата: 04.08.05 15:25
Оценка:
Здравствуйте, GROWER, Вы писали:

GRO>// #include <какие файлы надо подключать ?> ... (usb100.h, usbdi.h, wdm.h, usbdlib.h)

GRO>// при подключении куча ошибок в разных файлах

Что ж ты делаешь то? Ты определись что хочешь откомпилить драйвер, так как по тексту ниже явный пример из KernelMode.
или Win32 App. Если компишишь USBVIEW то не морочь голову и компили build-ом. Переносить этот проект в VC можно, но толку будет немного. Лучше написать свою тулзу подобную USBVIEW просто переносом нужных исходников в свой проект.

Для того чтобы откомпилить полноценную тулзу подобную USBVIEW тебе помнадобятся такие файлы:
#include <usbioctl.h>
#include <initguid.h>
#include <setupapi.h>
и некоторые стуруктуры из DDK которые просто можно перенести в свой h файл.


GRO> void main(void)

GRO>{
GRO> //PDEVICE_EXTENSION deviceExtension;
GRO> //NTSTATUS ntStatus;
GRO> PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL;
GRO> PURB urb;
GRO> ULONG siz;

GRO> urb = ExAllocatePool(NonPagedPool,

GRO> sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

GRO> if (urb) {

GRO> siz = sizeof(USB_DEVICE_DESCRIPTOR);
GRO> deviceDescriptor = ExAllocatePool(NonPagedPool,
GRO> siz);

GRO> if (deviceDescriptor) {


GRO> UsbBuildGetDescriptorRequest(urb,

GRO> (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
GRO> USB_DEVICE_DESCRIPTOR_TYPE,
GRO> 0,
GRO> 0,
GRO> deviceDescriptor,
GRO> NULL,
GRO> siz,
GRO> NULL);
GRO> }
GRO> }
GRO> //ntStatus = IsoUsb_CallUSBD(DeviceObject, urb);
GRO>}
Re[2]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 04.08.05 15:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, GROWER, Вы писали:


GRO>>// #include <какие файлы надо подключать ?> ... (usb100.h, usbdi.h, wdm.h, usbdlib.h)

GRO>>// при подключении куча ошибок в разных файлах

А>Что ж ты делаешь то? Ты определись что хочешь откомпилить драйвер, так как по тексту ниже явный пример из KernelMode.

А>или Win32 App. Если компишишь USBVIEW то не морочь голову и компили build-ом. Переносить этот проект в VC можно, но толку будет немного. Лучше написать свою тулзу подобную USBVIEW просто переносом нужных исходников в свой проект.

А>Для того чтобы откомпилить полноценную тулзу подобную USBVIEW тебе помнадобятся такие файлы:

А>#include <usbioctl.h>
А>#include <initguid.h>
А>#include <setupapi.h>
А>и некоторые стуруктуры из DDK которые просто можно перенести в свой h файл.

Мне надо Win32App (которе в последствии будет dll) чтобы получить данные из USB_DEVICE_DESCRIPTOR для определения серийника флешки. Просто я впервые сталкиваюсь с ddk, скачал батник ddkbuild (как посоветовали), расскажите пожалуйста (если можно подробно) как мне скомпилить с помощью build'а.
Re[3]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Аноним  
Дата: 04.08.05 15:57
Оценка:
Здравствуйте, GROWER, Вы писали:

GRO> Мне надо Win32App (которе в последствии будет dll) чтобы получить данные из USB_DEVICE_DESCRIPTOR для определения серийника флешки. Просто я впервые сталкиваюсь с ddk, скачал батник ddkbuild (как посоветовали), расскажите пожалуйста (если можно подробно) как мне скомпилить с помощью build'а.


Для начала на установить DDK
Затем действуешь примерно так:
Запускаешь:Start->Development Kit->/Здесь зависит от версии DDK/->Checked Build Environment (Free Build Environment)
Появляется консоль в которой делаешь cd ..в каталог с исходниками usbview (гам где лежит source файл)и там запускаешь build вот и все.
По своему опыту. Провозившись какое то время с компиляцией usbview под VC переписал все заново в своем проекте
используя логику исходников usbview, что и тебе советую.
Re[3]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: straightener Россия  
Дата: 05.08.05 07:24
Оценка:
Здравствуйте, GROWER, Вы писали:

GRO>Здравствуйте, Samael, Вы писали:


S>>Здравствуйте, GROWER, Вы писали:


S>>Оставить это пустое занятие (настройка ужасного VC++ 6.0) и использовать DDK'шный build.exe. Если сомневаетесь, то гляньте на досуге в %BASEDIR%\bin\makefile.def и makefile.new для того, чтобы оценить сколько понадобится времени для выстраивания правильных опций компилятору и линкеру.


S>>Чтобы пользоваться средой, лучше сходить на http://www.osronline.com/article.cfm?article=43 и взять готовый батник DDKBUILD для среды, создать т.н. makefile project в среде и вызывать этот батник.


GRO>Спасибо за ответ, makefile.def посмотрел а makefile.new такого нету , ну это не важно. Скачал этот батник ddkbuild.bat, а нельзя ли поподробней рассказать что дальше делать .... как это всё настроить.


Ну не такое уж это пустое занятие (настройка ужасного VC++ 6.0) Совершенно не нужно глядеть в мейкфайлы. Если хочется сваять нативный VCшный проект, то нужно собрать при помощи build пример из DDK, который похож на Ваше нетленное творение и вдумчиво покурив лог, любезно предоставленный билдом, понять, что настройка проекта оригинальным методом copy-paste займет минут 20 от силы. Другой вопрос, что создавать и настраивать проект не всегда целесообразно.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[4]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 05.08.05 11:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, GROWER, Вы писали:


GRO>> Мне надо Win32App (которе в последствии будет dll) чтобы получить данные из USB_DEVICE_DESCRIPTOR для определения серийника флешки. Просто я впервые сталкиваюсь с ddk, скачал батник ddkbuild (как посоветовали), расскажите пожалуйста (если можно подробно) как мне скомпилить с помощью build'а.


А>Для начала на установить DDK

А>Затем действуешь примерно так:
А>Запускаешь:Start->Development Kit->/Здесь зависит от версии DDK/->Checked Build Environment (Free Build Environment)
А>Появляется консоль в которой делаешь cd ..в каталог с исходниками usbview (гам где лежит source файл)и там запускаешь build вот и все.
А>По своему опыту. Провозившись какое то время с компиляцией usbview под VC переписал все заново в своем проекте
А>используя логику исходников usbview, что и тебе советую.


Не получается ( ...

D:\NTDDK\src\wdm\usb\usbview>D:\NTDDK\src\wdm\usb\usbview\ddkbuild.bat
OSR DDKBUILD.BAT V6.3 — OSR, Open Systems Resources, Inc.
Непредвиденное появление: -NT4.

А не можешь скинуть свой проект ? (anton18@ua.fm)
Re[4]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 05.08.05 11:53
Оценка:
S>Ну не такое уж это пустое занятие (настройка ужасного VC++ 6.0) Совершенно не нужно глядеть в мейкфайлы. Если хочется сваять нативный VCшный проект, то нужно собрать при помощи build пример из DDK, который похож на Ваше нетленное творение и вдумчиво покурив лог, любезно предоставленный билдом, понять, что настройка проекта оригинальным методом copy-paste займет минут 20 от силы. Другой вопрос, что создавать и настраивать проект не всегда целесообразно.

А как собрать при помощи build.exe (если это имеется ввиду) пример из DDK ?
Re: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 05.08.05 11:59
Оценка:
При попытке скомпилить таким батником :

call D:\NTDDK\bin\setenv D:\NTDDK
cd D:\NTDDK\src\wdm\usb\usbview
nmake

выдаёт : D:\NTDDK\bin\makefile.def(1015) : fatal error U1052: file 'obj\_objects.mac' not found
Stop.
Re[5]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: straightener Россия  
Дата: 05.08.05 13:04
Оценка:
Здравствуйте, GROWER, Вы писали:


GRO> А как собрать при помощи build.exe (если это имеется ввиду) пример из DDK ?

Об этом вам уже говорили, кратко напомню: из стартменю "запустить" нужный build environment, находясь "внутри" сделать каталог с примером текущим и в нем запустить build -eZ.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[6]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 05.08.05 13:20
Оценка:
GRO>> А как собрать при помощи build.exe (если это имеется ввиду) пример из DDK ?
S>Об этом вам уже говорили, кратко напомню: из стартменю "запустить" нужный build environment, находясь "внутри" сделать каталог с примером текущим и в нем запустить build -eZ.

Спасибо, скомпилить usbview получилось ... то я запутался с этими build'ами и сначала пробовал не build.exe а ddkbuild.bat. Но как мне теперь свою минимальную прогу скомпилить, так наврядли получиться, потому что там кроме .c и .h файлов необходимы и разные другие (*.mk, *.rc, ...)
Re[2]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Fenrir  
Дата: 05.08.05 18:58
Оценка:
Здравствуйте, GROWER, Вы писали:

GRO> При попытке скомпилить таким батником :


GRO>call D:\NTDDK\bin\setenv D:\NTDDK

GRO>cd D:\NTDDK\src\wdm\usb\usbview
GRO>nmake

D:\NTDDK\bin\setenv d:\NTDDK\src\wdm\usb\usbview wdm free
cd ..\src\wdm\usb\usbview
make -zcE

Кажется, так. wdm — это для w2k/XP, free либо checked — как тебе надо.
Re: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Аноним  
Дата: 07.08.05 02:53
Оценка:
GRO>Здрасьте. Скажите пожалуйста, как настроить win2kddk (у меня VC++ 6.0, Windows2000prof), что б всё нормально компилировалось.

Всем спасибо за ответы/советы, я понял что мне надо разобраться как сделать "взять готовый батник DDKBUILD для среды, создать т.н. makefile project в среде и вызывать этот батник". Хотя на моей рабочей машине этого нету (а дома есть) где в проекте File -> New-> makefile (это тоже интересно, от чего зависит появление тех или иных опций в среде, на разных машинах по разному).
Re: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 08.08.05 14:38
Оценка:
GRO> PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL;
GRO> PURB urb;

GRO> urb = ExAllocatePool(NonPagedPool,

GRO> sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

GRO> if (deviceDescriptor) {


GRO> UsbBuildGetDescriptorRequest(urb, ...


При подкючение фалов , например, #include <usb100.h> и <usbdi.h>, нормально, а если другие — <wdm.h>,
<usbdlib.h>, то ошибки (redefinition). Пример из DDK, в котором используется usbstdlib.h не собирается
(Linking Executable — objchk\i386\usbcamd.sys for i386 stream.obj() : error LNK2001: unresolved external symbol _memcmp). В этом файле описание UsbBuildGetDescriptorRequest, а где ExAllocatePool — непонятно.
Re[2]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Аноним  
Дата: 08.08.05 14:44
Оценка:
Здравствуйте, GROWER, Вы писали:



GRO>> PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL;

GRO>> PURB urb;

GRO>> urb = ExAllocatePool(NonPagedPool,

GRO>> sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

GRO>> if (deviceDescriptor) {


GRO>> UsbBuildGetDescriptorRequest(urb, ...


GRO> При подкючение фалов , например, #include <usb100.h> и <usbdi.h>, нормально, а если другие — <wdm.h>,

GRO> <usbdlib.h>, то ошибки (redefinition). Пример из DDK, в котором используется usbstdlib.h не собирается
GRO> (Linking Executable — objchk\i386\usbcamd.sys for i386 stream.obj() : error LNK2001: unresolved external symbol _memcmp). В этом файле описание UsbBuildGetDescriptorRequest, а где ExAllocatePool — непонятно.

Где где в ntoskrnl.lib . Слушай, ну не путай ты билд для WIN32 APP с помошью DDK и билд для kernel mode driver с помошью все тогоже DDK.
Re[3]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 08.08.05 14:51
Оценка:
GRO>>> PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL;
GRO>>> PURB urb;

GRO>>> urb = ExAllocatePool(NonPagedPool,

GRO>>> sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

GRO>>> if (deviceDescriptor) {


GRO>>> UsbBuildGetDescriptorRequest(urb, ...


GRO>> При подкючение фалов , например, #include <usb100.h> и <usbdi.h>, нормально, а если другие — <wdm.h>,

GRO>> <usbdlib.h>, то ошибки (redefinition). Пример из DDK, в котором используется usbstdlib.h не собирается
GRO>> (Linking Executable — objchk\i386\usbcamd.sys for i386 stream.obj() : error LNK2001: unresolved external symbol _memcmp). В этом файле описание UsbBuildGetDescriptorRequest, а где ExAllocatePool — непонятно.

А>Где где в ntoskrnl.lib . Слушай, ну не путай ты билд для WIN32 APP с помошью DDK и билд для kernel mode driver с помошью все тогоже DDK.


Так что, получается в WIN32 APP нельзя использовать этот код (пользоваться этими ф-ми) ?
Re[4]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Аноним  
Дата: 08.08.05 14:56
Оценка:
GRO> Так что, получается в WIN32 APP нельзя использовать этот код (пользоваться этими ф-ми) ?

Здрасте Вам, приехали . Если бы ты заглянул в доку которая идет с DDK то скорей всего бы прочел там, что
функции ядра всетаки лучше вызывать имеено в драйвере, так как подсистема WIN32 не сможет этого сделать.
Да и потом, чтобы получить дискриптор устройства вызов этих функций не требуется для user mode. Смотри внимательно код
usbview там это сделано простым обращением к контролеру посредством вызова DeviceIoContol.
Если уж загорелся желанием использовать функции работы с usb из драйвера, то тебе прийдется его написать.
Re[5]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: GROWER  
Дата: 09.08.05 12:59
Оценка:
Я пробую перенести usbview в VC++ (что б отлаживать можно было, смотреть на ход программы). Обычная минимальная прога идёт нормально (взял пример WinBuild), а вот usbview выдаёт :

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

Что нужно сделать ?
Re[6]: Работа с WIN2KDDK (USB_DEVICE_DESCRIPTOR)
От: Аноним  
Дата: 09.08.05 13:18
Оценка:
Здравствуйте, 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. Повторять перенос.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.