Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Ситемный драйвер LPT и прерывания...  (Прочитано 52982 раз)
0 Пользователей и 8 Гостей смотрят эту тему.
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« : 24-06-2003 20:40 » 

Всем привет.

Вот история которая приключилась со мной сегодня:
Послал я запрос системному драйверу IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT, а он мне и говорит: не дам я тебе прерываний--читай, говорит, внимательней DDK.
 Почитал я ДДК и вот что вычитал (см. раздел о IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT):

To facilitate the porting and development of drivers for parallel devices, Parport supports a registry flag that drivers can use to enable and disable the connect interrupt request. The connect interrupt request is enabled by the registry entry value EnableConnectInterruptIoctl under the Plug and Play registry key for the parallel port. The entry value has type REG_DWORD and the default value is 0x0 (disabled). A value not equal to 0x0 enables the connect interrupt request.

Моего знания нерусского языка хватило на то, что бы понять:
 где-то существует переменная EnableConnectInterruptIoctl, которая по дефолту равна нулю. Если же она равна 0, то мой запрос не SUCCESS, а что бы он был SUCCESS надо EnableConnectInterruptIoctl выстовить не в ноль (а хотя бы в единичку).

 Да вот незадача--где же эта EnableConnectInterruptIoctl находиться и как ее изменить? Может подскажет кто? А? Ага

                                                                                   Артем.
P.S. regedit-ом весь реестр уже излазил...
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 24-06-2003 20:44 » 

Мда - счас гляну.
Записан

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #2 : 25-06-2003 13:19 » 

Цитата: Артем
Всем привет.

 Да вот незадача--где же эта EnableConnectInterruptIoctl находиться и как ее изменить? Может подскажет кто? А? Ага

                                                                                   Артем.


Скорее всего вот тут
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP040? \*\ Device Parameters

Знак ? - это какая-то цифра 0-9, *- все подключи.
Ручками создай EnableConnectInterruptIoctl типа DWORD со значением 1.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #3 : 25-06-2003 16:56 » 

Цитата: SlavaI

Скорее всего вот тут
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP040? \*\ Device Parameters
Ручками создай EnableConnectInterruptIoctl типа DWORD со значением 1.


 Создал я EnableConnectInterruptIoctl со значением 1 вот тут
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0400 \4&244b3c6&0\ Device Parameters---не помогло.

 А вот тут
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0400 \4&244b3c6&0
есть какой-то ConfigFlags типа DWORD равный 0,
попробовал его поменять руками--не дали.
Может как раз в нем все и дело?
Пойду попробую поменять его из драйвера...
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 25-06-2003 16:58 » 

Цитата: Артем


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0400 \4&244b3c6&0
...


А ты машинку перегружал после изменений? Это точно-тот ключ.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #5 : 25-06-2003 18:30 » 

Цитата: SlavaI

А ты машинку перегружал после изменений? Это точно-тот ключ.


 Перегружал Жаль  
Счас буду копать из-за чего еще IoCallDriver c IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT-запросом может возвращать STATUS_UNSUCCESSFUL...

P.S.  Только изменения я делал не в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0400 \4&244b3c6&0 (тут мне не дали ничего корежить), а в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0400 \4&244b3c6&0\Device Parameters
хотя сюдя по всему этот ключ в последнем постинге и подразумевался.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #6 : 26-06-2003 18:03 » 

Всем привет.
Я нашел тут программку RegMon.exe которая ртслеживает все обращения к реестру...
И вот с помощью ее я выяснил, что когда я посылаю запрос на прерывания, в реестр лезут по адресам типа:
 HKLM\SYSTEM\CurrentControlSet\Имя_моего_драйвера.sys\...
или
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #7 : 27-06-2003 12:17 » 

Цитата: Артем
HKLM\SYSTEM\CurrentControlSet\Имя_моего_драйвера.sys\...
или


Таких ключей не бывает. И сканирование рестра тебе вряд ли поможет, так как скорее всего драйвер(или система, кто уж там тебе не дает подключится не знаю) настройки читает при загрузке и запоминает- подключать или нет обработчики к прерыванию до следующей перезагрузки.
Помимо RegMon у Русиновича есть еще FileMon и много чего еще.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #8 : 27-06-2003 12:30 » 

