eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: LinXP, morgot, stran34 (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Извлечение устройства
Посл.ответ Сообщение


Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

Создано: 20 апреля 2015 17:48 New!
Цитата · Личное сообщение · #1

В общем хотел спросить, может кто знает.
Пишу сейчас сервисную утиль для аппаратного USB ключа.
Возникла потребность программно извлечь и потом программно загрузить ключ.
Но проблема в том, что система его видит как "Устройство чтения смарт-карт",
т.е. CM_Request_Device_Eject уже не канает...
Подскажите пожалуйста, в сторону каких апи смотреть, а еще лучше кусочек кода увидеть
Спасибо!


Ранг: 1002.1 (!!!!)
Статус: Участник

Создано: 20 апреля 2015 17:56 New!
Цитата · Личное сообщение · #2

--> Link <--
не смотрел, но может это, правда паскаль... я ничего там не понял


Ранг: 1975.0 (!!!!)
Статус: Модератор
retired

Создано: 20 апреля 2015 18:12 New!
Цитата · Личное сообщение · #3

Отключение/подключение устройства через SetupDi?

| Сообщение посчитали полезным: OnLyOnE



Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

Создано: 20 апреля 2015 19:16 · Поправил: OnLyOnE New!
Цитата · Личное сообщение · #4

Archer

SetupDiRemoveDevice удаляет устройство, но как-то сурово.
При передергивании ключа в USB разъеме каждый раз устанавливает драва заново..

reversecode

Там работа с дисками.


Статус: Пришелец

Создано: 20 апреля 2015 20:04 New!
Цитата #5

1
2
3

На stackoverflow еще варианты есть.

Ранг: 394.1 (мудрец)
Статус: Участник

Создано: 20 апреля 2015 21:58 · Поправил: dosprog New!
Цитата · Личное сообщение · #6

OnLyOnE пишет:
Возникла потребность программно извлечь и потом программно загрузить ключ.


Это как-то связано с необходимостью обесточки ключа для обнуления встроенного счётчика-таймера
при работе лицензированной сервисной утили (в отличие от её демо-варианта) ?

--Добавлено--
К следующему посту:

Понятно..



Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

Создано: 20 апреля 2015 22:16 New!
Цитата · Личное сообщение · #7

dosprog пишет:
Это как-то связано с необходимостью обесточки ключа для обнуления встроенного счётчика-таймера
при работе лицензированной сервисной утили (в отличие от её демо-варианта) ?

Нет.. Утиль моя переключает режимы работы USB или HID .. при обновлении информации
о ключе без переподключения прога не получает данных о режиме работы, т.к. нужна перерегистрация
устройства в системе, только после этого можно узнать какое устройство было зарегено USB или HID.


Ранг: 1975.0 (!!!!)
Статус: Модератор
retired

Создано: 21 апреля 2015 10:26 New!
Цитата · Личное сообщение · #8

Вообще я имел в виду не удаление девайса с корнем через Remove, а именно включение/выключение, как в диспетчере устройств, это тоже через SetupDi реализуется.


Ранг: 633.9 (!)
Статус: Участник
CyberMonk

Создано: 21 апреля 2015 11:13 New!
Цитата · Личное сообщение · #9

ChangeStateUSBDevice

Code:
  1. .if      uMsg == WM_COMMAND
  2.                  .if    wParam == IDC_Disable
  3. ; -----------------------------------------------------------------------
  4.                         invoke         ChangeDeviceState,DICS_DISABLE
  5.                         .if eax==TRUE
  6.                               invoke        MessageBeep,0
  7.                         .endif
  8. ; -----------------------------------------------------------------------
  9.                  .elseif         wParam == IDC_Enable
  10. ; -----------------------------------------------------------------------
  11.                         invoke         ChangeDeviceState,DICS_ENABLE
  12.                         .if eax==TRUE
  13.                               invoke        MessageBeep,0
  14.                         .endif
  15. ; -----------------------------------------------------------------------


--> Link <--

| Сообщение посчитали полезным: OnLyOnE



Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

Создано: 21 апреля 2015 14:12 New!
Цитата · Личное сообщение · #10

Все заработало!
Code:
  1. mov pcp.ClassInstallHeader.cbSize,sizeof SP_CLASSINSTALL_HEADER
  2. mov pcp.ClassInstallHeader.InstallFunction,DIF_PROPERTYCHANGE
  3. mov eax,DICS_ENABLE;DICS_DISABLE
  4. mov pcp.StateChange,eax
  5. mov pcp.Scope,DICS_FLAG_GLOBAL
  6. invoke SetupDiSetClassInstallParams,hDevInfoSet,addr DeviceInfoData,addr pcp,sizeof SP_PROPCHANGE_PARAMS
  7. invoke SetupDiChangeState,hDevInfoSet,addr DeviceInfoData

Всем спасибо.
P.S. Тему закрываю.
 eXeL@B —› Программирование —› Извлечение устройства
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS