Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Запрет использования dvd привода

25.05.2011, 08:24. Показов 3279. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро!
Кто нибудь подскажите надежный способ програмно запретить или разрешить исполбзование DVD привода?
Своими силами такая жуть получилась, что компилятор меня буквально покрыл трехэтажным матом...
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2011, 08:24
Ответы с готовыми решениями:

Запрет использования usb накопителей
Всем привет. Уважаемые опытные программисты, подскажите команду которая позволит запрещать использование usb накопителей (флешек и т.п), а...

Выбор Cd/dvd привода
Помогите сделать выбор между приводом samsung и asus, какой марки привод лучше брать?

Из-за DVD привода не запускается ОС
решил поменять DVD Sony NEC Optical шлейф ata ,на что система Win 7 матиринка мини пишет :reboot device key..(ели надо то полностью напишу...

21
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.05.2011, 20:55
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Блокировка/Разблокировка 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);
}
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
26.05.2011, 09:46  [ТС]
Я попробовал ваш вариант привязать к checkbox и вот результат:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void __fastcall TForm1::CheckBox9Click(TObject *Sender)
{
if (CheckBox9->Checked==true)
 {
 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);
 }
else
 {
 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");// коментарий к строке-здесь вроде как идет условие if а фигурные скобки отсутствуют..
 CloseHandle (hDevice);
 }
}

12 ошибок по шесть в запрете и разрешении причем одинаковые:

C++
1
2
3
4
5
6
7
8
9
10
11
12
[BCC32 Error] Unit1.cpp(1754): E2451 Undefined symbol 'PREVENT_MEDIA_REMOVAL'
[BCC32 Error] Unit1.cpp(1754): E2379 Statement missing ;
[BCC32 Error] Unit1.cpp(1755): E2451 Undefined symbol 'IOCTL_STORAGE_MEDIA_REMOVAL'
[BCC32 Error] Unit1.cpp(1755): E2451 Undefined symbol 'pmr'
[BCC32 Error] Unit1.cpp(1755): E2109 Not an allowed type
[BCC32 Error] Unit1.cpp(1755): E2268 Call to undefined function 'AfxMessageBox'
[BCC32 Error] Unit1.cpp(1768): E2451 Undefined symbol 'PREVENT_MEDIA_REMOVAL'
[BCC32 Error] Unit1.cpp(1768): E2379 Statement missing ;
[BCC32 Error] Unit1.cpp(1769): E2451 Undefined symbol 'IOCTL_STORAGE_MEDIA_REMOVAL'
[BCC32 Error] Unit1.cpp(1769): E2451 Undefined symbol 'pmr'
[BCC32 Error] Unit1.cpp(1769): E2109 Not an allowed type
[BCC32 Error] Unit1.cpp(1769): E2268 Call to undefined function 'AfxMessageBox'
Если не трудно может посмотрите в чем недовольство компилятора?
1
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
26.05.2011, 11:10
http://msdn.microsoft.com/en-u... 85%29.aspx

вот тут неплохо расписано про функции которой вы пользуетесь, и где вылетает ошибка.

почитайте на досуге. должно помоч.
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
27.05.2011, 13:19  [ТС]
Мне не хватает знаний чтоб применить данные с ссылки

Добавлено через 12 часов 33 минуты
Остались только две ошибки:

C++
1
2
[BCC32 Error] Unit1.cpp(1793): E2268 Call to undefined function 'AfxMessageBox'
[BCC32 Error] Unit1.cpp(1807): E2268 Call to undefined function 'AfxMessageBox'
Добавлено через 41 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
if (CheckBox9->Checked==true)
 {
        // Заблокировать дверцу
 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)) MessageBox (NULL , "Door can\'t be locked!", "Some title", MB_OK | MB_ICONERROR);
 CloseHandle (hDevice);
 }
else
 {        // Разблокировать дверцу
 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)) MessageBox (NULL , "Door can\'t be unlocked!", "Some title", MB_OK | MB_ICONERROR);
 CloseHandle (hDevice);                                                                                                                                             //    "Door can\'t be unlocked"
 }
Вот так компелируется но дверца всеравно открывается...
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.05.2011, 14:42
ну замени его на ShowMessage
1
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
27.05.2011, 14:49
а дверца кажись всегда будет открываться...