Сорри, свое предыдущее сообщение чуток не доправил:
или
HKLM\SYSTEM\CurrentSet001\Имя_моего_драйвера.sys\...

 Этот драйвер я гружу/выгружаю динамически, и, соответственно, после работы программы все подобные ветки уничтожаются. Эти ветки я видел когда не выгружал свой дривер.

Цитата: SlavaI

Таких ключей не бывает.


Это почему? Разве менеджер, который загружует мой драйвер, не прописывает его в реестр?

  У меня другой вопрос: Если эта самая EnableConnectInterruptIoctl  ищется именно под этим ключом, надо ли мне из драйвера прописать ее там?  Или это означает что я не правильно поставил свой драйвер в стек?

Кстати, а как из драйвера писать чего-нибудь в реестр?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #9 : 27-06-2003 12:45 » 

Насчет ключей - есть такой
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\имя драйвера\

Это список всех сервисов и драйверов системы с их настройками, ну или не всех....

А стек расписан вот тут:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\

Например тут HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList\ расписано как и в каком порядке должны грузится сервисы и драйвера.


Эти же ключи
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002

Если мне не изменяет память то ли системное дублирование - толи стандартные настройки, которые использует система для восстановления и проверки первых.

Точнее не скажу.
Записан

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #10 : 27-06-2003 12:56 » 

Цитата: Артем
 У меня другой вопрос: Если эта самая EnableConnectInterruptIoctl  ищется именно под этим ключом, надо ли мне из драйвера прописать ее там?  Или это означает что я не правильно поставил свой драйвер в стек?

Кстати, а как из драйвера писать чего-нибудь в реестр?


Я уже указывал, где должна быть EnableConnectInterruptIoctl, я это не сам придумал, другие этот ключ меняли и подключались к прерываниям.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #11 : 27-06-2003 12:58 » 

Цитата: Гром

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002

Если мне не изменяет память то ли системное дублирование - толи стандартные настройки, которые использует система для восстановления и проверки первых.

Точнее не скажу.


Это Last known good configuration.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #12 : 27-06-2003 13:02 » 

О точно
Записан

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #13 : 27-06-2003 13:03 » 

Я кажется понял, почему ты не можешь подключится к прерываниям- у тебя в настройках порта стоит  Never use an interrupt. Смени настройки на закладке Port Settings у Printer Port в Device Manager
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #14 : 27-06-2003 13:04 » 

Вот тебе ответ одного умного человека:

The EnableConnectInterruptIoctl registry value should be in this key for my
standard LPT1 parallel port:

HLKM\System\CurrentControlSet\Enum\Root\*Pnp0400\PnPBIOS_10\Device Parameters

In addition - and crucially - in the Device Manager Port Settings tab,
either of the "Try not to use an interrupt" or "Use any interrupt assigned
to the port" radio buttons must be selected, ie not the default "Never use
an interrupt".  (The selection is put in the FilterResourceMethod registry
value in the same key.)
In addition the Resources tab must specify an interrupt, which it does not
do by default.

Chris Cant
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #15 : 27-06-2003 13:05 » 

Обрати внимание на то что надо приделать Interrupt к порту на закладке Resources.
Только у него там PnPBIOS подключ- у тебя свой, там имя на каждой машине разное. Не надо делать подключ PnPBIOS.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #16 : 27-06-2003 13:09 » 

Цитата: SlavaI

Я уже указывал, где должна быть EnableConnectInterruptIoctl, я это не сам придумал, другие этот ключ меняли и подключались к прерываниям.

Да я верю шо так и должно быть...
Просто за все время работы моего драйвера RegMon не показала не одного обращения в реестр по тому ключу, что ты написал...
Вот у меня и возникли сомнения в правильности приаттачивания моего дривера.
 Но как это проверить если все функции возвращают STATUSS_SUSCCESS, и даже IoCallDriver с запросом IOCTL_INTERNAL_PARALLEL_ALLOCATE_PORT вернул STATUS_SUCCESS :?:
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #17 : 27-06-2003 13:11 » 

