Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Блокировка CD-ROMа


Автор: -Сергей- 1.4.2005, 14:36
Некоторые проги для записи компакт дисков на момент записи блокируют доступ к сидюшнику полностью, а игры, которые без диска не запускаются блокируют извлечение лотка. Если знаете как можно сделать подобное средствами Делфи, буду очень признателен. Заранее благодарен за ответ.

Автор: Snowy 1.4.2005, 14:42
Из DRKB:
Цитата

Вы уж простите, что на сях... сподручней было :\
Исходный код

//заблокировать
void CMFcDlg::OnBnClickedButton1()
{
HANDLE hDevice = CreateFile ("\\\\.\\E:", 
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
NULL,
NULL);
DWORD dwBytesReturned = 0;
PREVENT_MEDIA_REMOVAL pmr = {TRUE};
if(!DeviceIoControl (hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, &pmr, sizeof(pmr), NULL, 0, &dwBytesReturned, NULL)) AfxMessageBox ("Door can\'t be locked");
CloseHandle (hDevice);
}

//разблокировать
void CMFcDlg::OnBnClickedButton2()
{
HANDLE hDevice = CreateFile ("\\\\.\\E:", 
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
NULL,
NULL);
DWORD dwBytesReturned = 0;
PREVENT_MEDIA_REMOVAL pmr = {FALSE};
if(!DeviceIoControl (hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, &pmr, sizeof(pmr), NULL, 0, &dwBytesReturned, NULL)) AfxMessageBox ("Door can\'t be unlocked");
CloseHandle (hDevice);

}

Автор ответа: Baa
Взято с Vingrad.ru http://forum.vingrad.ru

Автор: Snowy 1.4.2005, 15:09
Код

function LockMedia(ADriveLetter: Char; ALock: Boolean): Boolean; 
var LWStatus: Hwnd; 
    LTemp: Cardinal; 
    LPMR32: Boolean; 
Const IOCTL_STORAGE_MEDIA_REMOVAL = $2D4804; 
begin 
  LwStatus := CreateFile(PChar('\\.\' + ADriveLetter + ':'),GENERIC_READ Or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); 
  LPMR32 := ALock; 
  If LwStatus <> INVALID_HANDLE_VALUE Then 
  begin 
    result := DeviceIoControl(LwStatus, IOCTL_STORAGE_MEDIA_REMOVAL, @LPMR32, sizeof(LPMR32), nil, 0, LTemp, nil); 
    CloseHandle(LwStatus); 
  end else result := False; 
end;

Вызов:
Код

LockMedia('d', true);  // заблокировать диск D:

LockMedia('d', false); // разблокировать диск D:

Автор: -Сергей- 5.4.2005, 02:04
И это всё? Я-то думал намного сложнее будет!
А в DRKB не нашел, возможно старая... Надо обновленную скачать...
Еще раз спасибо!

Автор: Alex 2.9.2005, 08:08
http://vingrad.ru/DELPHI-DLP-000435

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)