Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокируем Cd-rom что не так делаю, Пробую так и сяк но работает 
:(
    Опции темы
Asd
Дата 27.3.2004, 20:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите как сделать блокировкку разблокировку Cd-rom я пробовал так но не работает

Код
function LockCD(DriveCD:char; Locked:boolean):Boolean;
const IOCTL_STORAGE_MEDIA_REMOVAL = $002D4804;
var hDrive : THandle;
Returned : DWORD;
DisableEject : boolean;
Drv: string;
begin
result:=False;
Drv:= '\\.\'+DriveCd+':';
hDrive := CreateFile(PChar(Drv), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if GetLastError <> 0 then Exit;
try
DisableEject := Locked;
Result:=DeviceIoControl(hDrive,IOCTL_STORAGE_MEDIA_REMOVAL,
@DisableEject,sizeof(DisableEject),nil,0,Returned,nil);
finally
 CloseHandle(hDrive);
end;
end;

  Вверх
DriveSoftware
Дата 28.3.2004, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 17.3.2003

Репутация: нет
Всего: 4



Код

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



Может кто нибудь перелапатит на Delphi
PM MAIL WWW ICQ   Вверх
dm9
Дата 28.3.2004, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Есть у меня подозрение, что в Delphi это будет выглядеть так:

Код
procedure TForm1.Button1Click(Sender: TObject);
type
  TPreventMediaRemoval = record
     f: Boolean;
  end;
var
  hDevice : THandle;
  dwBytesReturned : DWord;
  pmr : ^TPreventMediaRemoval;
begin
  hDevice := CreateFile ('\\\\.\\E:', GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
     nil, OPEN_EXISTING, 0, 0);
  dwBytesReturned := 0;
  pmr^.f := true;
  if not DeviceIoControl (hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, pmr, sizeof (TPreventMediaRemoval),
     nil, 0, dwBytesReturned, nil)
  then ShowMessage ('Door can''t be locked');
  CloseHandle (hDevice);
end;


Это заблокировать.
Для разблокировки pmr^.f := false;

Только вот IOCTL_STORAGE_MEDIA_REMOVAL в Delphi не декларировано, так что проверить я не смог sad.gif

У кого установлено что-то типа VC, посмотрите, чему равна константа.
PM MAIL ICQ   Вверх
stab
Дата 28.3.2004, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



ВХОД:
drive, буква диска
lock, True - заблокировать, False - разблокировать

ВЫХОД:
True - успех
False - ошибка

Код

function LockDrive(drive: Char; lock: Boolean): Boolean;
type
 PREVENT_MEDIA_REMOVAL = packed record
   PreventMediaRemoval: LongBool;
 end;

const
 IOCTL_STORAGE_MEDIA_REMOVAL = $2D4804;

var
 hDevice: THandle;
 pmr: PREVENT_MEDIA_REMOVAL;
 dwBytesReturned: DWORD;

begin
 Result := False;
 hDevice := CreateFile(PChar('\\.\' + drive + ':'), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
 if hDevice <> 0 then
 begin
   pmr.PreventMediaRemoval := lock;
   Result := DeviceIoControl(hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, @pmr, SizeOf(pmr), nil, 0, dwBytesReturned, nil);
   CloseHandle(hDevice);
 end;
end;



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
dm9
Дата 28.3.2004, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Да, с pmr я сглупил. Там в моём случае надо выделять память.

Скажи, а что такое '\\\\.\\E:'. Чем это отличается от '\\.\E:'?
Добавлено @ 16:40
Всё, вопрос снят. Я дурак. В Си слэш - это служебный символ, и для вывода слэша надо эго дублировать в строке.
PM MAIL ICQ   Вверх
DriveSoftware
Дата 28.3.2004, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 17.3.2003

Репутация: нет
Всего: 4



cully

И что оно блокирует?!?!
У меня не пашет.

PM MAIL WWW ICQ   Вверх
stab
Дата 28.3.2004, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



DriveSoftware, диск в CD-ROM, DVD-ROM, у мя пашет, а если у тебя не пашет так отлаживай, Open Source функция smile.gif , а ты же программист biggrin.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
p0s0l
Дата 30.3.2004, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



DriveSoftware, надеюсь, у тебя 2k/XP ?



--------------------
С уважением, г-н Посол.
PM   Вверх
DriveSoftware
Дата 30.3.2004, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 17.3.2003

Репутация: нет
Всего: 4



p0s0l


Стоит, но пробывал под Me.
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 30.3.2004, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



DriveSoftware, и что, под 2k/XP не пашет ? Про Me сказано:
Цитата
Requirements

Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0.

Т.е. на Me это работать не должно...
Можешь посмотреть, что тебе возвращает LockDrive (by cully), true или false...




--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.