Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Вниз

Комманда 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
14-40638
Дмитрий
2003-09-25 10:40
2003.10.13
PC AnyWhere под XP.


14-40616
Pindos
2003-09-24 20:59
2003.10.13
(Сотовые телефоны)Набор мелодий в ручную


4-40721
Onyx
2003-08-08 12:14
2003.10.13
КОНТЕКСТНОЕ МЕНЮ в контекстном меню!!!


3-40292
chesh
2003-09-19 13:07
2003.10.13
Поиск с помощью Seek (AdoTable) по dbf таблице


1-40513
Hatawa
2003-10-02 07:37
2003.10.13
Как распараллелить два процесса?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский