- PVSM.RU - https://www.pvsm.ru -
Добрый день, уважаемые читатели Хабра. Данный пост представляет из себя гайд по созданию динамической библиотеки .dll, которая содержит в себе сообщения, необходимые для отображения в кастомном логере, располагающимся в Windows Event ViewerApplication and Services Logsуууу (в качестве примера).

В кастомном логе можно часто увидеть сообщения, описание которых содержит:

Это означает, что источник событий yyyy не содержит в себе необходимый набор ID и Description.
Для того, чтобы исправить данную ситуацию, необходимо:
1. Открыть regedit по следующему пути: HKLMSYSTEMCurrentControlSetServicesEventLog и убедиться в существовании вашего раздела.
2. Создать eventMessage.txt в который необходимо поместить ваши параметры, пример с msdn [1], сохранить в необходимой кодировке Windows-1251 или Unicode и формате eventMessage.mc.
Примечание: при наполнении eventMessage вашими ID и description ВСЕГДА после описания необходимо ставить точку с новой строки, и после нее переводить каретку на новую строку.
Пример:
MessageId=0x1
SymbolicName=CAT_1
Language=English
OutDescription for your application
.
MessageId=0x2
Если не учесть данной особенности, то могут быть непредвиденные ошибки во время компиляции.
3. Запустить cmd от имени администратора.
4. Выполнить команду: mc.exe -u C:SomeFoldereventMessage.mc -r C:SomeFolderresult
Примечание: mc.exe, в частном случае, находится в C:Program Files (x86)Windows Kits10bin10.0.16299.0x86 вместо формата -u (Unicode) можно использовать -A (W-1251 или ANSI, данный формат по умолчанию), а параметр -rявляется выходным расположением, куда будут сохранены файлы после компиляции.
После выполнения команды будут созданы: бинарный файл и файл eventMessage.rc в C:SomeFolderresult
5. Выполнить команду: rc.exe C:SomeFolderresulteventMessage.rc
Примечание: rc.exe находится в том же каталоге, где и mc.exe.
После компиляции будет создан файл eventMessage.res, который необходим для создания динамической библиотеки.
6. Выполнить команду: link.exe -dll -noentry /out:C:SomeFolderresultOurMessageSet.dll C:SomeFolderresulteventMessage.res.
Примечание: link.exe находится, в частном случае, в C:Program Files (x86)Microsoft Visual Studio2017CommunitySDKScopeCppSDKVCbin
7. Поздравляю, мы создали с Вами долгожданную библиотеку, но это еще не все. Заходим в regedit к нашему каталогу из шага 1. В поле каталога создаем строковый параметр (string value), именуя сиё творение в EventMessageFile, а в значении указываем путь до нашей библиотеки: C:SomeFolderresultOurMessageSet.dll. Выглядит это так:

Рассмотренные инструменты: mc.exe, rc.exe, link.exe.
Да пребудет с Вами сила.
Автор: Bwn_z
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/windows/295493
Ссылки в тексте:
[1] пример с msdn: https://docs.microsoft.com/en-us/windows/desktop/eventlog/message-files
[2] Источник: https://habr.com/post/426121/?utm_campaign=426121
Нажмите здесь для печати.