Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 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



© KERNELCHIP 2006 - 2017