Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Версия драйвера Win7 & above  (Прочитано 35313 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« : 10-01-2017 13:14 » 

Требуется программно (С++) получить версию установленного драйвера.

Если важно, то речь идёт о сетевом драйвере для подключения принтера, у которого есть только Ethernet,
через USB порт.

Драйвер для сетевого адаптера USB-LAN:
 Class = Net
 ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
установлен (раньше были также установлены предыдущие версии), но само устройство ещё не подключалось.

Собственно проблема в чём.

В %SystemRoot%\INF-папке находится inf-файл (netax88772.inf) с предыдущей версией
DriverVer = 06/17/2015,3.16.20.0615

а в %SystemRoot%\system32\DriverStore\FileRepository
две папки

1. netax88772.inf_amd64_d2ca514cf72a9a18
 с версией DriverVer = 06/17/2015,3.16.20.0615
 Дата изменения файла 16.07.2016

2. netax88772.inf_amd64_fcf8fb606ada8d31
 с версией DriverVer=09/16/2015,3.18.1.0
  Дата изменения файла 18.02.2016

В списке установленных программ отображается только один новый (3.18).

Дата изменения файла отпадает (я ваще не понял, как она может быть старее у нового драйвера?).

Как определить, что нужна папка netax88772.inf_amd64_fcf8fb606ada8d31? Или что это за "магическое" число fcf8fb606ada8d31?
Есть ли связь между inf-файлами в INF и FileRepository\*

Может есть другие способы определения версии установленных драйверов? Какая инфа для этого требуется?

зы Попытка определить версию с помощью SetupDiEnumDriverInfo не увенчалась успехом, думаю потому, что устройство не подключено (в списке найденных устройств нужного нет).
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 10-01-2017 13:29 » 

А в самом файле драйвера есть VersionInfo?

Ты уже знаешь имя драйвера или "чисто руками" узнал?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 10-01-2017 14:00 » 

Я знаю про него "всё". "Адреса, явки, пароли." Ага

Мой setup копирует локально новый пакет. В нём я могу посмотреть (inf-файл) какая версия. Я не имею права устанавливать автоматически другую версию, если одна уже установлена. Я только должен сообщить пользователю, что  есть новая версия. Дальше уже его дело.

Дело за малым - узнать какая версия установлена в винде. Точнее: КАК?

Вся инфа в файлах (включая MSI самого драйвера) вносится тяп-ляп. Может стоять всё, что угодно. Единственное место с версией - текст описания, но он не стандартизован, и нет гарантии, что в след. версии будет как-то иначе.

Поэтому я решил, что самое надёжное - через inf-файл, но их оказалось два. А может быть и больше. Насколько я знаю, реально удалить драйвер из винды задача нетривиальная. Исходя из этого ищу способ однозначного определения текущей версии.
« Последнее редактирование: 10-01-2017 15:31 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-01-2017 14:45 » 

Не можу сейчас помочь, сижу на Убунте.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 10-01-2017 14:58 » 

pnputil /e это как-то делает... Перехватить его результат, потом парсить... Через попу стеклорезом...

Ща глянул, что за зверь. Есть у него одна зависимоть от DRVSTORE.DLL. Звучит заманчиво: DriverStoreEnum, DriverPackageEnumDrivers ...

но не могу найти на него доки
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 10-01-2017 15:30 » 

при установке драйвера он в реестр может свой класс прописывать. можно его там поискать попробовать. (скорее даже не "может" - а "обязан")
Добавлено через 1 минуту и 29 секунд:
SetupDiGetClassDevs
оттуда уже плясать дальше

Добавлено через 1 минуту и 6 секунд:
может что нить отсюда высплывет. не смотрел детально
SetupDiGetDeviceRegistryProperty
« Последнее редактирование: 10-01-2017 15:38 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 10-01-2017 15:38 » 

Юр, это было первое, что я попробовал... Те я сначала вручную просмотрел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\*, но там такая туева хуча этих {4d36e972-e325-11ce-bfc1-08002be10318}, да ещё с подключами... Но самое главное, что моего драйвера я там не нашёл. Я думаю, что SetupDiEnumDriverInfo делает именно это.

Тут видимо дело в том, что драйвер активируется в момент подключения устройства, и тогда инфу можно будет найти в реестре. А пока он спокойненько лежит в хранилище...
Я такое наблюдал с принтерами. Хотя у них есть такое место, где даже неактивные показываются...
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 10-01-2017 15:40 » 

по-моему там еще должно быть. кроме GUID.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 10-01-2017 15:40 » 

не класс так интерфейс, может быть. по-моему по нему тоже можно искать.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 10-01-2017 15:41 » 

Вот код, который "не показывает"
Код: (C++)
        wchar_t deviceClassGuidString[] = L"{4d36e972-e325-11ce-bfc1-08002be10318}";
        GUID deviceClass;
        CLSIDFromString(deviceClassGuidString, &deviceClass);


        HDEVINFO deviceInfoSet = SetupDiGetClassDevs(&deviceClass, NULL, NULL, 0);
        if(deviceInfoSet == INVALID_HANDLE_VALUE)
        {
                m_stTrace.Format(L"SetupDiGetClassDevs returned INVALID_HANDLE_VALUE for %s", deviceClassGuidString);
                UpdateData(FALSE);
                return;
        }

        list<CString> lstBuf;


        SP_DEVINFO_DATA deviceInfoData;
        deviceInfoData.cbSize = sizeof(deviceInfoData);

        for(DWORD deviceIndex = 0;
                SetupDiEnumDeviceInfo(deviceInfoSet, deviceIndex, &deviceInfoData);
                deviceIndex++)
        {
                if(SetupDiBuildDriverInfoList(deviceInfoSet, &deviceInfoData,
                        SPDIT_COMPATDRIVER))
                {
                        SP_DRVINFO_DATA driverInfoData;
                        driverInfoData.cbSize = sizeof(driverInfoData);
                        for(DWORD driverIndex = 0;
                                SetupDiEnumDriverInfo(deviceInfoSet, &deviceInfoData, SPDIT_COMPATDRIVER, driverIndex, &driverInfoData);
                                driverIndex++)
                        {
                                CString stProvider(driverInfoData.ProviderName);

                                //stProvider.MakeLower();
                                //if(stProvider.Find(L"microsoft", 0) < 0)
                                {
                                        CString stBuf;
                                        stBuf.Format(L"Descrip.:\t%s\r\nProvider:\t%s\r\nVersion:\t%08x %08x\r\n\r\n", driverInfoData.Description, driverInfoData.ProviderName,
                                                driverInfoData.DriverVersion >> 32, driverInfoData.DriverVersion & 0xffffffff);
                                                lstBuf.push_back(stBuf);
                                }
                        }

                        SetupDiDestroyDriverInfoList(deviceInfoSet, &deviceInfoData, SPDIT_COMPATDRIVER);
                }
        }

        SetupDiDestroyDeviceInfoList(deviceInfoSet);
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 10-01-2017 15:42 » 

и что значит туча? имена не могут дублироваться... у разных версий разные?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 10-01-2017 15:43 » 

INF можешь выложить?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #12 : 10-01-2017 15:44 » new

SetupDiGetDeviceRegistryProperty ща гляну.

А интерфейс откуда брать?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 10-01-2017 15:45 » 

и я не понял  - так он на езернете или на USB?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 10-01-2017 15:46 » 

и что значит туча? имена не могут дублироваться... у разных версий разные?

Не, имееются ввиду ключи класса Net, глянь в реестр под этим GUID

INF можешь выложить?

Легко, держи


* NETAX88772.inf (55.16 Кб - загружено 1004 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 10-01-2017 15:47 » 

да и может быть надо было DIGCF_ALLCLASSES или DIGCF_DEVICEINTERFACE ставить?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 10-01-2017 15:49 » 

это для 10-ки 64 бит

Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 10-01-2017 15:51 » 

у меня такой ключ один.
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}
в смысле это оригинал. остальное ссылки
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 10-01-2017 15:53 » 

и я не понял  - так он на езернете или на USB?

Принтер подключается специальным USB-LAN кабелем к компу. Бррр, короче у компа USB у принтера Ethernet. Ещё короче, у принтера нет USB, и ПО с помощью этого драйвера (и кабеля) думает, что оно общается с принтером через сеть.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 10-01-2017 15:54 » 

AX88772 - вот это еще в сервисах в реестре при инсталляции прописано должно быть.

Добавлено через 2 минуты и 53 секунды:
ща. стоп. есть перечисление ID устройств на шине USB.  но тогда наверное при вызове SetupDiGetClassDevs надо энумератор - "USB" указывать может быть.... и что неподключенное устройство
« Последнее редактирование: 10-01-2017 15:57 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 10-01-2017 15:59 » 

у меня такой ключ один.
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}
в смысле это оригинал. остальное ссылки

У меня их вон сколько


А у этого "экземпляра" аж 60 подключей (все на экране не помщаются)

* ss1.png (17.21 Кб - загружено 1364 раз.)
* ss2.png (12.72 Кб - загружено 1406 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #21 : 10-01-2017 16:01 » 

AX88772 - вот это еще в сервисах в реестре при инсталляции прописано должно быть.

Добавлено через 2 минуты и 53 секунды:
ща. стоп. есть перечисление ID устройств на шине USB.  но тогда наверное при вызове SetupDiGetClassDevs надо энумератор - "USB" указывать может быть.... и что неподключенное устройство


Хм... но тогда это будет поиск по неподключенным USB устройствам... ща подумаю.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 10-01-2017 16:03 » 

домой убегать пора, завтра еще посмотреть попробую.
но как мне кажется.
при установке драйвера прописывается
vid|pid аппаратного устройства - можно по нему искать.(но не во всем реестре огульно. там есть определенные ветки)
класс устройства. (или класс интерфейса?)
имя сервиса AX88772.

все наверное можно найти - надо поискать что найти проще...

да, про количество я не разглядел дальше 01/02/03....
среди них должен быть тот который с  DeviceInstanceID= vid/pid твоего адаптера из раздела [USB.NTamd64] inf.
но это кривой наверное путь.




Добавлено через 1 минуту и 14 секунд:
то есть это три пути поиска. все они рано или поздно сойдутся. надо просто выбрать то что имеет api.
« Последнее редактирование: 10-01-2017 16:04 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #23 : 10-01-2017 16:07 » 

AX88772 - вот это еще в сервисах в реестре при инсталляции прописано должно быть.

всё что находится с этим связано с инталлятором (продуктом) самого драйвера. В принципе Product ID я тоже могу найти, через Upgrade ID, я так уже делал. В данном случае это

но как я уже сказал, что текст может быть ЛЮБЫМ

Добавлено через 7 минут и 24 секунды:
Ща ещё раз "поскал" AX88772 во всём реестре. Ваще ничего с драйвером. Только Install, Uninstall, MRU и пр лабудень.

* ss3.png (14.83 Кб - загружено 1348 раз.)
« Последнее редактирование: 10-01-2017 16:15 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #24 : 10-01-2017 16:18 » 

vid|pid аппаратного устройства

Блин, так ты видел в inf сколько их там... Какой брать?

[USB.NTamd64]
%AX88772.DeviceDesc% = AX88772.Ndi,USB\VID_0B95&PID_7720
%AX88772A.DeviceDesc% = AX88772A.Ndi,USB\VID_0B95&PID_772A
%MSI.DeviceDesc% = AX88772A.Ndi,USB\VID_0DB0&PID_A877
%Nokia.DeviceDesc% = AX88772A.Ndi,USB\VID_0421&PID_772A
%MVCI.DeviceDesc% = AX88772.Ndi,USB\VID_125E&PID_180D
%AX88772B.DeviceDesc% = AX88772B.Ndi,USB\VID_0B95&PID_772B&REV_0001
%AX88772C.DeviceDesc% = AX88772B.Ndi,USB\VID_0B95&PID_772B&REV_0002
%AX88772B.DeviceDesc% = AX88772B.Ndi,USB\VID_0B95&PID_7E2B&REV_0001
%LenLan.DeviceDesc% = AX88772B.Ndi,USB\VID_17EF&PID_7203&REV_0001

Ок, давай. Может до завтра чё-нить и надыбаю...
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #25 : 10-01-2017 16:42 » 

да и может быть надо было DIGCF_ALLCLASSES или DIGCF_DEVICEINTERFACE ставить?

С ними результат увеличился до безобразия (ждал долго ~ 13 sec), чего и следовало ожидать. НО! искомого драйвера не было.
Что интересно, с CLASSID  для USB 36FC9E60-C465-11CF-8056-444553540000 получил АБСОЛЮТНО идентичный результат... И нафига он тогда ваще нужен?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 11-01-2017 09:32 » 

эти функции вообще ищут что нибудь?) код не посмотрел внимательно
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #27 : 11-01-2017 10:59 » 

