Фильтр последовательного порта, проблема с IRP_MJ_CREATE

Тема в разделе "WASM.NT.KERNEL", создана пользователем inviZ, 28 апр 2009.

  1. inviZ

    inviZ Сергей

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    92
    Адрес:
    Хабаровск
    Все, казалось бы, тривиально.

    Код (Text):
    1. NTSTATUS FilterDispatchCreate( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp )
    2. {
    3.     DEVICE_EXTENSION* pDevExt = (DEVICE_EXTENSION*)pDeviceObject->DeviceExtension;
    4.     DbgPrint("FilterDispatchCreate() PDO: 0x%x, PLDO: 0x%x\n", pDevExt->pLowerDevice);
    5.  
    6.     IoSkipCurrentIrpStackLocation(pIrp);   
    7.     return IoCallDriver(pDevExt->pLowerDevice, pIrp);
    8. }
    В общем, виснет где-то в одном из низлежащих драйверов (по-моему, уже как раз в основном драйвере). Виснет, потому что KeWaitForMutexObject. Понятия не имею, где косяк.
     
  2. inviZ

    inviZ Сергей

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    92
    Адрес:
    Хабаровск
    *Правка, здесь, конечно же
    DbgPrint("FilterDispatchCreate() PDO: 0x%x, PLDO: 0x%x\n", pDeviceObject, pDevExt->pLowerDevice);

    Но это к сути вопроса никакого отношения не имеет, есс-но.
     
  3. inviZ

    inviZ Сергей

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    92
    Адрес:
    Хабаровск
    Хмм, отбой, проблема не в этом месте. Дело в том, что при создании объекта-фильтра я открываю порт через ZwCreateFile (потом юзаю ObReferenceObjectByHandle), как и у Руссиновича.

    Если вызывать IoAttachDeviceToDeviceStack до вызова ZwClose, то как раз происходит такой глюк (один раз IRP_MJ_CLOSE нормально обрабатывается, а при следующем закрытии вышеуказанная ситуация).

    Если попробовать вызвать IoAttachDeviceToDeviceStack после ZwClose, то данный IRP_MJ_CLOSE мой фильтр естественно не обрабатывает, дальнейшие IRP все обрабатываются нормально, кроме IRP_MJ_CLOSE - виснет, когда тестовое юзермодное приложение закрывает порт...
     
  4. inviZ

    inviZ Сергей

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    92
    Адрес:
    Хабаровск
    Отбой... Надо было IRP_MJ_POWER обрабатывать должным образом...