Не могу нормально установить драйвер для LPT-порта

Тема в разделе "WASM.ELECTRONICS", создана пользователем ubil, 24 окт 2005.

  1. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Какой там нужно код прописать в инф-файле?

    Я прописал тот, который для "Ports Com&LPT", драйвер вроде запустился.. Так я его сначала отключил, а потом только нажал на "включить" - синий экран появился:)Может, это потому, что этот драйвер сильно много ресурсов на себя брать пытается(есть же и драйверы для com портов, которым тоже ресурсы выделены)... Код, который для Принтера не подходит...
     
  2. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Похоже, дело не в инсталейшн коде..

    Повторный эксперимент показал, что проиходит ошибка

    DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS



    А я почти чистую болванку запускал, которую выдает Wizard из W2kdriverbook...
     
  3. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    ну и что, это не значит, что ошибок быть не может, значит в момент выгрузки драйвера какой либо из его обработчиков не был завершен, вот ты и получил свое заслуженное исключение, пытаясь выполнять код в уже несуществующей памяти. Посмотри внимательнее, в обработчиках выставь флаги завершения операций какие нить придумай, и всё должно быть ок .
     
  4. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Странно, почему именно ханг происходит когда я нажимаю "включить" после "выключить"? Было бы более понятно, если бы это происходило сразу после отключения драйвера.

    И еще, судя по тому, что выдавал driver monitor, в результате нажатия "отключить"(в Device Manager), драйверу приходит сообщение xxx_REMOVE_DEVICE, хотя было бы логично, если бы приходило xxx_STOP_DEVICE. При этом удаляется ссылка, отсоединяется прерывание, выгружается драйвер, возможно, даже device object удаляется. Жаль, что у меня сейчас нет под рукой w2kdriverbook, там все эти схемки сообщений нарисованы... Я даже запускал пример из книги - то же самое... Ща я может исходник небольшой пришлю...
     
  5. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
  6. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Я нашел ответ на свой вопрос!

    Итак, когда я нажимаю "отключить", Драйверу приходит сообщение IRP_MN_REMOVE_DEVICE.

    Его правильный обработчик должен быть примерно такой:



    NTSTATUS HandleRemoveDevice(IN PDEVICE_OBJECT pDO,

    IN PIRP pIrp ) {

    PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)

    pDO->DeviceExtension;



    if (pDevExt->state == Started) {

    if (pDevExt->pIntObj)

    IoDisconnectInterrupt( pDevExt->pIntObj );

    pDevExt->pIntObj = NULL;

    }

    UNICODE_STRING pLinkName =

    pDevExt->ustrSymLinkName;

    IoDeleteSymbolicLink(&pLinkName);

    if (pDevExt->pLowerDevice)

    IoDetachDevice(pDevExt->pLowerDevice);

    IoDeleteDevice( pDO );



    pDevExt->state = Removed;

    return PassDownPnP( pDO, pIrp );

    }



    А в коде из исходников к моей любимой книжке нет



    if (pDevExt->pLowerDevice)

    IoDetachDevice(pDevExt->pLowerDevice);



    Вот из-за этого вся проблема и была:)

    Интересно, автор-то о ней когда узнал?:)