Почему после успешного вызова функции EventWrite у меня появляются пустые журналы Windows? - PullRequest
3 голосов
/ 06 ноября 2019

У меня есть файл манифеста с несколькими событиями и двумя каналами. Я создаю файл включения и ресурсов с помощью команды mc:

mc -um manifest.man

Я связываю файлы ресурсов с приложением.

Я устанавливаю манифест в систему с помощью команды wevtutil:

wevtutil.exe im manifest.man

В приложении я использую EventRegister для журнала инициализации и EventWrite для записи журнала. Следующий код для генерации события журнала возвращает ERROR_SUCCESS: EVENT_DATA_DESCRIPTOR data;

 ULONG writeEvent(const std::string& message){
   std::string log_message_str( message );
   EVENT_DATA_DESCRIPTOR data;
   EVENT_DESCRIPTOR description;
   EventDataDescCreate( &data, message.c_str(), static_cast<ULONG>(log_message_str.size() + 1) );

   return EventWrite(log_handle, &description, 1, &data);
 }

Кроме того, я предоставляю разрешения на чтение для моего приложения для LocalService:

icacls "service_win.exe" /grant "NT AUTHORITY\LocalService":R /Q

Я запускаю свое приложение, такое как службас учетной записью NT AUTHORITY \ LocalService:

sc.exe create service_win binpath=D:\service_win.exe type=own obj='NT AUTHORITY\LocalService'
net start service_win

Каналы, объявленные в моем manifest.man, добавлены в журнал WinEvents, но пусты. В приложении я пишу в журнал через writeEvent каждую секунду с результатом ERROR_SUCCESS, но мои файлы журналов все еще пусты.

ОБНОВЛЕНИЕ:

Я создаю githubрепо с шагами для воспроизведения

Ответы [ 2 ]

3 голосов
/ 08 ноября 2019

Я нашел решение. Проблема была в сеансе трассировки и автоматически сгенерированном коде из утилиты mc . Необходимо вызвать mc с флагом -um и использовать автоматически сгенерированные функции для записи в журнал. Рабочий образец здесь

3 голосов
/ 08 ноября 2019

Вы используете Технология отслеживания событий . Это требует от провайдера создания событий и событий потребления потребителем.

Если вы хотите просматривать события через программу просмотра событий, вы можете обратиться к Использование регистрации событий .

Так что проблема в том, что вы не можете видеть эти события в программе просмотра событий. даже если ваши события пишут успешно. Эти события пропущены, потому что вы никогда не начинаете потребителя потреблять их.

См. Причины утраченных событий .

Найти их можно, войдя в систему ETW, войдя в систему Портал устройств Windows , например:

enter image description here

См. Использование событий для получения подробной информации о том, как использовать события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...