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

Материал из DRKB

Блокировка/Разблокировка CD-ROM[править | править код]

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


//заблокировать
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);
}


Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01388



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;


Author: Krid
Source: Взято из http://forum.sources.ru
ID: 01389