2015-11-02 3 views
0

Я реализовал мини-драйвер с использованием примера swapbuffers. Я сделал два изменения:swapbuffers minifilter problems

  • прикрепляются только к \ Device \ HarddiskVolume3
  • шифрования XORing с 0xFF

Шифрование работает, но volume3 (что в моей системе E :) не работает. E: не распознается файловая система. chkdsk E: результаты всех загрузочных секторов поврежденного сообщения.

После проведения исследований (с использованием procmon.exe): chkdsk.exe создает теневую копию тома. Если драйвер прикрепляет теневую копию, то chkdsk E: в порядке, файловая система идеальна. Но E: остается непризнанным.

Любая идея, что я должен изменить?

ответ

0

Предполагая, что не было сделано простой ошибки, то есть громкость была размонтирована, вы добавили фильтр и перемонтировали, очевидно, что mount/filesystem не использует ваш фильтр.

Я заметил комментарий в примере кода о «не для драйверов режима ядра».

Что вы хотите исследовать - это «шифрование всего диска». Поиск Google И поиск по: windows whole disk encryption поможет.

В частности, TrueCrypt делает то, что вы хотите. Поскольку он является открытым исходным кодом и доступен на sourceforge.net, вы можете загрузить источник и выяснить, как подключить ваш материал, узнав, как это делает TrueCrypt.

Только одна проблема: TrueCrypt имеет пробелы в безопасности, поэтому на странице sourceforge.net теперь только информация о миграции до BitLocker. Но он все еще существует и создаются другие страницы, где вы можете его получить. Следует отметить, что вилка TrueCrypt является VeraCrypt

Только одна из страниц поиска является: http://www.howtogeek.com/203708/3-alternatives-to-the-now-defunct-truecrypt-for-your-encryption-needs/

UPDATE

Примечание: После того, как я написал это обновление, я понял, что там может быть надежда. .. Итак, продолжайте читать.

MiniFilter появляется быть для файловых систем но не лежащие в основе хранения. Это может работы, вам просто нужно найти крючок нижнего уровня. Что относительно стека фильтров altitute? Вот ссылка: https://msdn.microsoft.com/en-us/library/windows/hardware/ff540402%28v=vs.85%29.aspx Она также имеет документацию по fltmc и расширение !fltkd отладчика

В этом [короткий] блоге: http://blogs.msdn.com/b/erick/archive/2006/03/27/562257.aspx он говорит:

Менеджер Фильтр должен был создать простой механизм для водителей Действия файловой системы фильтра: драйверы файловой системы miniifilter. Драйвер файловой системы minifilter расположен между диспетчером ввода-вывода и базовой файловой системой, а не между файловой системой и драйверами хранилища, такими как драйверы фильтра устаревшей файловой системы.

Выяснить, что это значит. Является ли точка крюка между FS и диспетчером ввода/вывода (что я не знаю) достаточным? Или вам нужно подключиться между файловой системой и драйверами хранилища [подразумевая старый фильтр]?

Мое подозрение, что фильтр «устаревшего» драйвера может быть тем, что вам нужно, если у минифильтра нет того, что может сделать то же самое.

Поскольку ваши крючки должны работать на , не монтируется, так что chkdsk будет работать, это может означать устаревший фильтр. С другой стороны, вы упомянули, что вы смогли зацепить теневую копию, и это сработало для chkdsk. Это означает, что у minifilter есть правильные вещи.

Вот ссылка, которая, по моему мнению, немного информативна: http://blogs.msdn.com/b/ntdebugging/archive/2013/03/25/understanding-file-system-minifilter-and-legacy-filter-load-order.aspx Он имеет прямой пример относительно фильтра шифрования altitute. Вы только что, возможно, потребуется больше очков крюка и снизить высоту вашего MiniFilter

UPDATE # 2

SwapBuffers просто перехватывает несколько вещей: IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_DIRECTORY_CONTROL. Это связанные с файлами ввода-вывода, а не связанные с вводом-выводом устройства. Пример хорош, просто не обязательно для ваших целей.

Ссылка, которую я дал вам на fltmc, является одной страницей всей ссылки MS для фильтров. Если вы обманываете это, вы найдете более интересные вещи, такие как IoGetDeviceAttachmentBaseRef, IoGetDiskDeviceObject. Вам нужно найти объект для устройства и отфильтровать его операции ввода-вывода.

Я думаю, что вам нужно будет прочитать справочный материал в дополнение к примерам. Как я уже говорил ранее, ваш фильтр должен перехватывать больше или разные вещи.

В источнике VeraCrypt подкаталог Driver является примером того, что вам может понадобиться. В DriveFilter.c он использует IRP_MJ_READ, но также использует IRP_MN_START_DEVICE [Крючок при запуске устройства].

Серьезно, это может быть больше работы, чем вы себе представляете. Это просто для удовольствия, или это просто тестовый пример для гораздо более масштабного проекта?

+0

Я полностью смущен. Повсюду я читал, что модель драйвера minifilter - это fututre. Но сделать эту простую задачу нецелесообразно: шифрование всего объема. Некоторые комментарии: используя DebugView, я увидел, что мой фильтр фактически использовался. «Не для драйверов режима ядра» было отключено только предупреждение. Я изучил источник VeraCrypt, но я подумал, что это слишком сложно. Моя задача - создать простой драйвер шифрования всего объема. Шифрование простое, ключевое удерживающее устройство (специальный токен) нуждается в специальной разработке. –

+0

Я упомянул о прикреплении теневой копии. Это было полное угадывание. Как я могу определить из теневой копии, что она подключена к тому3, поэтому я должен расшифровать ее данные? Кстати, почему существует образец swapbuffers, если он бесполезен? –

+0

Вы правы: тестовый пример для более крупного проекта. Задача: некоторый предопределенный объем _whole volume encrypting_. Предопределенное означает, что я могу даже записать в .inf-файл. Encrypt algo будет хорошо известен, но токен ключа-ключа нуждается в специальном программировании. Я видел три способа: 1) начиная с подходящего образца (это были «swapbuffers»); 2) разработать с нуля драйвер KDMF; 3) «парировать» open source sw like VeraCrypt. Приказ означает трудность (я думаю). –

Смежные вопросы