Консультация № 182401
06.03.2011, 17:56
49.66 руб.
0 9 1
Здравствуйте, уважаемые эксперты! Этот вопрос как дополнение к вопросу #182371

Очень помог ответ эксперта Павел Юрьевич, но как выяснилось позже(по интернет-переписке с преподавателем) через inf-файл нужно осуществить удаление не только файлов драйвера, но и устройство с Диспетчера устройств. Как я понимаю, для этого нужно удалить в реестре соответствующую ветку, которую я отследил c помощью RegEdit:


Потому как только удаление этой ветки вручную дало результаты

Некий опыт работы с реестром у меня есть, но как осуществить удаление ветки с помощью inf-файла - не знаю и экспериментировать не очень то и хочеться, лучше доверюсь намного более опытным...

Содержимое uninstall.inf
Код:
[Version]
Signature="$CHICAGO$"

[DestinationDirs]
OSILab5.DriverFiles=10,System32\Drivers

[DefaultUninstall]
BeginPrompt = BeginUnInsPrompt
DelService = OSILab5.Services
DelFiles = OSILab5.DriverFiles
EndPrompt = EndUnInsPrompt

[OSILab5.Services]
DelService = OSILab5,0x200

[OSILab5.DriverFiles]
OSILab5.sys,,,1

[BeginUnInsPrompt]
Title = "Удаление драйвера %OSILab5.ServiceName%"
Prompt = "Вы уверены, что хотите удалить драйвер %OSILab5.ServiceName%?"
ButtonType = YESNO

[EndUnInsPrompt]
Prompt = "Драйвер %OSILab5.ServiceName% успешно удален."

[Strings]
OSILab5.ServiceName="OSILab5 Мироненко М.М."


Спасибо Вам большое за внимание




Обсуждение

Неизвестный
06.03.2011, 19:35
общий
это ответ
Здравствуйте, Мироненко Николай Николаевич!

Удаление из реестра делается в секции DefaultUninstall командой:

Код:
DelReg = OSILAB5_Reg

[OSILAB5_Reg]
HKLM,SYSTEM\CurrentControlSet\Enum\Root\LEGACY_OSILAB5\0000\Control
HKLM,SYSTEM\CurrentControlSet\Enum\Root\LEGACY_OSILAB5\0000\LogConf
HKLM,SYSTEM\CurrentControlSet\Enum\Root\LEGACY_OSILAB5\0000
HKLM,SYSTEM\CurrentControlSet\Enum\Root\LEGACY_OSILAB5


5
Неизвестный
06.03.2011, 19:40
общий
Указанным мной выше способом можно удалить и ту ветку, которую Вы приводите, но априори Вы должны знать GUID класса драйвера. А Вы его не можете знать. Можете конечно подставить тот, который у Вас на скриншоте, но при следующей инсталляции и тем более на другом компьютере GUID будет другой.
Неизвестный
06.03.2011, 19:46
общий
Спасибо, буду пробовать...))
давно
Студент
316792
713
06.03.2011, 20:36
общий
Указанным мной выше способом можно удалить и ту ветку, которую Вы приводите, но априори Вы должны знать GUID класса драйвера. А Вы его не можете знать. Можете конечно подставить тот, который у Вас на скриншоте, но при следующей инсталляции и тем более на другом компьютере GUID будет другой.

А разве ClassGuid не прописывается в самом inf ?
давно
Студент
316792
713
06.03.2011, 20:43
общий
Я бы Вам порекомендовал книгу "Программирование драйверов Windows В.П. Солдатов" довольно доступно все написано. И еще одна ссылочка по теме написания драйверов.
Неизвестный
06.03.2011, 23:19
общий
Адресаты:
В самой лабе, точнее в шаблоне inf-файла преподаватель намеренно допустил ошибку, чтобы мы бедные студенты, с использованием инструмента ChkInf из пакета DDK нашли её Сам инструмент как я понял построен с использованием ActivePerl, т.е. всю информацию о найденных в inf-файле "багах" он формирует как htm-страничку. Вот что я получил при проверке inf-файла, который отвечает за установку драйвера:



Насколько я понимаю, секция VERSION должна иметь директиву CLASSGUID, чтобы "завалидировать" класс.
Второе сообщение об ошибке не понял если честно...

Ниже сам сценарий:
Код:
[Version]
Signature="$Chicago$"
Class=Unknown
Provider=%Student%
DriverVer=02/28/2011,1.0.0.0

[Manufacturer]
%Student%=OSI.Lab5.Driver

[OSI.Lab5.Driver]
%OSILab5%=OSILab5.Install, *Student\OSILab5

[DestinationDirs]
OSILab5.Files.Driver.NTx86=10,System32\Drivers

[SourceDisksNames]
1="OSILab5 build directory",,,

[SourceDisksFiles.x86]
OSILab5.sys=1

[OSILab5.Install.NTx86]
CopyFiles=OSILab5.Files.Driver.NTx86

[OSILab5.Files.Driver.NTx86]
OSILab5.sys,,,%COPYFLG_NOSKIP%

[OSILab5.Install.NTx86.Services]
AddService = OSILab5, %SPSVCINST_ASSOCSERVICE%, OSILab5.Service

[OSILab5.Service]
DisplayName = %OSILab5.ServiceName%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_AUTO_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %10%\System32\Drivers\OSILab5.sys
Description= %Student%

[Strings]
Student="Мироненко М.М."
OSILab5="OSILab5 driver: ЗКС-07"
OSILab5.ServiceName="OSILab5 Мироненко М.М."

SPSVCINST_ASSOCSERVICE=0x00000002
COPYFLG_NOSKIP=2
SERVICE_KERNEL_DRIVER=1
SERVICE_AUTO_START=2
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1


Что подскажете делать?

Неизвестный
06.03.2011, 23:25
общий
Адресаты:
По поводу книжки Солдатова, как раз её читаю, а конкретнее 12-ую главу....
давно
Студент
316792
713
06.03.2011, 23:37
общий
Да ClassGuid должен быть в секции [Version], а по поводу второй ошибки - хочет цифровую подпись. Ну этот шаг для лабы я думаю не обязательный .
Тут немножко инфы на англ. Да и в книжке написано.
давно
Студент
316792
713
07.03.2011, 01:03
общий
Вот еще хорошая ссылка по подписыванию драйверов.
Форма ответа