Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 17

Один драйвер для нескольких однотипных устройств

19.05.2017, 18:44. Показов 1676. Ответов 9

Студворк — интернет-сервис помощи студентам
Как реализовать в драйвере поддержку нескольких однотипных устройств?

Добавлено через 6 минут
Подключенных одновременно, естественно
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.05.2017, 18:44
Ответы с готовыми решениями:

Скрипт для нескольких однотипных элементов
Часть представления: @foreach (var item in Model.Targets) { <p> ...

Bluetooth чат для нескольких устройств
Хочу создать Bluetooth чат на Android. Примеров чатов много, но все для двух устройств. С их работой я разобрался. Но вот примеров чатов с...

Приложение для запуска нескольких устройств на базе Android
Добрый день! Подскажите пжл есть ли готовые решения или необходимо дорабатывать/разрабатывать приложение для одновременной трансляции...

9
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
19.05.2017, 18:45
Цитата Сообщение от did1992 Посмотреть сообщение
Как реализовать в драйвере поддержку нескольких однотипных устройств?
Опиши подробнее суть проблемы.
0
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 17
19.05.2017, 19:12  [ТС]
Есть 4 одинаковых pci-устройства, втыкающиеся одновременно в одну материнку. Как один драйвер может обнаружить все устройства и как их различать между собой? Для одного устройства мой драйвер работает отлично, на несколько устройств его установить пока не получается.

Добавлено через 11 минут
В любой момент я должен получить доступ к расширению любого из устройств. Как это реализовать в AddDevice?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
19.05.2017, 21:41
Когда система обнаруживает новое устройство, ему в конечном счете присваивается
символьная ссылка. Она уникальна в пределах системы. А еще есть device instance path,
который определяет "путь" к устройству и для устройств, даже одинаковых,
всегда различается. Если у тебя 4 устройства подключаются, то AddDevice будет
вызвана 4 раза (для 4 разных Physical Device Object).
1
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 17
20.05.2017, 19:07  [ТС]
Запросы PnP также будут вызываться отдельно для каждого Physical Device Object?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
21.05.2017, 08:55
Да.
Когда подключается несколько устройств, пускай даже они совершенно идентичные,
система для каждого создает свой отдельный стек (device stack) со своим PDO.
Соответственно, AddDevice тоже вызывается для каждого устройства.
И потом все IRP отправляются в эти стеки независимо от других.
1
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 17
22.05.2017, 09:10  [ТС]
При попытке установить драйвер возникает dump памяти. Помогите, пожалуйста, разобраться.

**************************************** ***************************************
* *
* Bugcheck Analysis *
* *
**************************************** ***************************************

Use !analyze -v to get detailed debugging information.

BugCheck 1000007E, {c0000005, 90d6227e, 8df8b778, 8df8b350}

Probably caused by : TmkDrv.sys ( TmkDrv+527e )

Followup: MachineOwner
---------

1: kd> !analyze -v
**************************************** ***************************************
* *
* Bugcheck Analysis *
* *
**************************************** ***************************************

SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M (1000007e)
This is a very common bugcheck. Usually the exception address pinpoints
the driver/function that caused the problem. Always note this address
as well as the link date of the driver/image that contains this address.
Some common problems are exception code 0x80000003. This means a hard
coded breakpoint or assertion was hit, but this system was booted
/NODEBUG. This is not supposed to happen as developers should never have
hardcoded breakpoints in retail code, but ...
If this happens, make sure a debugger gets connected, and the
system is booted /DEBUG. This will let us see why this breakpoint is
happening.
Arguments:
Arg1: c0000005, The exception code that was not handled
Arg2: 90d6227e, The address that the exception occurred at
Arg3: 8df8b778, Exception Record Address
Arg4: 8df8b350, Context Record Address

Debugging Details:
------------------


EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - <Unable to get error code text>

FAULTING_IP:
TmkDrv+527e
90d6227e 890c90 mov dword ptr [eax+edx*4],ecx

EXCEPTION_RECORD: 8df8b778 -- (.exr 0xffffffff8df8b778)
ExceptionAddress: 90d6227e (TmkDrv+0x0000527e)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000001
Parameter[1]: 00000000
Attempt to write to address 00000000

CONTEXT: 8df8b350 -- (.cxr 0xffffffff8df8b350)
eax=00000000 ebx=85dedb58 ecx=870570d0 edx=00000000 esi=85dec6f0 edi=8661b1c0
eip=90d6227e esp=8df8b840 ebp=8df8b870 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
TmkDrv+0x527e:
90d6227e 890c90 mov dword ptr [eax+edx*4],ecx ds:0023:00000000=????????
Resetting default scope

CUSTOMER_CRASH_COUNT: 1

DEFAULT_BUCKET_ID: NULL_DEREFERENCE

PROCESS_NAME: System

CURRENT_IRQL: 0

ERROR_CODE: (NTSTATUS) 0xc0000005 - <Unable to get error code text>

EXCEPTION_PARAMETER1: 00000001

EXCEPTION_PARAMETER2: 00000000

WRITE_ADDRESS: GetPointerFromAddress: unable to read from 82975718
Unable to read MiSystemVaType memory at 829551a0
00000000

FOLLOWUP_IP:
TmkDrv+527e
90d6227e 890c90 mov dword ptr [eax+edx*4],ecx

BUGCHECK_STR: 0x7E

LOCK_ADDRESS: 82972fa0 -- (!locks 82972fa0)

Resource @ nt!PiEngineLock (0x82972fa0) Available

WARNING: SystemResourcesList->Flink chain invalid. Resource may be corrupted, or already deleted.


WARNING: SystemResourcesList->Blink chain invalid. Resource may be corrupted, or already deleted.

1 total locks

PNP_TRIAGE:
Lock address : 0x82972fa0
Thread Count : 0
Thread address: 0x00000000
Thread wait : 0x0

LAST_CONTROL_TRANSFER: from 8281cfc9 to 90d6227e

STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
8df8b870 8281cfc9 8661b1c0 85dedb58 85dec6f0 TmkDrv+0x527e
8df8b88c 829bbe15 85dedb58 90d621c0 00000004 nt!PpvUtilCallAddDevice+0x19
8df8b8d4 829c9886 8661b1c0 90d621c0 00000002 nt!PnpCallAddDevice+0xb9
8df8b9a8 829c8e12 85dec6f0 8df8bbd0 86e34a38 nt!PipCallDriverAddDevice+0x565
8df8bba4 82a98a4e 85dec6f0 86e34a38 8df8bbd0 nt!PipProcessDevNodeTree+0x15d
8df8bbd8 8281fcb7 82970ec0 854d1d48 8294763c nt!PiRestartDevice+0x8a
8df8bc00 82888aab 00000000 00000000 854d1d48 nt!PnpDeviceActionWorker+0x1fb
8df8bc50 82a14f5e 00000001 aff5eb87 00000000 nt!ExpWorkerThread+0x10d
8df8bc90 828bc219 8288899e 00000001 00000000 nt!PspSystemThreadStartup+0x9e
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x19


SYMBOL_STACK_INDEX: 0

SYMBOL_NAME: TmkDrv+527e

FOLLOWUP_NAME: MachineOwner

MODULE_NAME: TmkDrv

IMAGE_NAME: TmkDrv.sys

DEBUG_FLR_IMAGE_TIMESTAMP: 592267ee

STACK_COMMAND: .cxr 0xffffffff8df8b350 ; kb

FAILURE_BUCKET_ID: 0x7E_TmkDrv+527e

BUCKET_ID: 0x7E_TmkDrv+527e

Followup: MachineOwner
---------
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
22.05.2017, 09:13
Для начала подключи отладочные символы (pdb) своего драйвера.
После этого строчка TmkDrv+0x527e (см. STACK_TEXT) должна будет показывать
точное место, где возникло исключение.

"Attempt to write to address 00000000" - где-то на обработке AddDevice у тебя
происходит попытка записи по нулевому адресу.
0
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 17
22.05.2017, 11:02  [ТС]
При попытке подключить pdb файлы выдается сообщение:WARNING: Whitespace at end of path element
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
22.05.2017, 11:17
Перевожу: в строке с указанием пути к символам затесался лишний whitespace-символ (например, пробел).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2017, 11:17
Помогаю со студенческими работами здесь

Создание нескольких однотипных QLabel
Здравствуйте. Создал 10 QLabel как показано ниже. Подскажите пожалуйста как упростить этот код с инициализацией QLabel в цикле....

Обращение к определенному из нескольких однотипных виджетов
Приветствую! Есть двумерный массив с численными данными. Данные каждой строки массива соответствуют определенному параметру. ...

Зависимый список из нескольких однотипных таблиц
Добрый вечер. Пытаюсь создать БД по наработке инструмента, но возникла одна проблема. Как в зависимости от выбранного инструмента (поле...

Создание файла-библиотеки из нескольких однотипных файлов
Всем привет. У меня возникла идея создания вот такой вот программки. Что необходимо? Чтобы из всех файлов в папке, пусть то будет *.wav,...

Как изменить свойства однотипных PictureBox на нескольких формах
Задача следующая: Есть три формы, на этих формах находятся однотипные компоненты к примеру PictureBox с одинаковым Name. На одной из форм...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru