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

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

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

« Ответ #30 : 09-09-2005 07:13 » 

Народ, может я немного опоздал. Просто месяца 3 назад тоже мучился с предустановкой дров. Вот так всё работает:

1. Копирую файлы с внешнего носителя на жесткий диск
2.

DWORD PreInstallUSB(LPCTSTR pszInfFile)
{
   // extract path
   TCHAR pszPath[_MAX_PATH];
   memset(pszPath, 0, _MAX_PATH*sizeof(TCHAR));
   _tcscpy(pszPath, pszInfFile);

   LPTSTR pos = _tcsrchr(pszPath,'\\');
   *pos = '\0';
   
   DWORD dwRet = 0;
   if(!::SetupCopyOEMInf(pszInfFile, pszPath, SPOST_PATH, 0, NULL, 0, NULL, NULL))
   {
      dwRet = ::GetLastError();
   }
   return dwRet;
}

Сначала эта беда не работала, потому, что дрова были не сертифицированы мелкософтом. После вызова SetupCopyOEMInf посмотрите в файл setupapi.log, который лежит на w2k c:\winnt. Я его перед экспериментами удалял, чтобы "свеженькие" логи легче читались. В общем пока драйвер был не сертифицирован
SetupCopyOEMInf прокатывала и pif генерился, но в setupapi.log записывалась ошибка (сейчас уже не помню какая). После подключения USB устройства (принтера) появлялось окошко визарда.
Проблема исчезла после того как клиенты прислали сертифицированный драйвер.

зы Ещё одно - отключение проверки сертификации тоже не помогало. Во время прединсталляции диалог не появлялся, но визард после пнп выскакивал.
« Последнее редактирование: 20-12-2007 19:39 от Алексей1153++ » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
dorador
Гость
« Ответ #31 : 09-09-2005 08:19 » 

SetupCopyOEMInf прокатывала и pif генерился, но в setupapi.log записывалась ошибка (сейчас уже не помню какая). После подключения USB устройства (принтера) появлялось окошко визарда.
Проблема исчезла после того как клиенты прислали сертифицированный драйвер.

зы Ещё одно - отключение проверки сертификации тоже не помогало. Во время прединсталляции диалог не появлялся, но визард после пнп выскакивал.
Ага, все-таки сертификация (чтоб ее ....:nono:)
Записан
Viktor Denk
Участник

de
Offline Offline

« Ответ #32 : 21-09-2005 14:24 » 

Всем привет!
То что Джон запостил ( плюс SlavaI когдато писал) еще не проверял, но с легкой руки dorador нашел в МСДН как из программы взять дополнительные права для работы с защищенными ветками реестра, например Enum.
Все это можно найти по запросу: Q146906. Топик называется "HOWTO: Secure Performance Data in Windows 2000, Nt, XP", Last Modified on 01-28-2002.
Я пока без изысков запихал в ДЛЛ конкретные ветки. Замеченные особенности ( действительны видимо лишь для начинающих):
1. Компилировать надо из СДК окружения ( SetEnv.Bat для "Debug / Release"  и "msdev /useenv" из досовского окна);
2. Я пока с CONST - ми не разбирался, поэтому приходится вызывать функцию для каждого узла. Например, для Enum, а потом и для USB .
Best regards
Viktor
Записан

A u nas v Sibiri!
AlexANDor
Гость
« Ответ #33 : 28-09-2005 17:04 » 

Надо САМОМУ (хоть гейтс и запрещает но НАДО) скопировать *.inf в windows\inf\ a *.sys в windows\system32\drivers\
и еще в *.inf файле не должно быть инструкций на копирование файлов
а затем вызвать SetupCopyOEmInf

Не понял, зачем сначала копировть *.inf в windows\inf, а затем ЕЩЕ и запускать SetupCopyOEMInf (в результате чего создастся oem*.inf и oem*.pnf) ?  Зачем там будет два inf-файла? По моему достаточно чего-то одного. И, кстати, чем первый путь (просто скопировать *.inf) хуже второго? Вроде все работает, а *.pnf создается уже при обнаружении устройства.
Записан
dachny
Гость
« Ответ #34 : 29-09-2005 04:41 » 

>>Не понял, зачем сначала копировть *.inf в windows\inf, а затем ЕЩЕ и запускать SetupCopyOEMInf (в результате чего создастся oem*.inf и
>>oem*.pnf) ?  Зачем там будет два inf-файла?

Если ты сам скопируешь свой inf например mydov.inf а затем запустишь SetupCopyOEMInf то получиться файло mydov.pnf

внимание это важно в системе будут НЕ oemXX.inf + oemXX.pnf а файлы mydov.inf + mydov.pnf

То есть винда будет думать что ети файлы часть дистрибутива винды и просить подписывания не будет и при втыкании железки дрова будут ставиться  сами
Записан
slonic
Гость
« Ответ #35 : 14-10-2005 10:38 » 

На USB визард установки нового устройства на другом порту хаба выдается  в том случае, если USB-устройство не имеет серийного номера (используется геограифическая адресация для енумерации). Соответственно в реестре создаются новые ветки для всех портов хабов. Если SN есть - установка однократная и в реестре одна ветка, енумерация по SN.
Уважаемый AlexANDor, большое спасибо за науку. Выличили свой девайс от проблемы с необходимостью снова устанавливать драйвер при перетыкании в другой USB порт.
Не подскажите: серийник обязательно должен быть 10-ти символьный?
Я посмотрел на все устройства компа, все серийники (и те что сгенирировала система, используя геограифическую адресацию) именно такие.


Кстати, по умолчанию разрешения на модификацию ветки HKLM\System\CurrentControlSet\Enum\ (как и некоторых других) нет даже у администратора, хотя он может предварительно установить себе такое разрешение.
а не подскажите как?
не могу мусор в реестре убить от предидущих эксперементов.
Записан
AlexANDor
Гость
« Ответ #36 : 14-10-2005 23:12 » 

Не подскажите: серийник обязательно должен быть 10-ти символьный?

С какой стати? В стандарте USB единственное ограничение - поле длины строкового дескриптора - один байт, то есть строка не более 126 (?) символов (поскольку она в unicode).

Цитата
Я посмотрел на все устройства компа, все серийники (и те что сгенирировала система, используя геограифическую адресацию) именно такие.

Чистое совпадение. В моем компе есть SN от 6 до 16 символов. Это личное дело производителя, он лишь должен обеспечить уникальность VID + PID + SN для каждого выпущенного изделия. Длина строки SN выбирается исходя из планируемого тиража изделия или по любым другим соображениям.

Цитата
а не подскажите как?
не могу мусор в реестре убить от предидущих эксперементов.

Вручную - в regedit: выбрать ветку - Правка - Разрешения. Из программы: использовать RegSetKeySecurity().
Записан
Ochkarik
Модератор

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

« Ответ #37 : 28-12-2005 23:12 » 

тут вот... кто ссылку новую кидал?
http://www.microsoft.com/whdc/driver/install/DIFxtls.mspx

Driver Install Frameworks Tools:

DIFxAPI that exports the following functions:

• DriverPackagePreinstall() <-----
• DriverPackageInstall()
• DriverPackageUninstall()
• DriverPackageGetPath()
 
не то ли самое лекарство?
сам толком не смотрел еще - только пару строк прочел.
Записан

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines