Определение номера USB флэш с использованием Setupapi.dll

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Stalker
Активист
Сообщения: 127
Зарегистрирован: 01 Декабрь 2005, 20:47
Откуда: Минск
Контактная информация:

Определение номера USB флэш с использованием Setupapi.dll

Сообщение Stalker »

Привет всем!
Помогите решить проблему. Необходимо определить уникальный номер USB - флэш, замечу не серийный номер, который формируется после форматирования,(типа номер диска С (3785939785) или D) компа, с этим все просто, а физический номер.
Для этого используется функция CM_Get_Device_Id () из SetupApi.dll
если в поисковике Google набрать поиск MSDN или CM_Get_Device_Id то последний выдаст множество статей на эту тему, но вот для нашей братвы сларионщиков ничего не нашел.
С уважением , Stalker
Специализация - программы для образования, делопроизводство, складской учет
Stalker
Активист
Сообщения: 127
Зарегистрирован: 01 Декабрь 2005, 20:47
Откуда: Минск
Контактная информация:

Re: Определение номера USB флэш с использованием Setupapi.dll

Сообщение Stalker »

Здравствуйте уважаемые ГУРУ!
Просмотрел форум, но ни одного совета нет. Вопрос не совсем праздный . Зная физический адрес флэшки можно защитить свои программы от нежелательного копирования. А это может понадобиться многим.
Попробую сам докопаться, но на это надо время которого как всегда не хватает.
Сбрасываю на всякий случай параметры функции.


http://msdn.microsoft.com/en-us/library/ms790894.aspx

CM_Get_Device_ID
The CM_Get_Device_ID function retrieves the device instance ID for a specified device instance, on the local machine.

CMAPI CONFIGRET WINAPI
CM_Get_Device_ID( IN DEVINST dnDevInst, OUT PTCHAR Buffer, IN ULONG BufferLen, IN ULONG ulFlags );
Parameters
dnDevInst
Caller-supplied device instance handle that is bound to the local machine.
Buffer
Address of a buffer to receive a device instance ID string. The required buffer size can be obtained by calling CM_Get_Device_ID_Size, then incrementing the received value to allow room for the string's terminating NULL.
BufferLen
Caller-supplied length, in characters, of the buffer specified by Buffer.
ulFlags
Not used, must be zero.

Return Value
If the operation succeeds, the function returns CR_SUCCESS. Otherwise, it returns one of the CR_-prefixed error codes defined in Cfgmgr32.h.

Comments
The function appends a NULL terminator to the supplied device instance ID string, unless the buffer is too small to hold the string. In this case, the function supplies as much of the identifier string as will fit into the buffer, and then returns CR_BUFFER_SMALL.

For information about device instance IDs, see Device Identification Strings.

For information about using device instance handles that are bound to the local machine, see CM_Get_Child.

Requirements
Versions: The CM_Get_Device_ID function is available in Microsoft Windows 2000 and later versions of Windows.

Headers: Declared in Cfgmgr32.h. Include Cfgmgr32.h.

Library: Contained in Cfgmgr32.lib. Link to Cfgmgr32.lib.


See Also
CM_Get_Child, CM_Get_Device_ID_Ex


Send feedback on this topic
Built on August 05, 2009
Специализация - программы для образования, делопроизводство, складской учет
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Re: Определение номера USB флэш с использованием Setupapi.dll

Сообщение StillZero »

В api закономерно использование не одной, а нескольких функций.
Здесь, как видно, как минимум надо получить нужный device instance handle, а так как устройств может быть несколько, то перед этим скорее всего их необходимо будет перечислить.
Функции CM_Get_Device_ID в своем локальном MSDN я не нашел, возможно появилась позже, нашел CM_Get_Device_IDexW, и подозреваю что это логично, т.е. тут еще и unicode. Не страшно, но возможно надо иметь ввиду.
Все сайты закрыты...
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Определение номера USB флэш с использованием Setupapi.dll

Сообщение morkovin »

Ждем примера на Клаше! :)
WBR, morkovin
lsgsoftware
Ветеран
Сообщения: 311
Зарегистрирован: 08 Июль 2005, 22:04

Re: Определение номера USB флэш с использованием Setupapi.dll

Сообщение lsgsoftware »

Я думаю, что на данном этапе у тебя ничего не получится. Вообще, узнавание из клашиной проги
идентификаторов железок - мое хобби. Вот уже выкладывал на форум ссылку на мою прогу, напомню еще разок
http://lsgsoftware.narod.ru/info.html
Сейчас для винды флешка - не штатное, а "виртуальное" устройство. И через штатные API ты вряд ли чего увидишь.
Даже такой монстр, как Эверест про флешку ничего не говорит конкретного. В свое время такая же ситуация была
с установкой винды на SATA- диск. Винда говорила, что на компе вообще нет жестких дисков. Нужен был специальный
драйвер для конкретной мамы, который скармливался при установке по F6. Потом проблему закрыли.
Уже давно я воюю с проблемой установки чистой( не бартовской) винды на флешку. "Почти" получается, но винда уже
вежливо ругается, мол диск(флешку) вижу, но нужен драйвер для скармливания по F6. А вот найти такой драйвер пока не могу.
А может такого и не нет. Ходят слухи, что Windows7 вообще будет поставляться на флешках, так что проблема будет решена,
так же как и с дисками SATA
Stalker
Активист
Сообщения: 127
Зарегистрирован: 01 Декабрь 2005, 20:47
Откуда: Минск
Контактная информация:

Re: Определение номера USB флэш с использованием Setupapi.dll

Сообщение Stalker »

Привет всем кто откликнулся!
Спасибо за советы. Задача оказалась, как вижу не такой и простой.
На форумах дельфистов и фокпрошников есть кое какие соображения, но очень все сложно
Будем надеятся, на будущее.
Специализация - программы для образования, делопроизводство, складской учет
Ответить