Delphi-Help

Главная Статьи CD-ROM Как заблокировать/разблокировать CDRom?

Как заблокировать/разблокировать CDRom?

Оцените материал
(0 голосов)


Как заблокировать/разблокировать CDRom?

Способ первый

procedure CD_Lock( DriveLetter: string; Locked: Boolean );
const
  IOCTL_STORAGE_MEDIA_REMOVAL = $002D4804;
var
  hDrive: THandle;
  Returned: DWORD;
begin
   hDrive := CreateFile( PChar( '\\.\' + DriveLetter ), GENERIC_READ,
                         FILE_SHARE_READ, nil, OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL, 0 );
   if GetLastError <> 0 then
      MessageDlg( 'Ошибка: ' + IntToStr( GetLastError ), mtError, [mbOK], 0 );
   try
      if not DeviceIoControl( hDrive,
                              IOCTL_STORAGE_MEDIA_REMOVAL, // PREVENT_MEDIA_REMOVAL,
                              @Locked, SizeOf( Locked ),
                              nil, 0, Returned, nil ) then
         MessageDlg( 'Ошибка: ' + IntToStr( GetLastError ), mtError, [mbOK], 0 );
   finally
      CloseHandle( hDrive );
   end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   // Заблокировать
   CD_Lock( 'f:', true );
   // Разблокировать
   CD_Lock( 'f:', false );
end;

Способ второй

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;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   // Заблокировать
   LockMedia( 'm', true );
   // Разблокировать
   LockMedia( 'm', false );
end;
Прочитано 4995 раз

Авторизация



Счетчики