Диссертация Кочарян С.Г (1195361), страница 4
Текст из файла (страница 4)
Функция IOCTL MY_ICTRL_GetQP_PacketDataSize передаёт размер всего пакета для определения, какого именно пакета в функцию передаётся идентификатор пакета. Данную функцию необходимо вызывать перед получением пакета с помощю функции MY_ICTRL_GetQP_PacketData для определения размера пакета.
Функция IOCTL MY_ICTRL_GetQP_PacketData передаёт содержимое пакета на уровень пользователя для определения, какого именно пакета в функцию передаётся идентификатор пакета. Пакет передаётся полностью вместе Ethernet заголовком, IP заголовком, TCP/UDP заголовком и содержимым пакета.
Функция IOCTL MY_ICTRL_QP_PacketDel используется для удаления пакета из очереди ожидания.
4 Структура inf- файла
Инсталляционный inf-файл является текстовым файлом, поставляемым вместе с драйверным программным обеспечением и аппаратным обеспечением, соответственно.
В операционных системах Windows 9x/Me размер inf-файл не может превосходить 64 килобайта. Для NT систем ограничений нет. Если не указано иначе для конкретного типа ОС, то максимальная длина любого поля в inf-файле составляет 512 символов.
4.1 Секции inf-файла и основные общие правила ввода записей
Инсталляционный inf-файл поделен на секции, каждая из которых начинается с идентификатора (имени секции), заключенного в квадратные скобки. Часть секций является обязательной, присутствие других секций зависит от назначения драйвера.
Записи внутри каждой секции описывают действия по инсталляции, либо ссылаются на другие секции. Записи, которые регламентированы для секций определенного типа (обязательные или нет), в литературе и в документации DDK часто называются директивами.
Весь текст, введенный в inf-файле, не различается в смысле регистра символов – все имена секций и записи могут быть введены и в верхнем, и в нижнем регистре. Поэтому слова version, VERSION и Version являются идентичными для процесса установки. Текст не должен содержать символов табуляции и других невидимых управляющих символов.
Символ "точка с запятой" означает начало комментариев в следующей (за точкой с запятой) позиции, которые продолжаются до конца строки. Комментарии не принимаются в рассмотрении при анализе inf-файла. Данное правило не действует только в том случае, если такой текстовый фрагмент (содержащий точку с запятой) заключен в кавычки.
Строка, содержащая только символы возврата каретки и перевода строки, считается пустой и игнорируется. Если существует необходимость продолжить запись на следующей строке, то в последней позиции текущей строки следует ввести обратный слэш \.
Порядок следования секций в файле не играет роли, важно лишь, чтобы секции носили корректные имена и были правильно соотнесены в перекрестных ссылках. (Правда, сами разработчики придерживаются некоторых правил, например, секция [Strings] вводится обычно последней.) Секция продолжается до объявления начала следующей секции, либо до обнаружения конца файла. Имя секции должно быть уникальным для данного inf-файла. Хотя в некоторых источниках указывается, что содержимое секций, имеющие одинаковые имена, системное программное обеспечение, занимающееся интерпретацией inf-файла, объединяет, тем не менее, практика показывает, что это не так. Например, из двух секций [Strings] принимается во внимание только содержимое первой (по тексту inf-файла).
Имя секции не должно содержать более 28 символов для Windows 9x и более 255 символов для Windows NT. Ссылки на секции могут содержать в своем составе пробелы, но только если имя в целом заключено в кавычки (то же относится и к символу точки с запятой). Допустимы точка и символ подчеркивания. Например, как указывает документация DDK, строка в кавычках «; Std Mfg " является приемлемой ссылкой на имя секции, если указываемая секция имеет имя, в точности совпадающее с содержимым внутри кавычек, а именно [;; Std Mfg ].
В теле секции информация представляется в форме записей. Общий формат элемента секции для inf-файлов, применяемых в Windows:
entry = value[,value[,value...]]
где entry является ключевым словом (начало директивы) либо маркером (ссылкой на значение – такая ссылка обособляется символами %...%). Параметры 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$"
Таблица 4.1 – Значения записей внутри секции «Version»
Записи | Значения |
Signature | Обязательная запись. Одно из указанных ниже значений |
Class | Имя класса для целого семейства драйверов. Некоторые имена, например, Net, Display или Unknown зарезервированы (предопределены). В секции [Version] должна быть либо директива Class, соответствующая типу устройства, обслуживаемого устанавливаемым драйвером, либо ClassGuid, либо обе сразу. |
ClassGuid | Уникальный GUID идентификатор для класса устройства, которое обслуживает данный набор драйверного программного обеспечения (см. таблицу 12.2). |
Provider | Поставщик INF файла, наименование организации и т.п. |
LayoutFile | Используется только в INF файлах, поставляемых с операционной системой. Файлы, поставляемые OEM (Original Equipment Manufacturer), то есть "при аппаратуре", должны вместо этого элемента использовать SourceDiskNames и SourceDiskFiles |
CatalogFile | Указывает на cat-файл (с расширением .CAT), содержащий набор драйверных файлов. Этот набор формируется лабораторией Microsoft HW Quality Lab и содержит зашифрованную цифровую подпись проверенного драйверного программного обеспечения. Данный файл не должен подвергаться каким-либо формам архивации. |
DriverVer | Обязательная запись. Независимо от локализации версии ОС имеет формат mm/dd/yyyy[,x.y.v.z]; |
В таблице 4.2 приводятся некоторые из инсталляционных классов, которые можно указывать в директивах Class и ClassGuid. Наиболее полный и верный на текущий момент набор классов можно найти в разделе Системного Реестра HKLM\CurrentControlSet\Control\Class\{...}, где операционная система хранит все поддерживаемые на текущий момент классы устройств. Указанный раздел разбит на подразделы в соответствии с GUID идентификаторами классов, причем в каждом подразделе имеется параметр Class, в котором хранится наименование соответствующего класса в текстовой форме.
Таблица 4.2 – Инсталляционные классы
Наименование | Описание | GUID идентификаторы |
1394 | Хост-контроллер шины 1394 | {6BDD1FC1-810F-11D0-BEC7-08002BE2092F} |
Battery | Аккумуляторные устройства питания | {72631E54-78A4-11D0-BCF7-00AA00B7B32A} |
CDROM | Устройства CD ROM | {4D36E965-E325-11CE-BFC1-08002BE10318} |
Display | Дисплейные адаптеры | {4D36E968-E325-11CE-BFC1-08002BE10318} |
HIDClass | HID устройства | {745A17A0-74D3-11D0-B6FE-00A0C90F57DA} |
Infrared | Устройства ИК-связи (IrDA) | {6BDD1FC5-810F-11D0-BEC7-08002BE2092F} |
Keyboard | Клавиатура | {4D36E96B-E325-11CE-BFC1-08002BE10318} |
Media | Устройства мультимедиа | {4D36E96C-E325-11CE-BFC1-08002BE10318} |
Modem | Модем | {4D36E96D-E325-11CE-BFC1-08002BE10318} |
Monitor | Монитор | {4D36E96E-E325-11CE-BFC1-08002BE10318} |
Mouse | Манипулятор "мышь" | {4D36E96F-E325-11CE-BFC1-08002BE10318} |
MultiPortSerial | Многопортовые последовательные адаптеры | {50906CB8-BA12-11D1-BF5D-0000F805F530} |
Network | Сетевой адаптер | {4D36E972-E325-11CE-BFC1-08002bE10318} |
Окончание таблицы 4
Наименование | Описание | GUID идентификаторы |
NetClient | Сетевой клиент | {4D36E973-E325-11CE-BFC1-08002BE10318} |
NetService | Сетевой сервис | {4D36E974-E325-11CE-BFC1-08002BE10318} |
PCMCIA | Адаптеры PCMCIA | {4D36E977-E325-11CE-BFC1-08002BE10318} |
Ports | Порты (COM&LPT) | {4D36E978-E325-11CE-BFC1-08002BE10318} |
Printer | Принтер | {4D36E979-E325-11CE-BFC1-08002BE10318} |
System | Системные устройства | {4D36E97D-E325-11CE-BFC1-08002BE10318} |
TapeDrive | Устройства работы с магнитной лентой | {6D807884-7D21-11CF-801C-08002BE10318} |
Unknown | Другие устройства | {4D36E97E-E325-11CE-BFC1-08002BE10318} |
USB | USB устройства | {36FC9E60-C465-11CF-8056-444553540000} |
Указанный раздел Системного Реестра можно пополнять своими классами при инсталляции драйвера. Эта процедура достаточно проста, причем Мастер Установки Windows любезно заполняет необходимые поля соответствующей информацией. Пример внесения собственного класса устройств будет рассмотрен чуть позже.
4.1.2 Секция описания поставщика «Manufacturer»
Второй по важности секцией любого inf-файла является секция поставщиков оборудования. В ней указываются ссылки на секции описания моделей [Models] устанавливаемого оборудования.
Первая из возможных форм записей в данной секции: