Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Блокировка / Разблокировка CD-ROM

01.01.2007

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

Исходный код 

// ©Drkb v.3(2007): www.drkb.ru
 
//заблокировать
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 https://forum.vingrad.ru


 
const

 
 IOCTL_STORAGE_MEDIA_REMOVAL = $02D4804;
 
type
 PREVENT_MEDIA_REMOVAL=record
   PreventMediaRemoval:BOOL;
 end;
 
//  fLock=true  - блокировать
//  fLock=false - разблокировать
function LockCD(cdLetter:char; fLock:boolean):boolean;
var
 hDevice : THandle;
 dwBytesReturned : DWORD;
 pmr : PREVENT_MEDIA_REMOVAL;
begin
 result:=false;
 hDevice := CreateFile(pchar('\\.\'+cdLetter+':'),GENERIC_READ, 
                         FILE_SHARE_READ or FILE_SHARE_WRITE,
                         nil,OPEN_EXISTING, 0,0);
 if (hDevice=DWORD(-1)) then exit;
 
 try
  pmr.PreventMediaRemoval:=fLock;
  if (not DeviceIoControl(hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, @pmr, 
                           sizeof(pmr),nil, 0,
                           dwBytesReturned, nil)) then exit else result:=true;
 finally
   CloseHandle (hDevice);
 end;
end;
 
// блокируем
procedure TForm1.Button1Click(Sender: TObject);
begin
 if not LockCD('E',true) then 
   MessageBox(Handle,'Can not lock CD','Error',MB_ICONERROR) 
 else
   MessageBox(Handle,'CD is locked','Info',MB_ICONINFORMATION);
end;
 
// разблокируем
procedure TForm1.Button2Click(Sender: TObject);
begin
 if not LockCD('E',false) then 
   MessageBox(Handle,'Can not unlock CD','Error',MB_ICONERROR) 
 else
   MessageBox(Handle,'CD is unlocked','Info',MB_ICONINFORMATION)
end;

Автор: Krid

Взято из https://forum.sources.ru