Драйвер фильтра файловой системы: создание дефрагментатора - PullRequest
0 голосов
/ 21 апреля 2011

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

В настоящее время у меня есть такой код:

NTSTATUS FsFilterDispatchWrite(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp)
{
    PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject;
    NTSTATUS result = FsFilterDispatchPassThrough(DeviceObject, Irp);
    //FltFsControlFile(???);
    return result;
}

, в котором мне нужно будет выдать управляющий код ввода / вывода FSCTL_GET_RETRIEVAL_POINTERS.

Тем не менее, я довольно новичок в области разработки драйверов ... FltFsControlFile правильная функция для меня здесь? Если да, то что представляет параметр Instance? А если нет, то как мне это сделать?

1 Ответ

1 голос
/ 27 апреля 2011

Merhad,

FltFsControlFile - это правильный API для использования, но помните, что не стоит выполнять дефрагментацию из драйвера фильтра, дефрагментация по пути ввода-вывода (или из рабочего потока будет очень неэффективной) в режиме ядра очень эффективна.

Windows сделала большинство файлов дефрагментируемыми из пользовательского режима. чек http://technet.microsoft.com/en-us/library/dd405526(VS.85).asp и http://technet.microsoft.com/en-us/library/aa364577(VS.85).aspx

Для мониторинга действий ФС лучше всего использовать журнал USN, что очень эффективно. Не накладывает никакой нагрузки на систему

http://technet.microsoft.com/en-us/library/aa365736(VS.85).aspx

...