Блокировка привода
Блокировка привода
Блокировка привода **************************************************************** Квэнди: procedure TForm32.CD_Lock(Locked: Boolean; DriveLetter: string); const IOCTL_STORAGE_MEDIA_REMOVAL = $002D4804; var hDrive: THandle; Returned: DWORD; DisableEject: boolean; begin hDrive := CreateFile(PChar('\\.\' + DriveLetter), 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('Ошибка:' + IntToStr(GetLastError), mtError, [mbOK], 0) finally CloseHandle(hDrive) end; end; CD_Lock(True) - блокирует CD-ROM CD_Lock(False) - разблокирует CD-ROM ********************************************************** Для полного веселья можно заблокировать все CD-ROMы в системе через это: procedure TMainForm.LockCDROMs; var w: dword; Root: string; i: byte; begin w := GetLogicalDrives; Root := '#:\'; for i := 0 to 25 do begin Root[1] := Char(Ord('A') + i); if (W and (1 shl i)) > 0 then if GetDriveType(PChar(Root)) = DRIVE_CDROM then begin DriveLetter := Copy(Root, 1, Length(Root) - 1); CD_Lock(True, DriveLetter) end end; end; ******************************************************************* Для блокировки лотка CD-ROM используется следующая функция: 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; Функция принимает два параметра. ADriveLetter - буква диска, ALock - блокировать (true - блокировать, false - разблокировать) Примеры использования: LockMedia('d', true); // заблокировать диск D: ShowMessage('CD-ROM заблокирован. Лоток не выезжает.'); LockMedia('d', false); // разблокировать диск D: ShowMessage('CD-ROM разблокирован.'); Автор: Snowy