Фильтр на \Device\KeyboardClass0 (BSOD)

Тема в разделе "WASM.NT.KERNEL", создана пользователем prus, 3 июл 2008.

  1. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Всем привет.
    Имею фильтр, который аттачу к \Device\KeyboardClass0 (IoAttachDevice(...)).
    Все отлично работает.
    Однако, когда выключаю комп, то выскакивает BSOD DRIVER_POWER_STATE_FAILURE.
    В DriverEntry выставляю флаги своего фильтра так:
    Код (Text):
    1.     g_pDeviceObject->Flags = g_pDeviceObject->Flags | (DO_BUFFERED_IO | DO_POWER_PAGABLE);
    2.     g_pDeviceObject->Flags = g_pDeviceObject->Flags &~ DO_DEVICE_INITIALIZING;
    А в обработчике запросов IRP_MJ_POWER все сделал, как у Уолтера Они написано, т.е. просто отправляю запрос далее по стеку:

    Код (Text):
    1. NTSTATUS DispatchPower(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp) {
    2.  
    3.     PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)pDeviceObject->DeviceExtension;
    4.  
    5.     PoStartNextPowerIrp(pIrp);
    6.     IoSkipCurrentIrpStackLocation(pIrp);    
    7.     return PoCallDriver(pDevExt->pDeviceObject, pIrp);
    8.  
    9. }
    Но почему-то BSOD все равно при выключении. Если же драйвер выгружен, то все хорошо.
    Кто-нить сталкивался? Помогите плиз.

    Заранее благодарен!
     
  2. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    prus, ну давай хоть крэш дамп посмотрим )