FastIoDetachDevice, в какой момент возникает эта FASTIO

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 13 окт 2005.

  1. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Всем доброго!

    FastIoDetachDevice, что является возбудителем для этой функции? Попытка отключить девайс, удаление объекта содержащего этот девайс или IRP_MJ_DEVICE_CHANGE?

    Заранее всем спасибо!!!
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Цитата из DDK "Using Fast I/O":



    This last routine is a most curious one. The ntddk.h file does provide a hint as to the purpose of this call—namely, it is called when a device object is about to be deleted. We found this call is extremely useful when developing filter drivers for file systems, since the device objects of removable file systems are destroyed whenever the underlying media is changed. Sometimes this occurs immediately, but it can occur at almost any time after the media has been removed, depending upon what portions of the system are still caching information.



    In our experience, a filter driver for removable media file systems must be able to handle this call as the system will halt otherwise.



    "сатьи или еще какой-либо иной материал" ищи на osr.com и osronline.com ;)
     
  3. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, читал я это все.

    Написал письмо Зезуле, он ответл так: "Don't search the device chain, remove the device

    given as parameter to FastIoDetachDevice.



    BTW, if you look at the original FileSpy code,

    you must see this there
    "

    Этот код я наверное уже буду в скорм времени помнить на изусть, только толку мало, ну не вижу я там явного unmounted device :dntknw:(((.
     
  4. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Я конечно же могу обойтись без этой опции, только вот постоянный перезапуск системы на этапе тестирования кода, меня уже нервирует.
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    К сожалению, я не спец в фс. Копать некогда. На твоём месте, я бы пошёл путем дизассемблирования драйвера Зезулы. Судя по размеру, нового кода там кило 6-7. Учитывая то, что у тебя есть сорцы прототипа, работы совсем немного.



    Касательно причины вызова FastIoDetachDevice. По исходникам есть три пути.


    Код (Text):
    1. IoDetachDevice -> IopCompleteUnloadOrDelete ->
    2.         (fastIoDispatch->FastIoDetachDevice)( attachedDevice, DeviceObject )
    3.  
    4. IoDeleteDevice -> IopCompleteUnloadOrDelete ->
    5.         (fastIoDispatch->FastIoDetachDevice)( attachedDevice, DeviceObject )
    6.  
    7. IopDecrementDeviceObjectRef -> IopCompleteUnloadOrDelete ->
    8.         (fastIoDispatch->FastIoDetachDevice)( attachedDevice, DeviceObject )
    Скорее всего, в твоём случае это IoDeleteDevice. Она много откуда зовётся. Если есть исходники винды, смотри.



    На osronline.com есть три очень толковых мыльных конфы по дровам, по фс-дровам и по дебагу. Попробуй воспользоваться поиском (выбери NTFSD):



    http://www.osronline.com/page.cfm?name=search



    ЗЫ: Дизасм по-любому решит все проблемы. Вливай в иду и вперёд...
     
  6. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, ты не поверишь, я тут значит голову ломаю, пишу жуткие письма, потому как мой английский ужасен, а тут...

    А тут выясняется, что у Зезулы этот драйвер вовсе не выгружаемый, он просто весит и ждет когда же к ниму вновь обратяться. Вообщем доверяй, но все же проверяй, иначе просто и в психушку попасть можно.
     
  7. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F и еще, прочитанный мной материал на всевозможных форумах, навел меня на мысль.

    Алгоритм отключения устройства, из User Mode:

    1) посылаю минор FSCTL_LOCK_VOLUME;

    2) посылаю минор FSCTL_DISMOUNT_VOLUME;

    3) посылаю минор FSCTL_UNLOCK_VOLUME.

    Вопрос первый:

    Что именно деласть в пунктах 1 и 3?



    Алгоритм пункт 2, из Kernal mode:

    в диспечере IRP на FSCTL_DISMOUNT_VOLUME выполняю следующие действия:

    1) инициализирую ExInitializeWorkItem со своей функцией обработчиком №1

    2) заполняю 3-й параметр инициализированной переменной из 1 пункта

    3) создаю IoSetCompletionRoutine со своей функцией обработчиком №2

    4) IoDetachDevice

    5) IoCallDriver

    жду вызова функции №2, выполняю следующее:

    if (KeGetCurrentIrql() > PASSIVE_LEVEL) {



    //

    // We are not at passive level, but we need to be to do our work,

    // so queue off to the worker thread.



    ExQueueWorkItem( &(((PSPY_COMPLETION_CONTEXT_W2K)Context)->WorkItem),

    DelayedWorkQueue );



    } else {



    PSPY_COMPLETION_CONTEXT_W2K completionContext = Context;



    //

    // We are already at passive level, so we will just call our

    // worker routine directly.

    //



    (completionContext->WorkItem.WorkerRoutine)(completionContext->WorkIte m.Parameter);

    }



    жду вызова функция №1 и вызываю в ней IoDeleteDevice.



    правльны ли мои рассуждения и вообще как технически правильно это делать?





    Как ты думешь, это не полнейшая бредятина?

    Four-F, извни что обращаюсь непосрественно к тебе, но так получается , что кроме тебя эта тема мало кому вообще интересна.
     
  8. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Это уже слишком глубоко в фс. Я - пас.
     
  9. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, kak ne preskorbno no moi rasujdeniya polneishaya bredyatina :dntknw:. Potomukak etot algoritm primenim tol'ko v tom sluchae, esli ya obladayu exlusivnim dostupom k logicheskomu disku, takovimi mogut bit' fleshmemory ili disk "A". Jal' chto malo tut uchastnikov kotorii razberayutsya v dannom voprose.

    I tak, o dinamicheskom otklyuchenii poka mojno zabit' :), i tak mnogo vremeni bilo potracheno v pustuyu, nado dvigat'sya dal'she.

    Four-F, spasibo za soveti, ya nadeyus' u tebya eshe ostalos' terpenya dlya moih glupih voprosov.
     
  10. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Конечно помогу, чем смогу.