|
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 17
|
|
Один драйвер для нескольких однотипных устройств19.05.2017, 18:44. Показов 1676. Ответов 9
Как реализовать в драйвере поддержку нескольких однотипных устройств?
Добавлено через 6 минут Подключенных одновременно, естественно
0
|
|
| 19.05.2017, 18:44 | |
|
Ответы с готовыми решениями:
9
Bluetooth чат для нескольких устройств Приложение для запуска нескольких устройств на базе Android |
|
Ушел с форума
|
|
| 19.05.2017, 18:45 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 17
|
|
| 19.05.2017, 19:12 [ТС] | |
|
Есть 4 одинаковых pci-устройства, втыкающиеся одновременно в одну материнку. Как один драйвер может обнаружить все устройства и как их различать между собой? Для одного устройства мой драйвер работает отлично, на несколько устройств его установить пока не получается.
Добавлено через 11 минут В любой момент я должен получить доступ к расширению любого из устройств. Как это реализовать в AddDevice?
0
|
|
|
Ушел с форума
|
|
| 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
|
|
|
Ушел с форума
|
|
| 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
|
|
|
Ушел с форума
|
|
| 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
|
|
|
Ушел с форума
|
|
| 22.05.2017, 11:17 | |
|
Перевожу: в строке с указанием пути к символам затесался лишний whitespace-символ (например, пробел).
0
|
|
| 22.05.2017, 11:17 | |
|
Помогаю со студенческими работами здесь
10
Создание нескольких однотипных QLabel Обращение к определенному из нескольких однотипных виджетов Зависимый список из нескольких однотипных таблиц Создание файла-библиотеки из нескольких однотипных файлов Как изменить свойства однотипных PictureBox на нескольких формах Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
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
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|