блин написал стерлось...) еще раз

что делает инф файл при установке:
обнаружено новое устройство. vid-pid совпадает с перечисленными в разделе [USB.NTamd64]
в зависимости от найденного далее ищется секция установки
AX88772.Ndi
AX88772A.Ndi
AX88772B.Ndi
все они устанавливают сервис AddService = AX88772  который в реестре должен быть в ветке
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AX88772
кроме того создаются ключи в перечислителе USB
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_xxxx\адрес на шине\
а так же раздел в ветках класса  интерфейса ClassGUID   = {4d36e972-e325-11ce-bfc1-08002be10318}
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{}

остальные секции нам особо не помогут.
это все если устройство было физически вставлено хоть раз!!!!

если устройство не было вставлено - тогда просто ищется подходящий inf с подходящими vid-pid в общей базе винды (сейчас не помню в каком файле она хранится) и ставится.




Добавлено через 4 минуты и 13 секунд:
надо поработать
может тут что найдется ?
http://pblog.ru/?p=105
« Последнее редактирование: 11-01-2017 11:03 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #28 : 11-01-2017 11:27 » 

Ага, Юр, спасибо за теорию. Никогда не помешает.

Но ключевая фраза
Цитата
это все если устройство было физически вставлено хоть раз!!!!

Большинство решений расчитаны на то, что устройство в данный момент подключено и готово к работе. Что в принципе разумно.
Но в моём случае этого может не происходить годами. Клиенты, пользуясь ПО, могут создавать и отправлять заказы, не имея принтера. Потом, пару лет спустя, они решают его таки приобрести и ...

