Диссертация Кочарян С.Г — копия (1195360), страница 6
Текст из файла (страница 6)
Правда, эта секция снабжена суффиксом '.NTx86' (регистр неимеет значения), сообщающим о том, что данная секция применима только дляустановки в операционной системе NT на платформе Intel x86 (в документацииDDK такое присоединение суффиксов называется декорированием именсекций).Начиная с версии операционной системы Windows XP, имя секциимоделей может декорироваться идентификатором версии, например:[Manufacturer]%MSFT%=MSFT_model[MSFT_model.NT.5.1] ; Windows XP[MSFT_model.NT.5.2] ; Windows Server 20034.1.4 Секция «CopyFiles»Секции «CopyFiles» имеют уникальные для INF файла названия, ссылки наних исходят из директив CopyFiles секций [DDInstall].
Соответственно,конкретные имена этих секций определяет сам разработчик inf-файла.Каждая запись внутри секции [CopyFiles] имеет видdestination-filename[, source-filename][, temp-filename][, flag]где destination-filename является целевым (то есть новым, конечным)именем файла после копирования. Предполагается, что и исходный файлимеет такое же имя. В том случае, если исходный файл все-таки называетсяиначе, необходимо указать source-filename. Требование указывать temp41filename все еще требуется для Windows 98/Me, и это поле вводитпромежуточное имя для нового файла до момента первой перезагрузкисистемы. В Windows 2000/XP/2003 это значение игнорируется.Значение flag определяет управление новым целевым файлом, чтоподробнее отражено в таблице 4.1.Таблица 4.1 – Определение значения flag в записях секции [CopyFiles]ЗначениеСимвольное имяОписание0x0400COPYFLG_REPLACEONLYКопировать исходныйфайл только в томслучае, если в целевойдиректории есть файл стаким именем0x0800COPYFLG_NODECOMPКопировать безразархивации (если файлобработан архиватором)0x0008COPYFLG_FORCE_FILE_IN_USEЕсли файл с целевымименем в целевойдиректории сейчасоткрыт, то следуеткопировать исходныйфайл в файл свременным именем,форсироватьперезагрузку, после чегопереименоватьвременный файл0x0010COPYFLG_NO_OVERWRITEНе переписыватьсуществующиеодноименные файлы вцелевой директории0x1000COPYFLG_REPLACE_BOOT_FILE Файл является частьюсистемной загрузки,форсироватьперезагрузку системы42Продолжение таблицы 4.1ЗначениеСимвольное имя0x2000COPYFLG_NOPRUNE0x00200x00040x0040ОписаниеОсуществитькопирование, дажеесли инсталлятор несчитает этуоперациюцелесообразнойCOPYFLG_NO_VERSION_DIALOGНе переписыватьодноименныесуществующиефайлы, которыедатированы какболее новые, нежелипредназначенные кзаписи(игнорируется, еслиинсталлируемыйпакет имеетцифровую подпись)COPYFLG_NOVERSIONCHECKВсегдапереписыватьцелевые файлы(флаг игнорируется,еслиинсталлируемыйпакет имеетцифровую подпись)COPYFLG_OVERWRITE_OLDER_ONLY Переписыватьтолько тесуществующиефайлы, которыеявляются болеестарыми, чемимеющиеся в пакете(данный флагигнорируется, еслиинсталлируемыйпакет имеетцифровую подпись)43Окончание таблицы 4.1ЗначениеСимвольное имяОписание0x0001COPYFLG_WARN_IF_SKIP Предупреждать пользователя овозникшей необходимостипропустить переписывание файл(игнорируется, еслиинсталлируемый пакет имеетцифровую подпись)0x0002COPYFLG_NOSKIPЗапретить пользователю выборвозможности пропуска каких-либофайлов при копировании (всегдаприменяется, еслиинсталлируемый пакет имеетцифровую подпись)Для описания сложного управления необходимо выполнять ИЛИ надоперандами – для получения одновременного воздействия указываемыхвариантов.
Некоторые варианты взаимно исключают друг друга (например,COPYFLG_WARN_IF_SKIP и COPYFLG_NOSKIP), поэтому следует всомнительных ситуациях обратиться к документации.Так как секции [CopyFiles] не имеют синтаксических средств указыватьдиск или полный путь к исходному файлу, то следует использовать другиесекции, такие как [SourceDisksNames] и [SourceDisksFiles]. Место (конкретныефайловые каталоги), куда файлы будут помещены в результате установки,определяется другой секцией, называемой [DestinatonDirs].Следует отметить, что здесь секция [CopyFiles] описывается, какприсутствующая в inf-файле по той причине, что на нее ссылалась директиваCopyFiles из секции [DDInstall]. На самом деле, директива CopyFiles можетприсутствовать и в секции [ClassInstall32], которая посвящена инсталляциинового класса устройств в системе (будет рассмотрена ниже).
Вводимая такимобразом секция [CopyFiles] должна быть построена по таким же правилам, какуказано здесь.444.1.5 Секции «ServiceInstall»Секциитипа[ServiceInstall]предназначеныдлязаполненияилимодификации подраздела Системного Реестра, описывающего загрузкудрайвера в сервисном подразделе для данного драйвера, а именно — вподразделе HKLM\System\CurrentControlSet\Services\<service-name>.
Здесь<service-name> — это значение поля service-name, указанное в директивеAddService в секции [DDInstall.Xxx.Services]. Конкретное имя секции типа[ServiceInstall] выбирается разработчиком inf-файла. Декорирование именсекций данного типа (с целью отразить ее предназначение для конкретнойверсии системы) уже не имеет смысла и не воспринимается, поскольку этапринадлежность должна была быть введена раньше — на уровне секций[DDInstall.Xxx.Services].
Описание директив для секций типа [ServiceInstall]приводится в таблице 6, причем директивы ServiceType, StartType,ErrorControl и ServiceBinary являются обязательными. Эти директивыоднозначно определяют информацию (значения одноименных параметров),которая появится в Системном Реестре в сервисном подразделе для данногодрайвера.Таблица 4.2 – Записи секции [ServiceInstall]ЗаписьЗначение поляDisplayName Развернутое наименование драйвера, выводится на экранМастером Установки ОборудованияDescriptionКраткое описание назначения драйвера или сервиса,выводится Мастером Установки ОборудованияServiceTypeДля драйвера режима ядра 0x01 (см. также Приложение В)45Продолжение таблицы 4.2ЗаписьStartTypeЗначение поляОпределяет момент загрузки драйвера0 – SERVICE_BOOT_START – во время загрузкисистемы (WDM драйверы, опирающиеся на системныедрайверы не должны использовать такой тип запуска)1 – SERVICE_SYSTEM_START – во времяинициализации системы (WDM драйверы, опирающиесяна системные драйверы должны использовать такой типзапуска с осторожностью)2 – SERVICE_AUTO_START – автостарт после запускасистемы средствами SCM Менеджера (WDM драйверы идрайверы РпР устройств не должны указывать этот кодзапуска)3 – SERVICE_DEMAND_START – старт по требованию:либо по запросу РnР Менеджера при обнаружении РnРустройства, либо по явному запросу приложения припомощи вызовов SCM Менеджера4 – SERVICE_DISABLED – не может стартоватьErrorControlРаспоряжение относительно возникающих ошибок:0 – игнорировать все ошибки при загрузке драйвера1 – показывать сообщения об ошибках пользователю2 – выполнить рестарт с набором параметров,обеспечившим последнюю удачную загрузку(LastKnownGood), игнорировать дальнейшие ошибки3 – выполнить рестарт с набором параметров,обеспечившим последнюю удачную загрузку(LastKnownGood), контроль ошибок если таковыевозникнут со стороны пользователяServiceBinaryПуть к файлу драйвераAddRegВводит (через запятую) ссылки на секции типа [AddReg],в которых описываются действия над Реестром, которыеследует выполнить дополнительно к описанным в даннойсекцииLoadOrderGroup Идентифицирует группу, в которой должен загружатьсядрайвер (возможные группы можно увидеть в разделеСистемного РеестраHKLM\System\CurrentControlSet\Control\GroupOrderList)DependenciesУказывает сервисы (драйверы) или группы загрузки,которые должны быть загружены к моменту загрузкидрайвера.
Имена групп выделяются при вводепредшествующим им знаком '+'.46Директивы LoadOrderGroup и Dependencies широко используются приустановке драйверов SCSI устройств и фильтр-драйверов.Директива DelReg, которая также может быть в составе [ServiceInstall],вводит ссылки на секции, описывающие удаление из Системного Реестраинформации для уже установленных программных продуктов. Используетсяэта директива редко.Остальныедирективы,возможныедлявводавсекцияхтипа[ServiceInstall], а именно, StartName и BitReg практически не используются.4.1.6 Секция «ClassInstall32»Разработчик драйвера может создать собственный класс устройств (ссобственным GUID, созданным при помощи программы GuidGen) ииспользовать его при установке своего драйвера. Данная операция не являетсясложной и выполняется при помощи секции [ClassInstall32], например,[Version]Signature="$Chicago$"Class=ExampleDrvClassClassGuid={DC16BE99-C06B-4801-A144-43A98BB99052}...[ClassInstall32]Addreg=ExampleClassReg[ExampleClassReg] ; секция изменений в РеестреHKR,,,0,%ClassName% ; имя класса вводится через маркер %ClassName%[Strings] ; Дополняем секцию значением маркераClassName="Example's Driver Class"На рисунке 4.2 отображено появление нового класса в диспетчереустройств.47Рисунок 4.2 - Новый класс в окне Диспетчера устройств4.1.7 Секции [DefaultInstall32.Xxx] и [DefaultInstall32.Xxx.Services]В Windows 98 была возможность установки драйвера по нажатию правойкнопки мышки в программе Проводник на inf-файле с последующим выборе воткрывшемся меню пункта "Установить".