Driver Verifier

Тема в разделе "WASM.WIN32", создана пользователем kelz, 11 май 2006.

  1. kelz

    kelz New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2006
    Сообщения:
    13
    Адрес:
    Армавир
    Есть драйвер. Включаю проверку Verifier'ом и при старте драйвера наблюдаю BSOD:

    WDM Driver Error 0x21f. Адрес падения указывает на первую иструкцию DriverEntry.

    Вот код:
    Код (Text):
    1. #pragma alloc_text(INIT,DriverEntry)
    2. NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriver,
    3.                      IN PUNICODE_STRING pRegPath)
    4. {
    5.     #if DBG
    6.         DbgPrint("DriverEntry routine");
    7.     #endif
    8.  
    9.     pDriver->MajorFunction[IRP_MJ_CREATE] = USBSrv_CreateClose;
    10.     pDriver->MajorFunction[IRP_MJ_CLOSE] = USBSrv_CreateClose;
    11.     pDriver->MajorFunction[IRP_MJ_READ] = USBSrv_Read;
    12.     pDriver->MajorFunction[IRP_MJ_WRITE] = USBSrv_Write;
    13.     pDriver->MajorFunction[IRP_MJ_PNP] = USBSrv_PnP;
    14.     pDriver->MajorFunction[IRP_MJ_POWER] = USBSrv_Power;
    15.     pDriver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBSrv_IoControl;
    16.     pDriver->MajorFunction[IRP_MJ_SHUTDOWN] = USBSrv_Shutdown;
    17.     pDriver->DriverExtension->AddDevice = USBSrv_AddDevice;
    18.     pDriver->DriverUnload = USBSrv_Unload;
    19.  
    20. return STATUS_SUCCESS;
    21. }
    22.  


    Что не так?
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    kelz

    Есть отдельная тема про "анализ крэшей", зачем еще разводить? Прикрепи туды дровину и минидамп,если можешь сурец
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    DDK: "0x21F - A driver has not filled out a dispatch routine for a required IRP major function. (IRP specified.)"



    Точно не знаю, но предположу, что раз драйвер имеет дело с USB, должен уметь ловить IRP_MJ_INTERNAL_DEVICE_CONTROL.
     
  4. kelz

    kelz New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2006
    Сообщения:
    13
    Адрес:
    Армавир
    Поставил заглушку на IRP_MJ_INTERNAL_DEVICE_CONTROL. Не помогло. Без верифайера работает нормально, но с ним ни в какую. Поставил DDK 2k3, перекомпилировал - ничего, да и драйвер у меня самый верхний в стеке, поэтому internal device control ему ловить не придется.
     
  5. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    посмотри minidump в windbg

    мне кажется не хватает обработчика

    IRP_MJ_SYSTEM_CONTROL
     
  6. kelz

    kelz New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2006
    Сообщения:
    13
    Адрес:
    Армавир
    Кто знает, по какому смещению в IRP пакете лежит его IRP_MJ_xxx? Сейчас ковыряю дамп памяти ядра. Должен же один из параметров BSODа указывать на "неправильный" IRP? Где взять его major function?



    2 Kola Сейчас проверю
     
  7. kelz

    kelz New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2006
    Сообщения:
    13
    Адрес:
    Армавир
    Всем большое спасибо. Проблема была именно в IRP_MJ_SYSTEM_CONTROL. Этот пакет нужно было передать вниз по стеку. Странно, сколько примеров драйверов под USB смотрел, нигде про этот диспетчер даже не упоминалось. Может я первый кто вообще верифайером воспользовался? :)
     
  8. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Если у тебя фильтр, то ты по-любому должен передавать вниз весь спектр IRP. Ну, конечно, если не хочешь что-то блокировать. Т.е. во всех слотах MajorFunction должен быть обработчик, который просто форвардит IRP вниз. Для тех, которые ты фильтруешь - отдельные обработчики.
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    kelz

    /offtop:

    УРА! Рад за тебя! А если у тебя код юзает и регистриуется через ГУИД можешь поделиться, а то в примерах ДДК, пока слабо понял че-либо, да и есть тут один товарищ, отвлекалку дал, шо ашь я сломя за дебуггинг засел :)))