Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование драйверов

Войти
Регистрация
Восстановить пароль
 
locm
2024 / 781 / 75
Регистрация: 28.10.2011
Сообщений: 2,318
Записей в блоге: 2
#1

Программная установка драйвера - Программирование драйверов

16.02.2016, 23:00. Просмотров 624. Ответов 6
Метки нет (Все метки)

Необходимо программно установить драйвер используя inf файл, т. е. произвести аналогичные действия какие делает система когда ей вручную задают путь к папке с драйвером. Поиском нашел статью но не уверен что это именно то что нужно. Если же приведенный в статье пример действительно предназначен для установки драйвера исходя из информации в inf файле, тогда подскажите что должно быть в первом аргументе командной строки программы (device instance Id)?

Добавлено через 4 часа 26 минут
Запустил код из статьи. Функция SetupDiCallClassInstaller() выполнилась с ошибкой -536870360 (0xE0000228).
В сети нет ее описания.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2016, 23:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программная установка драйвера (Программирование драйверов):

Установка minifilter драйвера - Программирование драйверов
Добрый день! Устанавливаю minifilter драйвера из приложения с помощью команды InstallHinfSection(...). Операционная система Windows XP...

Установка Windows7 на ноутбук Expert Line, установка драйвера для жесткого диска - Windows 7
Здравствуйте. Сейчас устанавливаю Win7 home basic, на ноутбук производителя Expert Line модели ELU0914 с хардом hitachi hts5450a7e380. При...

Программная установка разрешений NTFS - C#
Подскажите, плз, как программно установить разрешения NTFS на файл/папку для пользователя/группы...

Программная установка картинки в ячейки DataGridView - C++/CLI WinForms
При установке типа столбца в DataGridViewImageColumn и получаю следующую ошибку:

Программная установка флажка в CheckBoxColumn в DataGridView - C#
Как программно установить галочку в столбце типа CheckBoxColumn в DataGridView? Делаю так, но результат нет.Спасибо string...

Программная установка расширений для браузеров - C++
Доброго времени суток! Заранее скажу, что перед тем как спрашивать на форуме, устроил dos атаку на поисковики:) У меня возникла...

6
Убежденный
Системный программист
Эксперт С++
15618 / 7127 / 1128
Регистрация: 02.05.2013
Сообщений: 11,567
Записей в блоге: 1
Завершенные тесты: 1
16.02.2016, 23:36 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Можно использовать либо UpdateDriverForPlugAndPlayDevices (установка драйвера
через INF-файл), либо SetupCopyOEMInf (предустановка INF в систему).
Обе функции в плане конечного результата практически идентичны.

Для UpdateDriverForPlugAndPlayDevices требуется, чтобы в системе уже был
зарегистрирован соответствующий узел оборудования, это тоже, кстати, можно
сделать программно, например, для виртуальных устройств.

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

Некоторые моменты:

- установка в режиме WOW64 (т.е. из 32-битного процесса на
64-битных Windows) не поддерживается;

- на системах до Vista неинтерактивная установка возможна
только если драйвер подписан WHQL;

- на системах до Vista, если пользователь отвергнет установку
драйвера, узел оборудования "застрянет" в системе и его
можно будет удалить только через реестр (для некоторых
типов устройств);

- корректность INF-файла следует проверять утилитой inf2cat.exe из WDK;

- расшифровку кодов ошибок, которые выдают функции Setup API, а
также числовые значения различных флагов, следует искать в
файлах SetupApi.h и cfgmgr.h;

- в качестве основы при написании кода можно взять devcon - его
исходники есть в открытом доступе.

--------

Некоторое время назад делал полную программную установку драйверов WIA и
драйверов дисплея (mirror), с регистрацией соответствующих виртуальных
устройств в системе, если интересует - могу описать процесс более детальнее.
1
locm
2024 / 781 / 75
Регистрация: 28.10.2011
Сообщений: 2,318
Записей в блоге: 2
16.02.2016, 23:58  [ТС] #3
Спасибо, попробую UpdateDriverForPlugAndPlayDevices и SetupCopyOEMInf.

Уточню для какого устройства требуется установить драйвер. Это USB устройство, а драйвер - libusb. Приложил inf файл. Он корректный. По крайней мере из диспетчера устройств, драйвер устанавливается.

Возможно ошибка в функции SetupDiCallClassInstaller() потому что вместо "device instance Id" передал функции SetupDiOpenDeviceInfo() указатель на пустую строку?
0
Вложения
Тип файла: zip inf.zip (2.5 Кб, 7 просмотров)
locm
2024 / 781 / 75
Регистрация: 28.10.2011
Сообщений: 2,318
Записей в блоге: 2
17.02.2016, 00:56  [ТС] #4
Функция UpdateDriverForPlugAndPlayDevices() установила драйвер, спасибо.
0
vwart
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 5
29.07.2016, 11:22 #5
Можешь помочь с этой функцией? Или хотя бы скинуть исходники?
0
G3QQ4
1 / 1 / 0
Регистрация: 14.07.2016
Сообщений: 33
Завершенные тесты: 1
29.07.2016, 12:13 #6
Предложу свой вариант.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <windows.h>
#include <Setupapi.h>
 
//RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 path-to-inf\infname.inf
 
int _tmain(int argc, _TCHAR* argv[])
{
    WCHAR buffer[MAX_PATH * sizeof(WCHAR)] = TEXT("\0");
    if(argc == 2) 
    {
        wsprintf(buffer, TEXT("DefaultInstall 132 %s"), argv[1]);
        InstallHinfSection(NULL, NULL, buffer, 0);
    } else 
    {
        printf("InstallDriver.exe <path to inf file>\n");
    }
 
    return 0;
}
0
Убежденный
Системный программист
Эксперт С++
15618 / 7127 / 1128
Регистрация: 02.05.2013
Сообщений: 11,567
Записей в блоге: 1
Завершенные тесты: 1
29.07.2016, 12:41 #7
G3QQ4, это будет работать только для legacy-драйверов и драйверов класса,
потому что секция 'DefaultInstall' обычно есть только у них.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2016, 12:41
Привет! Вот еще темы с ответами:

Программная установка курсора на окно и имитация клика - Pure Basic
Не знал куда внести эту тему. Хочу написать программу, которая обращается на всплывающее окно, т.е. когда, например, в правом углу ...

Программная установка ширина столбца базы данных access - VBA
Приветствую знатоков.. Подскажите пожалуйста кто знает как программно установить ширину столбцов в базе данных Access. Заранее...

Программная установка курсора в текстовом поле в заданную позицию - JavaScript
есть, допустим такое текстовое поле: &lt;input type='Text' name='query' size='50' value='Установка курсора в текстовом...

Динамическая программная установка подчиненной формы для данной - MS Access
Здравствуйте, обитатели форума ! Подскажите светлую мысль, как в VBA по событию текущей формы программно назначить или изменить...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
29.07.2016, 12:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru