Как обойти фильтры файловой системы?
От: belp  
Дата: 19.04.14 23:05
Оценка:
Добрый день,

суть проблемы: мы разрабатываем устройство работающее под управлением windows embedded 8.
В системе будет использоваться HORM.
Horm это фича системы, суть которой что когда она включена, то все изменения файлов сохраняются в оперативной памяти, записи на диск не происходит. После перезагрузки системы все изменения теряются.
Подробнее об HORM — http://msdn.microsoft.com/en-us/library/jj980177(v=winembedded.81).aspx

(Мы вынуждены это использовать, т.к. это одно из требований.)

Проблема в том, что нам нужно чтобы определённые файлы всё-же писались на диск, к сожалению нормальным образом это сделать невозможно.

Мы поисследовали принцип работы HORM'а, работает он примерно так: запросы к файловой системе проходят через минифильтр uwfs.sys, изменения файлов редиректятся в драйвер uwfvol.sys, который сохраняет изменения в оверлее uwfswap.sys

Возникла идея написать свой драйвер фильтр, который бы смотрел на имя файла, и редиректил io реквесты напрямую в драйвер ntfs.
За основу взял пример драйвера legacy filter http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial

Драйвер располагается на вершине стека драйверов, и будет первым получать IRP.

В примере IRP пускаются дальше вниз по стеку:

/////////////////////////////////////////////////////////////////
// PassThrough IRP Handler

NTSTATUS FsFilterDispatchPassThrough(
__in PDEVICE_OBJECT DeviceObject,
__in PIRP Irp
)
{
PFSFILTER_DEVICE_EXTENSION pDevExt =
(PFSFILTER_DEVICE_EXTENSION)DeviceObject->DeviceExtension;

IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(pDevExt->AttachedToDeviceObject, Irp);
}

Чтобы получить указатель на ntfs драйвер использую IoGetDeviceAttachmentBaseRef:

PDEVICE_OBJECT lowestDriver = IoGetDeviceAttachmentBaseRef(DeviceObject);

Как этому драйверу корректно послать полученный Irp? (как правильно настроить stack location и тд).

Спасибо.

p.s. Может кто сталкивался с подобной задачей (обойти фильтр файловой системы), и есть готовые решения?
windows ninifilter uwf horm
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.