Сообщение, прочитанное OnEntryWritten, приходит с не заданными параметрами - PullRequest
0 голосов
/ 21 декабря 2018

Я использую событие OnEntryWritten для получения событий из журнала событий при их запуске.

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

Например:

Платформа фильтрации Windows разрешает привязку к локальному порту.Информация о приложении: ID процесса: 9852 Имя приложения: \ device \ harddiskvolume7 \ program files (x86) \ google \ chrome \ application \ chrome.exe Информация о сети: Адрес источника ::: Порт источника: 51714 Протокол: 17 Информация о фильтре: Выполнение фильтра-Time ID: 0 Имя слоя: %% 14608 ID времени выполнения слоя: 38

Вы можете видеть параметр %% 14608.Это имеет значение, если я вижу тот же журнал в средстве просмотра событий.

Я использую службу Windows в качестве LocalSystem, поэтому я не знаю, является ли это проблемой разрешения или эта технология бесполезнасовсем.Я попробовал остальные варианты, предлагаемые на C #, и они также не соответствуют моим требованиям.

ОБНОВЛЕНИЕ: это код, который я использую для чтения событий.

1) Сначала я подписываюсь на соответствующий журнал событий:

private void Subscribe()
        {
            _eventLog.EnableRaisingEvents = true;
            var callbackFunction = new EntryWrittenEventHandler(OnEntryWritten);
            _eventLog.EntryWritten += callbackFunction;

            // Save a reference for callbackFunction
            _eventHandler = callbackFunction;
        }

2) Затем по методу обратного вызова я читаю данные из сообщения:

public void OnEntryWritten(Object source, EntryWrittenEventArgs entryArgs)
        {
            // When overwrite policy is enabled, this will trigger for all elements when it starts writing new ones
            try
            {
                var entry = entryArgs.Entry;
                var timeWritten = entry.TimeWritten;

                // This comes with %% values depending on the log
                string message = entry.Message;

            }
            catch(Exception ex)
            {
                ...
            }
        }

3) Журнал событийпеременная просто инициализируется как:

var eventLog = EventLog.GetEventLogs().FirstOrDefault(el => el.Log.Equals(logName, StringComparison.OrdinalIgnoreCase));

Мне нужна помощь в этом, честно говоря, я не знаю, что еще попробовать.

ОБНОВЛЕНИЕ Я добавляюздесь несколько изображений, чтобы каждый мог понять ситуацию немного лучше.Если честно, похоже, что нет другого решения, кроме как реализовать словарь и заменить вручную необходимые значения, которые кажутся всегда постоянными.

Это то, что я вижу в средстве просмотра событий для данного идентификатора события:Data from Event Viewer

Вот что я вижу в своей программе, когда читаю эту запись: Entry being read from program 1

Entry being read from program 2

Хорошо видно, что следующие значения:

  • «Ключ машины».(Тип ключа)
  • «Чтение сохраненного ключа из файла».(Операция)

Не отображаются в свойствах ReplacementStrings и в свойствах сообщения как: %% 2499 и %% 2458

Это значение сообщения, которое я получаю в программе:
"Операция над файлом ключей. \ R \ n \ r \ nСубъект: \ r \ n \ tИдентификатор безопасности: \ t \ tS-1-5-18 \ r \ n \ tИмя учетной записи: \ t \ tMyAccount $ \ r \ n\ tAccount Domain: \ t \ tWORKGROUP \ r \ n \ tLogon ID: \ t \ t0x3e7 \ r \ n \ r \ n Информация о процессе: \ r \ n \ t ID процесса: \ t \ t6644 \ r \ n \ t Время создания процесса: \ t2019-04-03T12: 17: 24.587994400Z \ r \ n \ r \ nКриптографические параметры: \ r \ n \ tПровайдер: \ tMicrosoft Software Key Storage Provider \ r \ n \ t Имя алгоритма: \ tUNKNOWN \ r \ n\ tKey Name: \ t816339d2-c476-4f1e-bc40-954f0aa0f851 \ r \ n \ tKey Тип: \ t %% 2499 \ r \ n \ r \ nКлючевая информация о работе с файлом: \ r \ n \ tFile Path: \ tC:\ ProgramData \ Microsoft \ Crypto \ Keys \ 6d55a45fd69327293e9ed3e7930f4565_5663a8bb-2d1d-4c0d-90c1-624beddabe9c \ г \ п \ tOperation: \ т %% 2458 \ г \ п \ tReturn Код: \ T0x0"

1059 * Что может бытьсделано здесь?В записи также нет ничего, что могло бы помочь мне получить оба значения.

1 Ответ

0 голосов
/ 14 марта 2019

Нет, я думаю, что вы ошибаетесь, извините, что этот ответ слишком поздно.Я нашел похожее событие, которое было вызвано Chrome, и оценило, пропустил ли обработчик события что-либо.Там не было ничего пропущенного.Сообщение, которое я получил в своем выводе на консоль, точно совпадало с тем, что я видел в моем Event Viewer

Лучшим решением было бы

Использование entry.Data для получения полных данных вместо entry.Message

entry.Data вернет byte[], который можно преобразовать в строку.Вот ссылка на все свойства, которые будет иметь запись.

...