Диссертация Кочарян С.Г — копия (1195360), страница 5
Текст из файла (страница 5)
Например, из двух секций [Strings] принимается вовнимание только содержимое первой (по тексту inf-файла).Имя секции не должно содержать более 28 символов для Windows 9x иболее 255 символов для Windows NT. Ссылки на секции могут содержать всвоем составе пробелы, но только если имя в целом заключено в кавычки (тоже относится и к символу точки с запятой). Допустимы точка и символподчеркивания.
Например, как указывает документация DDK, строка вкавычках «; Std Mfg" является приемлемой ссылкой на имя секции, еслиуказываемая секция имеет имя, в точности совпадающее с содержимымвнутри кавычек, а именно [;; Std Mfg].В теле секции информация представляется в форме записей. Общийформат элемента секции для inf-файлов, применяемых в Windows:entry = value[,value[,value...]]где entry является ключевым словом (начало директивы) либо маркером(ссылкой на значение — такая ссылка обособляется символами %...%).32Параметры value являются значениями, соотносимыми с полем entry (именно,соотносимыми, а не присваиваемыми). В редких типах секций в роли поляentry могут выступать имена файлов (например, в секции [SourceDiskFiles])или имена других секциях (например, в секции [DestinationDirs]).В inf-файлах для нескольких систем в секциях для Windows 9x все запятыедолжны присутствовать в указанном в документации количестве, а в секцияхдля NT замыкающие перечисления запятые (если значения опущены) можноопускать (то есть в тех секциях, имена которых которые оформленысуффиксами .nt, .ntx86, и т.п.).
Например, запись в секции SourceDisksFiles вобщей нотации описывается следующим образом:filename = diskid[, [subdir] [, size] ]Пропуская значение subdir, указываем значение size и оставляем двезапятых в середине:filename = diskid,,sizeЕсли пропускаем два значения (subdir и size) в inf-файле для NT, то записьвыглядит так:filename = diskidДля Windows9x это требуется ввести иначе:filename = diskid,,4.1.1 Секция описания версии «Version»Корректно составленный inf-файл начинается с секции «Version», котораяявляется заголовком и меткой для всего драйверного inf-файла. Допустимые инеобходимые записи внутри секции «Version» перечисляются в таблице 4.1.Секция [Version] обязательно должна включать строку:Signature="$Chicago$"33Таблица 4.1 – Значения записей внутри секции «Version»ЗаписиЗначенияSignatureОбязательная запись.
Одно из указанных ниже значений"$Windows NT" — для ОС ряда Windows NT"$Windows 95" — для ОС Windows 9x/Me"$Chicago$" — для всех версий ОС, поддерживающих WDMдрайвераClassИмя класса для целого семейства драйверов. Некоторыеимена, например, Net, Display или Unknown зарезервированы(предопределены). В секции [Version] должна быть либодиректива Class, соответствующая типу устройства,обслуживаемого устанавливаемым драйвером, либоClassGuid, либо обе сразу.ClassGuidУникальный GUID идентификатор для класса устройства,которое обслуживает данный набор драйверногопрограммного обеспечения (см.
таблицу 12.2).ProviderLayoutFileПоставщик INF файла, наименование организации и т.п.Используется только в INF файлах, поставляемых соперационной системой. Файлы, поставляемые OEM (OriginalEquipment Manufacturer), то есть "при аппаратуре", должнывместо этого элемента использовать SourceDiskNames иSourceDiskFilesCatalogFileУказывает на cat-файл (с расширением .CAT), содержащийнабор драйверных файлов.
Этот набор формируетсялабораторией Microsoft HW Quality Lab и содержитзашифрованную цифровую подпись проверенногодрайверного программного обеспечения. Данный файл недолжен подвергаться каким-либо формам архивации.DriverVerОбязательная запись. Независимо от локализации версии ОСимеет формат mm/dd/yyyy[,x.y.v.z];Здесь версия драйвера может быть введена через запятуюпосле указания даты.В таблице 4.2 приводятся некоторые из инсталляционных классов, которыеможно указывать в директивах Class и ClassGuid.
Наиболее полный и верныйна текущий момент набор классов можно найти в разделе Системного Реестра34HKLM\CurrentControlSet\Control\Class\{...}, где операционная система хранитвсе поддерживаемые на текущий момент классы устройств. Указанный разделразбит на подразделы в соответствии с GUID идентификаторами классов,причем в каждом подразделе имеется параметр Class, в котором хранитсянаименование соответствующего класса в текстовой форме.Таблица 4.2 – Инсталляционные классыНаименованиеОписание1394Хост-контроллер шины1394GUID идентификаторы{6BDD1FC1-810F-11D0BEC7-08002BE2092F}BatteryАккумуляторныеустройства питания{72631E54-78A4-11D0-BCF700AA00B7B32A}CDROMУстройства CD ROM{4D36E965-E325-11CE-BFC108002BE10318}DisplayДисплейные адаптеры{4D36E968-E325-11CE-BFC108002BE10318}HIDClassHID устройства{745A17A0-74D3-11D0-B6FE00A0C90F57DA}InfraredУстройства ИК-связи(IrDA){6BDD1FC5-810F-11D0BEC7-08002BE2092F}KeyboardКлавиатура{4D36E96B-E325-11CEBFC1-08002BE10318}MediaУстройства мультимедиа{4D36E96C-E325-11CEBFC1-08002BE10318}ModemМодем{4D36E96D-E325-11CEBFC1-08002BE10318}MonitorМонитор{4D36E96E-E325-11CE-BFC108002BE10318}MouseМанипулятор "мышь"{4D36E96F-E325-11CE-BFC108002BE10318}MultiPortSerial МногопортовыепоследовательныеадаптерыNetworkСетевой адаптер{50906CB8-BA12-11D1BF5D-0000F805F530}{4D36E972-E325-11CE-BFC108002bE10318}35Окончание таблицы 4НаименованиеОписаниеNetClientСетевой клиентGUID идентификаторы{4D36E973-E325-11CE-BFC108002BE10318}NetServiceСетевой сервис{4D36E974-E325-11CE-BFC108002BE10318}PCMCIAАдаптеры PCMCIA{4D36E977-E325-11CE-BFC108002BE10318}PortsПорты (COM&LPT){4D36E978-E325-11CE-BFC108002BE10318}PrinterПринтер{4D36E979-E325-11CE-BFC108002BE10318}SystemСистемные устройства{4D36E97D-E325-11CE-BFC108002BE10318}TapeDriveУстройства работы с{6D807884-7D21-11CF-801Cмагнитной лентой08002BE10318}UnknownДругие устройства{4D36E97E-E325-11CE-BFC108002BE10318}USBUSB устройства{36FC9E60-C465-11CF-8056444553540000}Указанный раздел Системного Реестра можно пополнять своими классамипри инсталляции драйвера.
Эта процедура достаточно проста, причем МастерУстановки Windows любезно заполняет необходимые поля соответствующейинформацией. Пример внесения собственного класса устройств будетрассмотрен чуть позже.4.1.2 Секция описания поставщика «Manufacturer»Второй по важности секцией любого inf-файла является секцияпоставщиков оборудования. В ней указываются ссылки на секции описаниямоделей [Models] устанавливаемого оборудования.Первая из возможных форм записей в данной секции:%token% = model_section_nameВ секции может быть много поставщиков и, соответственно, ссылок насекции описания моделей. Вот один из примеров DDK:[Manufacturer]36%ATAPI_CHGR%= atapi_chgr%CHINON%= chinon_cdrom%DENON%= denon_cdrom%FUJITSU%= fujitsu_cdrom%HITACHI%= hitachi_cdrom%HP%= hp_cdrom%MITSUMI%%NEC%%OTI%%PIONEER%%WEARNES%= mitsumi_cdrom= nec_cdrom= oti_cdrom= pioneer_cdrom= wearnes_cdrom%GenManufacturer% = cdrom_deviceДанная секция описания поставщиков содержит 12 записей о поставщиках.Слева указаны маркеры (token — идентификаторы, обособленные двумязнаками процента, см.
ниже), которые позже, в том же inf-файле в секции«Strings», соотнесены со строками-названиями производителей в полнойтекстовой форме. Справа от знака равенства указаны имена секций (например,секции «atapi_chgr»), описывающих установку программного обеспечения длямоделей аппаратуры данного производителя (ссылки на секции моделей),которые были в этом файле рассмотрены позже.Другая форма возможна для операционных систем, начиная с Windows XP,где можно указывать разные секции моделей в связи с версией операционнойсистемы. В результате строки в секции «Manufacturer» приобретают вид:%token%= model_section_name[,TargetOS] [,TargetOS]Например, для Windows Server 2003:[Manufacturer]%MSFT%=Microsoft_Model_Section, NT.5.2Соответственно, секции моделей будет начинаться так:37[Microsoft_Model_Section]; допустимо для ОС систем до и включая<тело секции моделей>; Windows XP[Microsoft_Model_Section.NT.5.2] ; для Windows Server 2003<тело секции моделей>Значение маркера следует раскрыть в секции [Strings].Для секции описания производителя [Manufacturer] возможна и другаяформа (содержащая только идентификатор производителя, являющийсяодновременно и ссылкой на секцию моделей), например:[Manufacturer]"Microsoft"Тогда и секция описания модели будет выглядеть иначе, например:[Microsoft]<тело секции моделей>Таким образом, секция описания поставщиков является связкой междуидентификаторамипоставщиков,чьеоборудованиеобслуживаетсяустанавливаемым inf-файлом программным обеспечением, и наборамимоделей аппаратуры от каждого из них.
В подавляющем большинстве случаевinf-файл содержит одного поставщика и, соответственно, одну секциюмоделей.На рисунке 4.1 показана взаимосвязь между секциями inf-файла. Каждаязапись в секции описания поставщиков [Manufacturer] указывает на секциюописания моделей для данного поставщика. В этой секции моделей вводятсяуже записи, указывающие на секции, описывающие собственно установкупрограммного обеспечения, то есть копирование файлов (откуда/куда),изменения в Системном Реестре и т.п.38Рисунок 4.1 – Взаимосвязь между секциями4.1.3 Секция описания моделей аппаратуры «Models»Для каждого поставщика, указанного в секции [Manufacturer], должна бытьпредставлена соответствующая секция описания моделей его аппаратуры[Models]. Имя данного типа секций не может быть жестко регламентировано,потому что разработчик сам задает его в секции [Manufacturer].В каждой такой секции [Models] записи представляются по следующейформе:device_description = install_section_name,hw_id[,compatible_id...]где device_description представляет собой уникальный набор видимыхсимволов либо маркер, обязательный для определения в секции [Strings].Данная строка будет предъявляться пользователю во время инсталляционногодиалога, так что имеет смысл позаботиться о поддержке нескольких языков.Значение install_section_name представляет собой ссылку на секцию,описывающую собственно действия по инсталляции для данной модели (вдокументации DDK такого типа секции обозначены как [DDInstall]).39Значениеhw_idявляетсяPnPидентификатором,возвращаемымаппаратным устройством во время опроса PnP-совместимой шины.
Например,USB\VID_04B4&PID_1002 определяет плату тестового набора фирмы Cypress(так называемый EZUSB Kit). Любое количество значений compatible_idможет быть приведено для обозначения того, что та же самая инсталляционнаязапись должна быть использована для указанного в этом списке устройства.Применение одной и той же группы символов может сбить с толкуначинающего разработчика inf-файлов.
Рассмотрим показательный пример изDDK для Windows XP.[Version]Signature = "$Windows NT$" ; inf-файл для установки только под NTClass=SystemClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318}Provider=%MSFT%DriverVer= 5/1/2001[Manufacturer]%MSFT%=MSFT; со знаками процента - маркер[MSFT]%_MCADesc%=_MCA_Inst,_MCA0000[_MCA_Inst.ntx86]CopyFiles = _MCA.Files.x86_12[Strings]MSFT= "Microsoft" ; раскрываем маркер_MCADesc= "Microsoft MCA Driver"В секции [Manufacturer] видим, что маркер %MSFT% "приравнивается"ссылке MSFT. Это означает, что в данной секции описан поставщик Microsoft40(именно так раскрывается маркер %MSFT% в секции [Strings]), a моделиаппаратуры представлены в секции описания моделей [MSFT].Переходя к рассмотрению секции моделей, видим маркер %_MCADesc%(раскрываемый как "Microsoft MCA Driver" – для диалога с пользователем приустановке), который ассоциирован со ссылкой на секцию установки драйвера[_MCA_Inst].