Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Решено* | Программное отключение CDRom-а

Ответить
Настройки темы
*Решено* | Программное отключение CDRom-а
KAB KAB вне форума

Аватара для KAB

Пользователь


Сообщения: 110
Благодарности: 5

Профиль | Цитировать


Всем доброго времени суток!

У меня есть такая проблема: нужно программно отключить кнопку загрузки/выгрузки лотка CDRom-а.
Знаю программа CDSlow такое умеет, но мне она не подходит.
Если кто знает как это сделать помогите пожалуйста.

Заранее спасибо.

Отправлено: 03:37, 08-08-2005

 

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


KAB
Я могу ошибаться,но мне кажется,тут надо смотреть в сторону функции mciSendCommand, объявленной в модуле MMSystem.
К примеру,имеется следующий код на Delphi,заставляющий каждые пять секунд открывать/закрывать лоток CD-ROM'а:
Код: Выделить весь код
var
 OpenParm : TMCI_Open_Parms;
 GetParm : TMCI_Generic_Parms;
 SetParm : TMCI_Set_Parms;
 DI : Cardinal;
 OK : Boolean;
begin
 OK := False;
 OpenParm.lpstrDeviceType := 'CDAudio'; // Указываем на необходимость работы с CD-ROM'ом
repeat
 mciSendCommand(0, mci_Open, mci_Open_Type, LongInt(@OpenParm));
 DI := OpenParm.wDeviceID;
 mciSendCommand(DI, mci_Set, mci_Set_Door_Open, LongInt(@SetParm));
 mciSendCommand(DI, mci_Set, mci_Set_Door_Closed, LongInt(@SetParm));
 mciSendCommand(DI, mci_Close, mci_Notify, LongInt(@GetParm));
 Sleep(5000);
until OK;
end;
...взято из книжки Михаила Фленова.
Возможно навеит какие-нибудь мысли...

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 00:58, 09-08-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Это называется блокировка трея. Я видел, как это делает linux. Как windows - не знаю.
Т.о. заблокировать (железо) можно, но как в винде - не знаю.

Отправлено: 13:50, 10-08-2005 | #3

KAB KAB вне форума Автор темы

Аватара для KAB

Пользователь


Сообщения: 110
Благодарности: 5

Профиль | Цитировать


Спасибо всем кто ответил.

Отправлено: 21:54, 17-08-2005 | #4


Ветеран


Сообщения: 716
Благодарности: 55

Профиль | Отправить PM | Цитировать


А lock/unlock уже отменили?
http://www.computerhope.com/lockhlp.htm

Отправлено: 03:04, 25-08-2005 | #5


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Envel
Мне показалось или там написано:
Цитата ComputerHope.com:
AVAILABILITY

The lock command is an internal command that is available in the below Microsoft Operating Systems.

Windows 95
Windows 98

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 15:30, 25-08-2005 | #6

KAB KAB вне форума Автор темы

Аватара для KAB

Пользователь


Сообщения: 110
Благодарности: 5

Профиль | Цитировать


Как я понял с сайта http://www.computerhope.com/lockhlp.htm поддержка только Windows 9х, а мне нужно Windows XP-2003

-------
Если сообщение оказалось полезным, нажмите, пожалуйста, соответствующую кнопку.


Отправлено: 03:04, 28-08-2005 | #7


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


KAB
По-моему,я нашёл,что тебе надо.А именно:
Цитата "Техника защиты компакт-дисков от копирования" Криса Касперски:
Взаимодействие с прикладными приложениями обычно осуществляется посредством специальных кодов IOCTL, передаваемых драйверу функцией DeviceIoControl.
...можно воспользоваться IOCTL-командой блокировки лотка - IOCTL_CDROM_MEDIA_REMOVAL (а вот её непосредственное значение: 0х24804)...Вплоть до момента разблокировки лотка извлечь диск можно разве что булавкой или перезагрузив операционную систему.
Дело в том,что система не требует,чтобы разблокирование выполнялось в контексте того процесса,который выполнил блокирование.Она просто ведёт счёт блокировок, и если тот равен нулю, - лоток свободен.Соответственно, если счёт блокировок равен,например,шести - мы должны шесть раз вызывать команду разблокирования, прежде чем лазерный диск удасться извлечь на свет божий.
Код: Выделить весь код
 // Утилита позволяет манипулировать счётчиком блокировок диска.
 // Аргумент командной строки "+" увеличивает значение счётчика на единицу,
 // ...а "-" - уменьшает.

