Предполагая, что не было сделано простой ошибки, то есть громкость была размонтирована, вы добавили фильтр и перемонтировали, очевидно, что 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
[Крючок при запуске устройства].
Серьезно, это может быть больше работы, чем вы себе представляете. Это просто для удовольствия, или это просто тестовый пример для гораздо более масштабного проекта?
Я полностью смущен. Повсюду я читал, что модель драйвера minifilter - это fututre. Но сделать эту простую задачу нецелесообразно: шифрование всего объема. Некоторые комментарии: используя DebugView, я увидел, что мой фильтр фактически использовался. «Не для драйверов режима ядра» было отключено только предупреждение. Я изучил источник VeraCrypt, но я подумал, что это слишком сложно. Моя задача - создать простой драйвер шифрования всего объема. Шифрование простое, ключевое удерживающее устройство (специальный токен) нуждается в специальной разработке. –
Я упомянул о прикреплении теневой копии. Это было полное угадывание. Как я могу определить из теневой копии, что она подключена к тому3, поэтому я должен расшифровать ее данные? Кстати, почему существует образец swapbuffers, если он бесполезен? –
Вы правы: тестовый пример для более крупного проекта. Задача: некоторый предопределенный объем _whole volume encrypting_. Предопределенное означает, что я могу даже записать в .inf-файл. Encrypt algo будет хорошо известен, но токен ключа-ключа нуждается в специальном программировании. Я видел три способа: 1) начиная с подходящего образца (это были «swapbuffers»); 2) разработать с нуля драйвер KDMF; 3) «парировать» open source sw like VeraCrypt. Приказ означает трудность (я думаю). –