Ты мои предыдущие сообщения прочитал?
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #18 : 27-06-2003 13:17 » 

Цитата: SlavaI
Ты мои предыдущие сообщения прочитал?

Нет. В момент написания-вывешивания своего я их еще не видел.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #19 : 27-06-2003 13:24 » 

Попробуй как там сказано- расскажи, что выйдет.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #20 : 27-06-2003 15:05 » 

Цитата: SlavaI
Попробуй как там сказано- расскажи, что выйдет.


У меня действительно на закладки стояло Never use an interrupt, поставил Use any Interrupt... , на Resourses поставил Interrupt Request   7.
 Перегрузил и.. ничего.  STATUS_UNSUCCESSFUL.

Все. Сегодня я этим заниматься не буду. Пошел на вручение диплома Улыбаюсь  (все-таки торжественное мероприятия, да и отметить надо будет...).

Завтра продолжу копать. О результатах конечно же сообщу. Скорее всего в виде вопросов...
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #21 : 27-06-2003 15:06 » 

Удачи.
Записан

А птичку нашу прошу не обижать!!!
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #22 : 30-06-2003 15:55 » 

Итак, выстовил я все нужные флажки где нужно, прописал ручками где нужно эту самую EnableConnectInterruptIoctl, и как уже писал, ничего.
В том же самом ключе создал еще одну переменную EnableConnectInterruptIoctl, а потом решил создать еще одну. Но вот третью создать мне не дали сказав, что такая переменная уже существует Отлично . Но на создание второй EnableConnectInterruptIoctl система никик не отреагировала Ага
И вот с двумя :idea:  EnableConnectInterruptIoctl в одном месте, МНЕ ПЕРЕСТАЛИ ВОЗВРАЩАТЬ STATUS_UNSUCCESSFUL!!!!!!!!!!!!
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #23 : 30-06-2003 15:56 » new

Павда вертаемая велечина не равна STATUS_SUCCESS Жаль
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #24 : 30-06-2003 16:11 » 

А чему она равна :?:
Записан

А птичку нашу прошу не обижать!!!
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #25 : 30-06-2003 16:44 » 

Цитата: Гром
А чему она равна :?:


НЕТ!!!!
ОНА, ВСЕ-ТАКИ, РАВНА STATUS_SUCCESS  :!:  :!:  :!:

УРРРРРРРРРРРРРРРРРРРРРРРРРРРААААААААААААААЯЯЯЯЯЯЯЯ!!!!
Какой же славный день сегодня!!!!!!
Всем громаднейшее спасибо!!!!!!!!!!!!!!!


P.S.это я не правильно считывал  статус....
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #26 : 30-06-2003 16:46 » 

Но получается, что надо было дважды в одном месте написать
EnableConnectInterruptIoctl = 1 :?:
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #27 : 04-07-2003 14:28 » 

Цитата: SlavaI
Цитата: Артем
Всем привет.

 Да вот незадача--где же эта EnableConnectInterruptIoctl находиться и как ее изменить? Может подскажет кто? А? Ага

                                                                                   Артем.

Скорее всего вот тут
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP040? \*\ Device Parameters

Знак ? - это какая-то цифра 0-9, *- все подключи.
Ручками создай EnableConnectInterruptIoctl типа DWORD со значением 1.


 Я вот тут лазил по разным компутерам, и на одном из них в реестре нет ключа HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI. ВООБЩЕ НЕТ :!:

Подсоединяется ли к прерываниям или нет мой драйвер, проверить не могу, т.к. железяки сейчас на руках нету, но должна появиться ко вторнику. ПРоверю--напишу.

Может кто знает из-за каких настроек Винды подобное может быть?

P.S. Винду проверил, загружено именно Win2000 Ага
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #28 : 04-07-2003 15:09 » 

Может у тебя не ACPI ядро установлено?
Записан

Megabyte be with you!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #29 : 06-07-2003 20:46 » 

Да, точно , на машине ACPI отключена или ее совсем нет.
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines