Сейчас на форуме: Rio, tyns777, zombi-vadim (+5 невидимых)

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


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

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

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

-----
aLL rIGHTS rEVERSED!





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

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

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




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

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

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


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

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

Archer

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

reversecode

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

-----
aLL rIGHTS rEVERSED!




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 20 апреля 2015 20:04
· Личное сообщение · #5

1
2
3

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



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

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

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


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

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

Понятно..






Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

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

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

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

-----
aLL rIGHTS rEVERSED!





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

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




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 21 апреля 2015 11:13
· Личное сообщение · #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 <--

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube


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


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 21 апреля 2015 14:12
· Личное сообщение · #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. Тему закрываю.

-----
aLL rIGHTS rEVERSED!



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