Да, см. Функцию ReportEvent и ее пример .
Исходный файл поставщика событий с расширением .mc выглядит следующим образом:
; // MyEventProvider.mc
; // This is the header section.
SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
Warning=0x2:STATUS_SEVERITY_WARNING
Error=0x3:STATUS_SEVERITY_ERROR
)
FacilityNames=(System=0x0:FACILITY_SYSTEM
Runtime=0x2:FACILITY_RUNTIME
Stubs=0x3:FACILITY_STUBS
Io=0x4:FACILITY_IO_ERROR_CODE
)
LanguageNames=(English=0x409:MSG00409)
; // The following are the categories of events.
MessageIdTypedef=WORD
MessageId=0x1
SymbolicName=NETWORK_CATEGORY
Language=English
Network Events
... rest of file omitted
Файл .mc компилируется в файл .res, который связан с .dll:
Чтобы скомпилировать текстовый файл сообщения, используйте следующую команду:
mc -U provider.mc
Чтобы скомпилировать ресурсы, сгенерированные компилятором сообщений, используйте следующую команду:
rc provider.rc
Чтобы создать DLL-библиотеку только для ресурсов, которая содержит строковые ресурсы таблицы сообщений, используйте следующую команду (вы можете запустить команду из командной строки Visual Studio):
link -dll -noentry provider.res
...