даже если шлейф от компа с ДВД не подключен, оно же откроется.
потому наверно не запретиш..
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.05.2011, 14:59
ну, убери это
C++
1
2
else
 {        // Разблокировать дверцу
Цитата Сообщение от koldun Посмотреть сообщение
даже если шлейф от компа с ДВД не подключен, оно же откроется.
потому наверно не запретиш..
+100
а еще можно вырубить электричество ...
0
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
27.05.2011, 15:04
Цитата Сообщение от LK Посмотреть сообщение
а еще можно вырубить электричество
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
28.05.2011, 08:32  [ТС]
Я смог наладить все работает и даже дверь действительно DVD-ROM не открывается!!!:dance3:

Но осталось одна проблема в коде прописан его путь как диск D:!
Вопрос какие изменения внести чтоб он мог блокировать даже если диск DVD-ROMa будет F: ?

C++
1
2
3
4
5
6
7
HANDLE hDevice = CreateFile ("\\\\.\\D:",
 GENERIC_READ,
 FILE_SHARE_READ | FILE_SHARE_WRITE,
 NULL,
 OPEN_EXISTING,
 NULL,
 NULL);
Добавлено через 16 часов 10 минут
Как для этой функции перечислить все тома и найти который из них CD-DVD ROM?
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
28.05.2011, 08:44
как информация к размышлению
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button1Click(Sender: TObject);
var
  w: dword;
  Root: string;
  i: integer;
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
        Form1.Label1.Caption := Root;
  end;
end;
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
29.05.2011, 05:29  [ТС]
Паскаль мне сложновато приминить.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.05.2011, 05:43
ключевые слова для самостоятельного поиска решения:
GetLogicalDrives
GetDriveType
DRIVE_CDROM
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
29.05.2011, 07:49  [ТС]
А это как приспособить, или этот способ не в кассу?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
String DWORDtoDiskNames(DWORD dw)
{
 
     char temp [64];
     int size = 0;
 
     for (int i = 0 ; i <= 25; i++)
     {
           if (dw % 2 == 1)
           {
                temp [size++] =  (char) (i+65);
           }
           dw >>= 1;
     }
 
     temp [size] = 0;
     return String (temp);
}
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.05.2011, 07:58
я тебе сказал функции, почитай про них, там даже примеры бывают
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
29.05.2011, 08:57  [ТС]
Вот что получилось

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using namespace std;
 
 int main()
{
 
   char FileName[1024];
 
   int i;
 
   char *drives[] = {"C:","D:","E:","F:","G:","H:","I:","J:","K:","L:",
"M:","N:","O:","P:","Q:","R:","S:","T:","U:"," V:",
"W:","X:","Y:","Z:"};
   char path[20];
 
   for(i = 0;i < 24;i++)
 
}
if (CheckBox9->Checked==true)
 {
        // Заблокировать дверцу
 HANDLE hDevice = CreateFile ("\\\\.\\i:",
 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)) MessageBox (NULL /* или дескриптор вашего окна */, "Door can\'t be locked!", "Some title", MB_OK | MB_ICONERROR);
 CloseHandle (hDevice);
 }
else
 {        // Разблокировать дверцу
 HANDLE hDevice = CreateFile ("\\\\.\\i:",
 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)) MessageBox (NULL , "Door can\'t be unlocked!", "Some title", MB_OK | MB_ICONERROR);
 CloseHandle (hDevice);                                                                                                                                             //    "Door can\'t be unlocked"
 }
ошибки:

C++
1
2
3
[BCC32 Error] Unit1.cpp(1881): E2141 Declaration syntax error
[BCC32 Error] Unit1.cpp(1981): E2139 Declaration missing ;
[BCC32 Error] Unit1.cpp(1981): E2190 Unexpected }
1
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.05.2011, 12:39
Samrisbe,
После цикла удали } , и после цикла открой { и закрой его туда где заканчивается цикл и вконцу тоже добав }(кароче сблоками каша), еше у тя гдето ; не хватает

Добавлено через 25 минут
LK,
Не волнуйса твой первый код отлично работает, надо умет просто гуглить

Samrisbe,
в #include просто добав #include <Winioctl.h>

А если нужно сделать на других буквах диска, просто отроботай их по отделности

Добавлено через 6 минут
LK,
Не волнуйса твой первый код отлично работает, надо умет просто гуглить

Samrisbe,
в #include просто добав #include <Winioctl.h>

А если нужно сделать на других буквах диска, просто отроботай их по отделности
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
29.05.2011, 12:51  [ТС]
Я так и зделал.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.05.2011, 13:53
Цитата Сообщение от Programmer. Посмотреть сообщение
1. Не волнуйса твой первый код отлично работает
2. надо умет просто гуглить
1. да я как бы и не особо переживал
2. спасибо, буду учиться гуглить ... знать бы еще, что это
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
29.05.2011, 16:35  [ТС]
Сенсей это не я а вы
я ваш ученик.

Ну так может как в старые добрые времена решим этот вопрос в стиле "копипасте" ?
Реально я сделал переберая каждый том, но это так не гламурно:

C++
1
 HANDLE hDevice = CreateFile ("\\\\.\\D:",
C++
1
HANDLE hDevice = CreateFile ("\\\\.\\G:",
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2011, 16:35
Помогаю со студенческими работами здесь

Пропал значок DVD-привода
vsem salam.u menya problema - dvd-rom propal s moego komputera,posle togo kak ya obnovil windu 4rez net na sp2.disk loju-ne 4itaet. всем...

Скорость чтения DVD привода
Купил внешний диск и решил скопировать на него весь архив. по содержанию все диски фактически одинаковы (несколько папок с кучей мелких...

Bios не видит DVD-привода
Всем привет. Прошу помощи и не кидаться камнями, в компьютерах чайник) У меня ноутбук Toshiba Tecra (A Core Duo T2400 1,830 ггц/1.5 ГБ /320...

Некорректная работа привода DVD-RW
Здравствуйте, подскажите пожалуйста в чем может быть эта проблема и можно ли ее исправить! При загрузке ноутбука привод отображается, но...

Windows 8 не видит DVD привода
Как только установил windows 8 привод нормально отображался в моем компьютере. После перезагрузки перестал отображаться.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru