Драйвер фильтра файловой системы: создание дефрагментатора

Я только начал работать над драйвером фильтра файловой системы, который отслеживает записи ввода-вывода в любой файл (прослушивание 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 ответ

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

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

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

Другие вопросы по тегам