Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

Комманда mount и блокировка CDROM   Найти похожие ветки 

 
waw ©   (2003-07-25 14:52) [0]

Уважаемые проффесионалы, прошу прошение за очень простой вопрос.
Но может кто-то опуститися до ответа на него.

Мне очень нужно узнать каким образом mount в Linux болкирует открытие CDROM при нажатии кропки на приводе? Как она его держит. После монтирования я не могу вытащить диск до выполнения комманды umount.


Если есть пример кода или описание, или хотябы ссылка на документацию. Мне нужно эту возможность реализовать в Windows.


 
Song ©   (2003-07-25 16:52) [1]

MCISendString()
Команда lock


 
waw ©   (2003-07-28 17:00) [2]

Спасибо. Вы первый кто дал мне подсказку. А если не сложно полностью напишите комманду - MCISendString("lock") так?
И еще при помощи MCISendString() можно обратится только к первому устройству в списке, а мне нужно точно знать какое устройство я заблокировал. При помощи комманды MCISendCommand() - можно сделать блокировку.

Я нашел в документации описание cdrom atapi command specification, и нашел комманду для брокировки СД, но как ей воспользоватся незнаю. Там нужно в какой-то порт IDE контроллера ее подавать. Может кто знает как это делается на Delphi?


 
waw ©   (2003-07-28 17:24) [3]

MCISendString("lock", nil, 0, application.handle) выдает ошибку.

Подскажите пожалуйтста точный синтаксис комманды.


 
GANG   (2003-07-28 20:53) [4]

Если в поискать в интернете "MCISendString",
то можно найти много-чего, и в частности

http://www.logical-waste.com/DelphiFAQ.htm

где можно содрать следующий код:

procedure OpenCDROMDrive(Drive: Char);
begin
MCISendString(PChar("open " + Drive + " type cdaudio alias device"), nil, 0, 0);
MCISendString("set device door open", nil, 0, 0);
MCISendString("close device", nil, 0, 0);
end; (* OpenCDROMDrive *)

procedure CloseCDROMDrive(Drive: Char);
begin
MCISendString(PChar("open " + Drive + " type cdaudio alias device"), nil, 0, 0);
MCISendString("set device door closed", nil, 0, 0);
MCISendString("close device", nil, 0, 0);
end; (* CloseCDROMDrive *)


 
AbrosimovA ©   (2003-07-29 10:53) [5]

Команды MCI (см. Windows SDK, Microsoft Multimedia Programmer"s Reference)

MCI_BREAK — прерывание операции
MCI_CAPTURE — захват
MCI_CLOSE — закрытие доступа
MCI_CONFIGURE — конфигурирование видеоустройств
MCI_COPY — копирование в буфер
MCI_CUE — немедленное воспроизведение
MCI_CUT — перенос в буфер
MCI_DELETE — удаление
MCI_ESCAPE — прямая передача данных устройству
MCI_FREEZE — заморозка
MCI_GETDEVCAPS — статистика устройства
MCI_INDEX — включение/выключение
MCI_INFO — получение информации прямо от
устройства
MCI_LIST — информация о количестве каналов
MCI_LOAD — загрузка файла
MCI_MARK — пометка
MCI_MONITOR — указание источника видео
MCI_OPEN — открытие доступа
MCI_PASTE — вставка из буфера
MCI_PAUSE — пауза
MCI_PLAY — воспроизведение
MCI_PUT — указание источника, приемника и
размера вывода на экран
MCI_QUALITY — уровень качества
MCI_REALIZE — реализация палитры в контексте
устройства
MCI_RECORD — запись
MCI_RESERVE — выделение дискового пространства для
записи
MCI_RESTORE — захват прямо из файла
MCI_RESUME — продолжение воспроизведения
MCI_SAVE — сохранение файла
MCI_SEEK — позиционирование
MCI_SET — установка информации устройства
MCI_SETAUDIO — установка аудио-переменных
MCI_SETTIMECODE — включение/выключение захвата по времени
MCI_SETTUNER — переключение каналов
MCI_SETVIDEO — установка видео-переменных
MCI_SIGNAL — установка позиции в рабочем
пространстве
MCI_SPIN — раскрутка устройства
MCI_STATUS — информация о MCI-устройстве
MCI_STEP — передвижение на другой фрейм
MCI_STOP — остановка
MCI_SYSINFO — поиск информации об устройстве
MCI_UNDO — отмена действия
MCI_UNFREEZE — размораживание
MCI_UPDATE — обновление прямоугольника вывода
MCI_WHERE — получение координат прямоугольника
вывода
MCI_WINDOW — описание окна



 
AbrosimovA ©   (2003-07-29 11:04) [6]

Как заблокировать CD-ROM?

Для Вин2000 так:

1) Открываем диск
hDrive:=CreateFile("\\.\F:",GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
//Вместо F - твоя буква привода
2) Блокируем лоток
#define PREVENT_MEDIA_REMOVAL 0x002D4804;
ULONG Returned;
ULONG DisableEject:=1;
DeviceIoControl(hDrive,PREVENT_MEDIA_REMOVAL, &DisableEject, sizeof(DisableEject), NULL, NULL, &Returned, NULL);
3) Разблокируем лоток
DisableEject:=0;
--- аналогично блокировке ---
4) Закрываем диск
CloseHandle(hDrive);
Сколько раз заблокируешь, столько раз надо разблокировать иначе лоток откроешь только после перезагрузки.

