Драйвер-фильтр (IRP_MJ_WRITE)

Тема в разделе "WASM.NT.KERNEL", создана пользователем visualr, 29 апр 2007.

  1. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    Пишется драйвер-фильтр. Каким образом сделать, чтобы запросы IRP_MJ_WRITE не проходили дальше, а уничтожались. (при IoCompleteRequest получается BSOD)
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    точно не знаю, попробуй сделать IoCompleteRequest со статусом типа STATUS_UNSUCCESSFUL
    а че за бсод? ты уверен, что со стеком не перемудрил?
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    я всегда так и делал.. вроде, работало
     
  4. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    было так
    ...
    DriverObject->MajorFunction[IRP_MJ_WRITE] = FilterWrite;
    ...

    NTSTATUS
    FilterWrite (
    __in PDEVICE_OBJECT DeviceObject,
    __in PIRP Irp
    )
    {
    IoCompleteRequest(Irp,IO_NO_INCREMENT);
    if (DeviceObject->Flags); /* убрать error о том, что не используется DeviceObject */

    return STATUS_INSUFFICIENT_RESOURCES;
    }

    и все это заканчивалось "синим экраном смерти"

    или нужно использовать IoGetCurrentIrpStackLocation?
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    а типа если:
    Код (Text):
    1. IoCopyCurrentIrpStackLocationToNext(Irp);
    2. return IoCallDriver(pAttachedDeviceObject, Irp);
    все проходит нормально?

    ps: что такое if (DeviceObject->Flags); /* убрать error о том, что не используется DeviceObject */?
     
  6. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    просто пропуск irp?
    пошел пробовать


    если не использовать DeviceObject, драйвер не соберется
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    чем это ты таким компилишь?? может, у тебя стоит настройка типа treat warnings as errors?
     
  8. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    WDK 6000 "из коробки" - в настройках не копался
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    попробуй так

    IoSkipCurrentIrpStackLocation( Irp );
    Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
    IoCompleteRequest( Irp, 0 );

    зы. какой бсод то? код и данные анализа давай
     
  10. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    как можно отключит перезагрузку после bsod?

    если скажете - скриншоты смогу сделать =)
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    WINDOWS\Minidump - создаются после каждого bsod'а (если стоят соответствующие настройки), открываются windbg

    отключить: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\AutoReboot
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Great
    а на фиг IoSkipCurrentIrpStackLocation?
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    я плохо помню че там надо сделать =\ может и не надо текущее положение стека пропускать
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Лучше открыть свойства системы, вкладка Advanced, Startup and Recovery.
    В группе System failure снять флажок Automatic restart, в группе Write debugging information сделать Kernel memory dump.

    Потом после ребута и после бсода открыть в WinDbg на анализ дамп памяти ядра и скинуть сюда багчек-код и вывод !analyze -v
     
  15. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    Код (Text):
    1. NTSTATUS
    2. SpyWrite (
    3.     __in PDEVICE_OBJECT DeviceObject,
    4.     __in PIRP Irp
    5.     )
    6. {
    7.     PAGED_CODE();
    8.     Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
    9.     IoCompleteRequest( Irp, 0 );
    10.     if (DeviceObject->Flags);
    11.     return STATUS_UNSUCCESSFUL;
    12. }
    при создании файлов, директорий никаких варнингов, все создается, при редактировании файла:

    [​IMG]

    после перезагрузки системы все директории пропадают
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ф5 нажимал в эксплорере? он имеет противное свойство, когда создаешь или удаляешь файл, ему плевать создался или удалился он реально, он все равно изменит отображаемый список в каталоге. Так что, может получиться, что каталог не создался, а строчку в списочек он на экране добавил. Чтобы реально посмотреть, есть ли файл, надо обновить вид через ф5.
     
  17. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    в виртуальной машине 2 диска, при включении фильтра в стек одного, на другой тоже нельзя записывать, какой-то странный косяк (при сохранении файла таже ошибка, что на скрине из предыдущего сообщения), удаление фильтра эту проблему не решает
     
  18. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    все остается, удаляется только после перезагрузки
     
  19. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    C:\WINDDK\6000\src\filesys\filter\filespy - играюсь с этим фильтром

    Код (Text):
    1. FileSpy is a tool that aids Installable File System (IFS) filter driver writers in understanding the I/O that is occurring in the system.  It allows the user to monitor both local and network drives to see what types of IRP and Fast I/O operation are executing in the system.
     
  20. visualr

    visualr New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2005
    Сообщения:
    33
    если тот же код в filterRead

    [​IMG]