§ 22. Файл ресурсов для драйвера
|
Дмитрий Иванов, Январь 2007
|
Статья впервые опубликована 16 Мая 2014
|
Наверное, из названия статьи не совсем понятно о чем идет речь. Сейчас постараюсь обьяснить, причем сразу на примере. Иногда, бывает очень приятно навести курсор мыши на файл Вашего драйвера и увидеть высплывающую подсказку о том что это именно Ваше творение. Это особенно бывает полезным, когда Вы собираетесь распространять и/или продавать свой драйвер - так будет возможность его как бы "подписать", оставить на нем свой авторский автограф, поскольку, как Вы уже могли убедиться, просто скомпилированный драйвер из прошлых статей абсолютно "безликий", и не несет никакой информации о изготовителе. Вот, в качестве примера, привожу скриншот моего древнего драйвера (не смейтесь над Ivanov Soft Corp., ради шутки добавил).

От автора
|
Сайт http://lpt-port.narod.ru - это первая попытка автора поделиться с общественностью своими статьями по тематике сопряжения внешних устройств с компьютером. Этот ресурс все еще доступен в сети, но практического интереса ни какого не представляет.
|
Для того чтобы добавить в наш драйвер такую полезную опцию надо добавить к файлам проекта драйвера специальный ресурсный файл, в котором по определенным правилам размещена текстовая информация о будущем откомпилированном файле. В файлах к этой статье можно найти файл res.rc. Откройте его блокнотом.
/*
res.rc - version resources
*/
#include <windows.h>
#define VER_FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#define VER_FILEOS VOS_NT_WINDOWS32
#define VER_FILEFLAGS 0
#define VER_COMPANYNAME_STR "Ivanov Soft Corp.
http://www.lpt-port.narod.ru"
#define VER_PRODUCTNAME_STR "PortDriver"
#define VER_LEGALCOPYRIGHT_YEARS "2005-2006"
#define VER_LEGALCOPYRIGHT_STR "Copyright (c) Ivanov Soft Corp."
#define VER_LEGALTRADEMARKS_STR ""
#define VER_PRODUCTVERSION 01,00,00,01
#define VER_PRODUCTVERSION_STR "1.00"
#define VER_FILEVERSION VER_PRODUCTVERSION
#define VER_FILEVERSION_STR VER_PRODUCTVERSION_STR
#define VER_PRODUCTVERSION_DW (0x01000000 | VER_PRODUCTBUILD)
#define VER_FILETYPE VFT_DRV
#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
#define VER_FILEDESCRIPTION_STR "Simple driver to work with I/O ports.
More information at http://www.lpt-port.narod.ru"
#define VER_INTERNALNAME_STR "ivanov.sys"
#define VER_ORIGINALFILENAME_STR VER_INTERNALNAME_STR
#ifdef RC_INVOKED
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION
PRODUCTVERSION VER_PRODUCTVERSION
FILEFLAGSMASK VER_FILEFLAGSMASK
FILEFLAGS VER_FILEFLAGS
FILEOS VER_FILEOS
FILETYPE VER_FILETYPE
FILESUBTYPE VER_FILESUBTYPE
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0" /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */
BEGIN
VALUE "CompanyName", VER_COMPANYNAME_STR
VALUE "FileDescription", VER_FILEDESCRIPTION_STR
VALUE "FileVersion", VER_FILEVERSION_STR
VALUE "InternalName", VER_INTERNALNAME_STR
VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR
VALUE "OriginalFilename",VER_ORIGINALFILENAME_STR
VALUE "ProductName", VER_PRODUCTNAME_STR
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 0x04B0
END
END
#endif
Как видно, внутри этот файл доволно прост, и я думаю, что Вы без труда исправите его в соответствие со своими нуждами. Итак, теперь скопируйте исправленный файл ресурсов в папку проекта нашего драйвера. Далее надо немного подправить файл настроек компиляции sources. Он должен иметь вид:
TARGETNAME=Port
TARGETPATH=c:\WINDDK\2600.1106\MyDrivers\FirstDriver
TARGETTYPE=DRIVER
SOURCES=FirstDriver.c res.rc
Изменения коснулись только раздела SOURCES, где появилась запись о том, что при компиляции драйвера надо использовать файлы FirstDriver.c и res.rc. Обратите внимание, что файлы перечисляются не через запятую, а через пробел. Теперь компилируем драйвер снова. После этих изменений драйвер приобрел возможность показать некоторую информацию о себе. Например, если вызвать свойства файла драйвера, то можно увидеть все сделанные нами записи о этом файле.

От автора
|
Следует добавить, что нет ни каких серьезных препятствий к тому чтобы "исправить" содержимое ресурсного файла в уже откомпелированной программе и/или драйвере, так что серьезную авторскую защиту программного продукта данный способ дать, разумеется, не сможет.
|
© Дмитрий Иванов
Январь 2007
http://www.kernelchip.ru