Для Win9x здесь
http://support.microsoft.com/default.aspx?scid=kb;RU;q168180




 
waw ©   (2003-07-29 13:09) [7]

AbrosimovA © Огромное Вам спасибо.
#define PREVENT_MEDIA_REMOVAL 0x002D4804; - ни где не мог найти этой константы.

Все работет вот код функции на Delphi 6:

procedure Door_Lock(Locked:boolean);
const IOCTL_STORAGE_MEDIA_REMOVAL = $002D4804;
var hDrive : THandle;
Returned : DWORD;
DisableEject : boolean;
begin
hDrive := CreateFile("\\.\D:", GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if GetLastError <> 0 then
MessageDlg("Error:"+IntToStr(GetLastError), mtError, [mbOK], 0);
try
DisableEject := Locked;
if not DeviceIoControl(hDrive,
IOCTL_STORAGE_MEDIA_REMOVAL, // PREVENT_MEDIA_REMOVAL,
@DisableEject,
sizeof(DisableEject),
nil,
0,
Returned,
nil) then
MessageDlg("Error:"+IntToStr(GetLastError), mtError, [mbOK], 0);

finally
CloseHandle(hDrive);
end;
end;


Door_Lock(true); - Заблокировать
( false) AbrosimovA © Огромное Вам спасибо.
#define PREVENT_MEDIA_REMOVAL 0x002D4804; - ни где не мог найти этой константы.

Все работет вот код функции на Delphi 6:

procedure Door_Lock(Locked:boolean);
const IOCTL_STORAGE_MEDIA_REMOVAL = $002D4804;
var hDrive : THandle;
Returned : DWORD;
DisableEject : boolean;
begin
hDrive := CreateFile("\\.\D:", GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if GetLastError <> 0 then
MessageDlg("Error:"+IntToStr(GetLastError), mtError, [mbOK], 0);
try
DisableEject := Locked;
if not DeviceIoControl(hDrive,
IOCTL_STORAGE_MEDIA_REMOVAL, // PREVENT_MEDIA_REMOVAL,
@DisableEject,
sizeof(DisableEject),
nil,
0,
Returned,
nil) then
MessageDlg("Error:"+IntToStr(GetLastError), mtError, [mbOK], 0);

finally
CloseHandle(hDrive);
end;
end;


Door_Lock(true); - Заблокировать
Door_Lock(false); - Разблокировать






Страницы: 1 вся ветка

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
14-40612
Кулюкин Олег
2003-09-19 13:30
2003.10.13
Крик души: нужен грид


1-40458
Relaxxx
2003-10-02 17:32
2003.10.13
Ввод пароля???


14-40575
Funtik
2003-09-23 06:04
2003.10.13
Бумага


1-40379
GH@ST
2003-10-01 12:47
2003.10.13
Как перебрать список всех открытых окон


3-40274
Sesh
2003-09-20 13:10
2003.10.13
Работа с DBF без использования BDE