Запрет копирования Cd

Тема в разделе "Delphi - Система", создана пользователем pinhead, 24 окт 2006.

  1. pinhead

    pinhead Гость

    Как программно отключить возможности копирования данных с CD на винчестер?
    При этом вазможность чтения (CD-диска) оставалась!!!
     
  2. Barmutik

    Barmutik Гость

    Никак!
     
  3. zubr

    zubr Гость

    Как вариант, перехватывать функции копирования.
     
  4. pinhead

    pinhead Гость

    А какое событие передаёт Wind-а при начале копирования ?
    Как оно называется ?
     
  5. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Имхо не вариант. необходимо как то запускать программу которая будем перехватывать, а ауторан не у всех включен. Да и в любом случае обходится такая защита элементарно
     
  6. Barmutik

    Barmutik Гость

    Какую ж функцию копирования .. если человек хочет не запрещать чтение с диска .. но хочет запретить копирование...

    Не сделать это так просто... как некоторые делают .. ставится свой драйвер который запрещает чтение всем кроме своего продукта который умеет общаться с драйвером и у него получается читать информацию... но это тернистый путь...
     
  7. Maniacosaur

    Maniacosaur Гость

    Мне вот интересно, что намутили создатели диска с ПДД. Чес-гря у мне так и не удалось сделать его копию.
     
  8. Barmutik

    Barmutik Гость

    Для: Maniacosaur
    Версию 2005 года алкоголь вроде нормально делал...
     
  9. Maniacosaur

    Maniacosaur Гость

    Во блин. Алкоголиком то и не пробовал:p
     
  10. pinhead

    pinhead Гость

    Вы по теме? :)
    От темы не отходите!
    Может кто работал с DOS прерываниями в Pascal-е! :p
     
  11. Barmutik

    Barmutik Гость

    А что конкретно надо то ? Помнится было дело .. с мышью там и ещё с чем-то ...
     
  12. pinhead

    pinhead Гость

    С мышью то конечно было, а вот было ли дело с CD ???
     
  13. Barmutik

    Barmutik Гость

    Для: pinhead

    Просьба ставьте вопрос более конкретно .. потому как
    совсем не значит что дело идёт о работе с дисковой подсистемой...
     
  14. pinhead

    pinhead Гость

    Для: zubr
    Начал читать про глобальный перехват (Hook): узнал что его делают только в dll, с помощью функции SetWindowsHookEx, у которой 4 параметра, первый из которых определяет тип устанавливаемой ловушки, и принимает значения: WH_CALLWNDPROC, WH_CALLWNDPROCRET, ...
    Можно посмотреть
    Но не пойму какой параметр вводить.
    Пробовал WH_HARDWERE (сообщения от аппаратуры) - но ни чего не получается.
    Пробовал WH_KEYBOARD (сообщения от клавиатуры) - всё работает.(вывожу все номера сообщений посылаемые Windows)
    Так какой параметр должен быть первым?
     
  15. zubr

    zubr Гость

    Для: pinhead
    Смотря для каких целей ты ставишь хук. Если для перехвата API-функций, то лучше использовать WH_CBT или WH_GETMESSAGE.
     
  16. pinhead

    pinhead Гость

    Для: zubr
    Я хочу перехватить момент когда система посылает сообщение "начать копирование"! В частности копия данных с CD-диска.
     
  17. zubr

    zubr Гость

    Для этого можно перехватывать функцию ZwCreateFile. Тут уже на форуме человек интересовался подобной задачей, только ему вроде надо было контролировать каталог, обратись к нему, может он реализовал подобное. Я делал такое, но код передать не могу, ибо он коммерческий.
     
  18. pinhead

    pinhead Гость

    Для: zubr
    В смысле, перехватить Api функцию CreateFile.
    Но я думал что Api функция SetWindowsHookEx перехватывает только числовые значения(сообщения Windows) а не функции!
    Если я не прав расскажите по подробнее что делает функция SetWindowsHookEx. :(
     
  19. zubr

    zubr Гость

    Все таки лучше не CreateFile, а ZwCreateFile - это низкоуровневая функция, работающая в режиме ядра.
    Функция SetWindowsHookEx устанавливает хук - фильтр сообщений в системе. Механизм работы хука, если кратко говорить, состоит в том, что наша dll-ка с обработчиком сообщений подгружается в адрессное пространство процессов, где произошло хуковое событие. В нашем случае, когда юзер будет пытаться скопировать что то с CD, возникнет множество событий, открывание проводника или другого файлового менеджера, в любом случае с помощью хука мы внедримся в адрессное пространство процесса, который будет пытаться скопировать данные. А внедрившись подменяется адрес оригинальной API-функции (в данном случае ZwCreateFile) на нашу, находящуюся в dll-ке. Дело в том, что любое действие с файлами проходит через эту функцию, поэтому проверив путь откуда идет копирование, мы возвращаем или не возвращаем управление оригинальной функции.

    Советую почитать соответствующую литературу. Неплохая книга Джеффри РИХТЕР "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows".
     
  20. sab0tage

    sab0tage Гость

    2pinhead: На самом деле это тупиковый вариант, программы защиты от копирования используют геометрию компактав, так как дорожек у разных производителей отличаются, то замеряется расстояние между секторами и если оно отличается то программа прекращает работу (значит это не оригинальный диск а копия) Такую защиту нужно только ломать. Но как сам понимаешь, это довольно сложный код. Также можно например подковырять имадж, чтобы файлы отображались как 10ти гигабайтные, но это обходится снятием имаджа. Зато достаточно просто защитить от копирования дискету. Просто ставишь пару дырок иголкой, проверяешь на сбойные сектора (это те где дырка), а потом ставишь проверку, если указаные сектора читаются, то завершаешь работу (у Фаронова есть такой пример). А для дисков все гораздо сложнее, используй старфорс, или чужой компанент.
     
Загрузка...

Поделиться этой страницей