Собственно в конечном итоге я так и сделал
Цитата
если устройство не было вставлено - тогда просто ищется подходящий inf

Решил задачку просто. Но расскажу что ещё нашёл.

Метод 1 (работает на 10-ке 64-бит)

В реестре, под ключом HKEY_LOCAL_MACHINE\DRIVERS\DriverDatabase\DriverInfFiles\ есть куча подключей в формате *.inf
Я пробежался по тем, которые начинаются на "oem" (oem1.inf, oem2.inf, ...). Сначала даже хотел оптимировать цикл и искать по маске oem*.inf, но как оказалось нумерация не строгая: в моём случае не было 6, а максимальный номер был 30.

Критерий поиска:

Active REG_SZ "netax88772.inf_amd64_fcf8fb606ada8d31"

т.е. строчка начинается с искомого файла.

Таким образом имя ключа с "попаданием" дало мне имя oem-файла, из которого я получил номер версии.

Всё бы хорошо, но на 7-ке 32-бит не прокатило. Там в реестре нет ваще ничего похожего.

Метод 2
На окончательное решение меня натолкнула pnputuil. Я заметил, что в ней отображается инфа только oem*.inf файлов.
Поэтому я просто сканирую эти файлы на предмет нужного мне провайдера, который является обязательным полем.

Если драйвер удаляется, то исчезает и соответствующий oem*.inf файл.

Плюс этого метода, что не нужно изначально знать имя inf-файла, те я могу определить версию даже если "мой" пакет не скопирован на локальную систему. Минус: однозначность опознавания oem*.inf файла. Ну тут для усиления эффекта могу ещё тестить на класс и тип.
Ну и поиск в реестре всё-таки быстрее, чем в файлах. Поэтому, если нет необходимости поддерживать 7-ку, то я бы рекомендовал первый способ.
« Последнее редактирование: 11-01-2017 11:29 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #29 : 11-01-2017 13:18 » 

HKEY_LOCAL_MACHINE\DRIVERS
и на 8-ке такого ключа  нет. только по путям
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines