Артем
Опытный
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-ом весь реестр уже излазил...
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #1 : 24-06-2003 20:44 » |
|
Мда - счас гляну.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #2 : 25-06-2003 13:19 » |
|
Всем привет. Да вот незадача--где же эта EnableConnectInterruptIoctl находиться и как ее изменить? Может подскажет кто? А? Артем. Скорее всего вот тут HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP040? \*\ Device Parameters Знак ? - это какая-то цифра 0-9, *- все подключи. Ручками создай EnableConnectInterruptIoctl типа DWORD со значением 1.
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #3 : 25-06-2003 16:56 » |
|
Скорее всего вот тут 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
Главный специалист
Offline
|
|
« Ответ #4 : 25-06-2003 16:58 » |
|
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0400 \4&244b3c6&0 ...
А ты машинку перегружал после изменений? Это точно-тот ключ.
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #5 : 25-06-2003 18:30 » |
|
А ты машинку перегружал после изменений? Это точно-тот ключ.
Перегружал Счас буду копать из-за чего еще 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 хотя сюдя по всему этот ключ в последнем постинге и подразумевался.
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #6 : 26-06-2003 18:03 » |
|
Всем привет. Я нашел тут программку RegMon.exe которая ртслеживает все обращения к реестру... И вот с помощью ее я выяснил, что когда я посылаю запрос на прерывания, в реестр лезут по адресам типа: HKLM\SYSTEM\CurrentControlSet\Имя_моего_драйвера.sys\... или
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #7 : 27-06-2003 12:17 » |
|
HKLM\SYSTEM\CurrentControlSet\Имя_моего_драйвера.sys\... или Таких ключей не бывает. И сканирование рестра тебе вряд ли поможет, так как скорее всего драйвер(или система, кто уж там тебе не дает подключится не знаю) настройки читает при загрузке и запоминает- подключать или нет обработчики к прерыванию до следующей перезагрузки. Помимо RegMon у Русиновича есть еще FileMon и много чего еще.
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #8 : 27-06-2003 12:30 » |
|
Сорри, свое предыдущее сообщение чуток не доправил: или HKLM\SYSTEM\CurrentSet001\Имя_моего_драйвера.sys\... Этот драйвер я гружу/выгружаю динамически, и, соответственно, после работы программы все подобные ветки уничтожаются. Эти ветки я видел когда не выгружал свой дривер. Таких ключей не бывает.
Это почему? Разве менеджер, который загружует мой драйвер, не прописывает его в реестр? У меня другой вопрос: Если эта самая EnableConnectInterruptIoctl ищется именно под этим ключом, надо ли мне из драйвера прописать ее там? Или это означает что я не правильно поставил свой драйвер в стек? Кстати, а как из драйвера писать чего-нибудь в реестр?
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
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
Главный специалист
Offline
|
|
« Ответ #10 : 27-06-2003 12:56 » |
|
У меня другой вопрос: Если эта самая EnableConnectInterruptIoctl ищется именно под этим ключом, надо ли мне из драйвера прописать ее там? Или это означает что я не правильно поставил свой драйвер в стек?
Кстати, а как из драйвера писать чего-нибудь в реестр? Я уже указывал, где должна быть EnableConnectInterruptIoctl, я это не сам придумал, другие этот ключ меняли и подключались к прерываниям.
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #11 : 27-06-2003 12:58 » |
|
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002
Если мне не изменяет память то ли системное дублирование - толи стандартные настройки, которые использует система для восстановления и проверки первых.
Точнее не скажу.
Это Last known good configuration.
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #12 : 27-06-2003 13:02 » |
|
О точно
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #13 : 27-06-2003 13:03 » |
|
Я кажется понял, почему ты не можешь подключится к прерываниям- у тебя в настройках порта стоит Never use an interrupt. Смени настройки на закладке Port Settings у Printer Port в Device Manager
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
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
Главный специалист
Offline
|
|
« Ответ #15 : 27-06-2003 13:05 » |
|
Обрати внимание на то что надо приделать Interrupt к порту на закладке Resources. Только у него там PnPBIOS подключ- у тебя свой, там имя на каждой машине разное. Не надо делать подключ PnPBIOS.
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #16 : 27-06-2003 13:09 » |
|
Я уже указывал, где должна быть EnableConnectInterruptIoctl, я это не сам придумал, другие этот ключ меняли и подключались к прерываниям.
Да я верю шо так и должно быть... Просто за все время работы моего драйвера RegMon не показала не одного обращения в реестр по тому ключу, что ты написал... Вот у меня и возникли сомнения в правильности приаттачивания моего дривера. Но как это проверить если все функции возвращают STATUSS_SUSCCESS, и даже IoCallDriver с запросом IOCTL_INTERNAL_PARALLEL_ALLOCATE_PORT вернул STATUS_SUCCESS :?:
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #17 : 27-06-2003 13:11 » |
|
Ты мои предыдущие сообщения прочитал?
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #18 : 27-06-2003 13:17 » |
|
Ты мои предыдущие сообщения прочитал? Нет. В момент написания-вывешивания своего я их еще не видел.
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #19 : 27-06-2003 13:24 » |
|
Попробуй как там сказано- расскажи, что выйдет.
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #20 : 27-06-2003 15:05 » |
|
Попробуй как там сказано- расскажи, что выйдет. У меня действительно на закладки стояло Never use an interrupt, поставил Use any Interrupt... , на Resourses поставил Interrupt Request 7. Перегрузил и.. ничего. STATUS_UNSUCCESSFUL. Все. Сегодня я этим заниматься не буду. Пошел на вручение диплома (все-таки торжественное мероприятия, да и отметить надо будет...). Завтра продолжу копать. О результатах конечно же сообщу. Скорее всего в виде вопросов...
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #21 : 27-06-2003 15:06 » |
|
Удачи.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #22 : 30-06-2003 15:55 » |
|
Итак, выстовил я все нужные флажки где нужно, прописал ручками где нужно эту самую EnableConnectInterruptIoctl, и как уже писал, ничего. В том же самом ключе создал еще одну переменную EnableConnectInterruptIoctl, а потом решил создать еще одну. Но вот третью создать мне не дали сказав, что такая переменная уже существует . Но на создание второй EnableConnectInterruptIoctl система никик не отреагировала И вот с двумя :idea: EnableConnectInterruptIoctl в одном месте, МНЕ ПЕРЕСТАЛИ ВОЗВРАЩАТЬ STATUS_UNSUCCESSFUL!!!!!!!!!!!!
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #23 : 30-06-2003 15:56 » |
|
Павда вертаемая велечина не равна STATUS_SUCCESS
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #24 : 30-06-2003 16:11 » |
|
А чему она равна :?:
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #25 : 30-06-2003 16:44 » |
|
А чему она равна :?: НЕТ!!!! ОНА, ВСЕ-ТАКИ, РАВНА STATUS_SUCCESS :!: :!: :!: УРРРРРРРРРРРРРРРРРРРРРРРРРРРААААААААААААААЯЯЯЯЯЯЯЯ!!!! Какой же славный день сегодня!!!!!! Всем громаднейшее спасибо!!!!!!!!!!!!!!! P.S.это я не правильно считывал статус....
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #26 : 30-06-2003 16:46 » |
|
Но получается, что надо было дважды в одном месте написать EnableConnectInterruptIoctl = 1 :?:
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #27 : 04-07-2003 14:28 » |
|
Всем привет. Да вот незадача--где же эта 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
|
|
« Ответ #28 : 04-07-2003 15:09 » |
|
Может у тебя не ACPI ядро установлено?
|
|
|
Записан
|
Megabyte be with you!
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #29 : 06-07-2003 20:46 » |
|
Да, точно , на машине ACPI отключена или ее совсем нет.
|
|
|
Записан
|
|
|
|
|