Текущий архив: 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.48 MB
Время: 0.009 c