|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||||||
Ошибка перечисления драйверов07.08.2013, 11:13. Показов 1944. Ответов 12
Метки нет (Все метки)
При перечислении драйверов программа на первом же шаге выдает ошибку NO_ITEM_DATA.
0
|
||||||
| 07.08.2013, 11:13 | |
|
Ответы с готовыми решениями:
12
Ошибка C2665, пример перечисления
Ошибка C2665, определение и использование перечисления C++/CLI |
|
Ушел с форума
|
|
| 07.08.2013, 16:36 | |
|
Где вызов SetupDiGetClassDevs ? А SetupDiBuildDriverInfoList ?
Лучше приведите код целиком.
0
|
|
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|||||||
| 07.08.2013, 21:38 [ТС] | |||||||
0
|
|||||||
|
Ушел с форума
|
|||
| 07.08.2013, 22:49 | |||
|
Перед вызовом SetupDiEnumDriverInfo нужно "добавить" драйверы в список
device information set. Для этого нужно вызвать функцию SetupDiBuildDriverInfoList. Добавлено через 5 минут
Вообще, эту функцию нужно вызывать несколько раз, увеличивая Index на каждом шаге, пока не будет возвращена ошибка, а GetLastError даст ERROR_NO_MORE_ITEMS.
И под буфер для SetupDiGetDriverInfoDetail нужно места выделять больше, чем sizeof (SP_DRVINFO_DETAIL_DATA).
1
|
|||
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||||||
| 08.08.2013, 09:51 [ТС] | ||||||
0
|
||||||
|
Ушел с форума
|
|||
| 08.08.2013, 11:14 | |||
|
штатным поведением, или другой код ошибки. На первой итерации передаете buffer = NULL, size = 0. Функция возвращает ошибку с кодом ERROR_INSUFFICIENT_BUFFER, помещая в RequiredSize необходимый размер буфера, в байтах. Далее выделяете буфер и вызываете функцию с новыми значениями buffer и size. Если и на этот раз ошибка - выделяете буфер снова, и так до тех пор, пока функция не вернет код успеха или код ошибки, отличный от ERROR_INSUFFICIENT_BUFFER. На каждой итерации нужно перед вызовом функции устанавливать SP_DRVINFO_DETAIL_DATA.cbSize.
1
|
|||
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||||||||
| 08.08.2013, 11:46 [ТС] | ||||||||
И еще вопрос: как узнать, какой из драйверов используется в данный момент? Например, у видеокарты 2 драйвера: стандартный vga и nvidia. Используется, соответсвенно, nvidia. Как это определить программно? Добавлено через 10 минут Ошибка ERROR_INVALID_USER_BUFFER.
0
|
||||||||
|
Ушел с форума
|
||
| 08.08.2013, 14:43 | ||
|
Вы должны сначала вызвать эту функцию с DriverInfoDetailData = NULL и DriverInfoDetailDataSize = 0. При нормальном развитии событий функция вернет FALSE с кодом ошибки ERROR_INSUFFICIENT_BUFFER, сообщая что буфер слишком мал, и запишет требуемый размер в переменную DWORD, на которую указывает последний параметр (RequiredSize). Далее вы должны выделить буфер указанного (или большего) размера, привести его к указателю на SP_DRVINFO_DETAIL_DATA и вписать туда cbSize = sizeof (SP_DRVINFO_DETAIL_DATA). В cbSize указывается размер структуры, не всего буфера. Буфер может быть неопределенно большого размера. После этого функция вызывается повторно, только теперь в DriverInfoDetailData передается указатель на выделенный буфер, а в DriverInfoDetailDataSize его размер. Почему я говорил о цикле, как о самом надежном средстве ? Да потому, что между первым и вторым вызовом функции существует (пусть и незначительная, но все же) вероятность, что другой процесс поменяет что-то в конфигурации устройства и буфер снова окажется слишком мал.
1
|
||
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||||||
| 09.08.2013, 11:36 [ТС] | ||||||
|
Вот как то так получается:
Я правильно понял идею?
0
|
||||||
|
Ушел с форума
|
|||
| 09.08.2013, 14:06 | |||
|
Но не вижу смысла опять повторять все, что я написал выше.
На работе ДАННОГО кода это не отразится. Но поставьте new вместо malloc и код станет небезопасным. Здесь нужен компиляторный барьер _ReadWriteBarrier (Visual C++).
1
|
|||
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||||||||||||||
| 09.08.2013, 17:16 [ТС] | ||||||||||||||
0
|
||||||||||||||
|
Ушел с форума
|
|||
| 09.08.2013, 21:15 | |||
|
Да, вот сейчас правильно. С одной ремаркой (выделил жирным):
1
|
|||
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
| 12.08.2013, 10:39 [ТС] | |
|
Спасибо за помощь! Буду разбираться дальше!
Осталось еще пару вопросов по драйверам: 1) Как выловить используемый устройством драйвер? Из полученных выше способом нужно как-то выделить драйвер используемый устройством в данный момент. Или для этих вопросов лучше создать отдельные темы? Добавлено через 53 минуты Второй вопрос отпал сам собой: в .inf файле содержится эта информация. Но если это можно с помощью winAPI реализовать, будет гораздо лучше.
0
|
|
| 12.08.2013, 10:39 | |
|
Помогаю со студенческими работами здесь
13
Ошибка при передаче перечисления как параметра Перечисления фиксированного типа ( enum-base ). Ошибка при компиляции OpenGL - после установки драйверов, выдалась ошибка "Драйвер дисплея AMD - Ошибка! 90 мБайт" Ошибка установки драйверов Ошибка установки драйверов модема 3G Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|