Добрый день, уважаемые читатели Хабра. Данный пост представляет из себя гайд по созданию динамической библиотеки .dll, которая содержит в себе сообщения, необходимые для отображения в кастомном логере, располагающимся в Windows Event ViewerApplication and Services Logsуууу (в качестве примера).
В кастомном логе можно часто увидеть сообщения, описание которых содержит:
Это означает, что источник событий yyyy не содержит в себе необходимый набор ID и Description.
Для того, чтобы исправить данную ситуацию, необходимо:
1. Открыть regedit по следующему пути: HKLMSYSTEMCurrentControlSetServicesEventLog и убедиться в существовании вашего раздела.
2. Создать eventMessage.txt в который необходимо поместить ваши параметры, пример с msdn, сохранить в необходимой кодировке 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