Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   отключение устройств (http://forum.oszone.net/showthread.php?t=85916)

chek 25-06-2007 18:29 603878

отключение устройств
 
Вложений: 1
подскажите пожалуйста, каким методом можно решить такую задачу : написать программу которая отключала бы USB, Сd-Rom и Floppy. (т.е. отключение флопика, дисковода и портов USB). меня интересует алгоритм написания данной программы.
мои идеи изменять параметры реестра которые отвечают за отключение устройств в диспетчере устройств.

DillerInc 25-06-2007 22:52 603979

chek
Я думаю,что надо смотреть в сторону функции DeviceIoControl и её разнообразных IOCTL-кодов.Данная функция является в некотором роде посредником между пользовательскими программи и драйверами режима ядра.В частности имеется ввиду драйвер того же CD-ROM'а.
В общем,смотри тут и потом вперёд на MSDN.

amel27 26-06-2007 04:23 604034

chek
В ресурс-ките есть утилита DevCon, которая в числе прочего может отключать/включать устройства... а в DDK есть ее исходник, если есть желание поковырять то вот он: http://forum.oszone.net/attachment.p...achmentid=4080

ADD: по поводу ключей реестра вот линк на ADM-файл политики который включает/выключает соответствующие драйверы установкой параметра "Start"=4 , но применение требует перезагрузки: http://support.microsoft.com/kb/555324/en-us

HKLM\SYSTEM\CurrentControlSet\Services\UsbStor
HKLM\SYSTEM\CurrentControlSet\Services\Cdrom
HKLM\SYSTEM\CurrentControlSet\Services\Flpydisk

chek 26-06-2007 13:30 604197

amel27
большое спасибо.
а вы можете написать часть программы на си билдере которая бы и изменяла этот параметр реестр при нажатии на кнопку??

amel27 27-06-2007 13:03 604755

chek
к сожалению нет - я не программер.. Гугль в помощь ;)

chek 27-06-2007 23:11 605051

amel27
ну и на том спасибо, будем искать...

DillerInc 28-06-2007 15:27 605361

chek
Что искать-то??Вы программист или нет...или,по-крайней мере,хотите им стать...?

Вот основной кусок кода на ассемблере.Думаю,суть сможете уловить:

Код:


.data

szRegCdromPath    db    "SYSTEM\CurrentControlSet\Services\Cdrom",0
szStartParam      db    "Start",0


.code

; ################## start ##########################
start proc

 LOCAL hKey:HANDLE
 LOCAL QueryData:DWORD
 LOCAL WriteData:DWORD
 LOCAL cbData:DWORD
 LOCAL acBuffer[64]:CHAR

; /* Открываем нужный ключ реестра */
      lea    eax, hKey
      push  eax
      push  KEY_ALL_ACCESS
      push  0
      push  offset szRegCdromPath
      push  HKEY_LOCAL_MACHINE
      call  RegOpenKeyEx
      test  eax, eax                      ; ERROR_SUCCESS == 0
      jnz    @@failed_open_reg

; /* Мы хотим считать четыре байта (DWORD) */
      mov    cbData, sizeof DWORD

; /* Проверяем оригинальный параметр и его значение (опционально) */
      lea    eax, cbData
      push  eax
      lea    eax, QueryData
      push  eax
      push  NULL
      push  NULL
      push  offset szStartParam
      push  hKey
      call  RegQueryValueEx
      test  eax, eax
      jnz    @@failed_query_reg

      cmp    cbData, sizeof DWORD
      jnz    @@failed_query_reg

; /* Заносим в буфер значение 0х4 */
      mov    WriteData, SERVICE_DISABLED

; /* Устанавливаем новое значение параметра "Start" */
      push  cbData
      lea    eax, WriteData
      push  eax
      push  REG_DWORD
      push  0
      push  offset szStartParam
      push  hKey
      call  RegSetValueEx
      test  eax, eax
      jnz    @@failed_set_reg
      ...

Дело в том,что тот же драйвер cdrom.sys представляется в системе как сервис.Ключ реестра "Cdrom" содержит необходимую информацию,требуемую для нормальной работы этого драйвера.
Параметр этого ключа,называемый "Start",характеризует то,как этот драйвер запускается.В данном случае нас интересуют два значения:

SERVICE_SYSTEM_START
0x00000001
Запускается при на ранних стадиях инициализации системы(значение по-умолчанию)

SERVICE_DISABLED
0x00000004
Отключение сервиса.Драйвер не может быть запущен.


Время: 00:42.

Время: 00:42.
© OSzone.net 2001-