#include <windows.h>
#include <winioctl.h>
#include <stdio.h>

#define IOCTL_CDROM_MEDIA_REMOVAL 0x24804
main(int argc, char **argv)
{
   BOOL                                                 act;
   DWORD                                             xxxx; 
   HANDLE                                             hCD;
   PREVENT_MEDIA_REMOVAL     pmrLockCDROM;

 // Проверка аргументов
if (argc<3) {printf("USAGE: CD.lock.exe \\\\.\\X:  {+, -}\n"); return -1; }

if (argv[2] [0] == '+') act = TRUE;         // УВЕЛИЧИТЬ СЧЁТЧИК БЛОКИРОВОК
 else if (argv[2] [0] == '-') act = FALSE; // УМЕНЬШИТЬ СЧЁТЧИК БЛОКИРОВОК
   else {printf(stderr, "-ERR: in arg %c\n" , argv[2] [0]); return -1; }

 // Получить дескриптор устройства
hCD = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
 if (hCD == INVALID_HANDLE_VALUE) {printf(" -ERR: get CD-ROM\n"); return -1; }

 // Заблокировать/разблокировать лоток CD-ROM'a
pmrLockCDROM.PreventMediaRemoval = act;
DeviceIoControl(hCD, IOCTL_CDROM_MEDIA_REMOVAL,
                            &pmrLockCDROM, SizeOf(pmrLockCDROM), NULL, 0, &xxxx, NULL);
}
...ох уж этот Си...

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Последний раз редактировалось DillerInc, 03-09-2005 в 17:30. Причина: Исправил пару опечаток


Отправлено: 16:36, 31-08-2005 | #8

KAB KAB вне форума Автор темы

Аватара для KAB

Пользователь


Сообщения: 110
Благодарности: 5

Профиль | Цитировать


DillerInc при компиляции этого кода Borland С++ 5.02 выдал такие ошибки:

Error: noname00.cpp(15,42):Undefined symbol 'PREVENT_MEIDA_REMOVAL'
Error: noname00.cpp(15,42):Statement missing ;
Error: noname00.cpp(22,59):Cannot convert 'FILE *' to 'const char *'
Error: noname00.cpp(22,59):Type mismatch in parameter '__format' in call to 'printf(const char *,...)'
Error: noname00.cpp(29,14):Undefined symbol 'prmLockCDROM'
Error: noname00.cpp(31,43):Undefined symbol 'pmrLockCDROM'
Error: noname00.cpp(31,51):Call to undefined function 'SizeOf'
Warn : noname00.cpp(32,2):'act' is assigned a value that is never used

Может я что делаю не так

-------
Если сообщение оказалось полезным, нажмите, пожалуйста, соответствующую кнопку.


Отправлено: 23:56, 02-09-2005 | #9


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


KAB
Ну,с одной стороны я допустил несколько опечаток,которые сейчас вроде исправил.
С другой стороны,я не знаком с языком Си, и поэтому в коде могут быть какие-то ошибки - это следовало бы попросить других форумчан,которые знают Си,чтобы они проверили код.
И,как говорится,за что купил,за то и продаю.
Так что смотри...

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 17:38, 03-09-2005 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Решено* | Программное отключение CDRom-а

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
7 / 2008 R2 - Отключение окна "Установить программное обеспечение для данного устройства" SystemIntegrator Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 12 19-06-2024 14:36
Разное - [решено] Программное задвигание лотка привода. antikiller_bm Программное обеспечение Windows 7 03-01-2010 10:07
[решено] Подлинное программное обеспечение Microsoft LAMASTER Хочу все знать 2 02-09-2007 14:25
Отключение CDrom Djamper Microsoft Windows 95/98/Me (архив) 10 01-05-2003 16:25
Программное отключение HDD dascon Программирование и базы данных 1 19-12-2002 13:38




 
Переход