Есть ли способ записи в журнал событий Windows в C? - PullRequest
8 голосов
/ 04 июля 2011

У меня есть требование изменить простую службу Windows, написанную на Win32 C (не на C ++).

Есть ли библиотека, которую я могу использовать для записи записей журнала событий в журнал событий Windows без использования eventcreate.exe?Или я должен изменить его, чтобы компилировать как программу на С ++?

1 Ответ

14 голосов
/ 04 июля 2011

Да, см. Функцию 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

...

...