Запросы EventLogs по WMI и природе DCOM - PullRequest
0 голосов
/ 18 апреля 2011

Сначала немного фона:

В настоящее время я использую j-interop для запроса вызовов WMI на ящик Windows из коробки Linux, я выполняю этот запрос для WMI:

SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent'

И выполнить его как запрос уведомления, чтобы я мог получить данные обратно, как только они будут созданы. Однако это оказывается проблемой в (редких) случаях.

Скажем, когда пользователь меняет разрешения на корневую папку, меня могут залить тысячи журналов, система справится с этим нормально, java и код взаимодействия счастливы, однако цикл WMI выглядит так:

Hook into event
while(forever)
{
    Query server for next event.
    Do work with event.
}

Очевидно, что это не работает для меня, поскольку, поскольку я прыгаю назад и вперед с сервера тысячи раз, программа не задыхается, но это, безусловно, занимает навсегда , я не могу найти способ заставить событие вернуть все ожидающие события (я думаю).

Следующий выбор - отслеживать идентификатор последней записи, возвращенный WMI, и выполнить прямой запрос для всех событий, где их идентификатор записи превышает последний, я предполагаю, что это будет работать лучше, однако я не знаком с DCOM.

Итак, мой вопрос:

Если я запущу ExecQuery вместо запроса уведомления, придется ли мне перемещаться назад и вперед между клиентом / сервером, чтобы перебирать каждую запись, возвращаемую запросом из-за характера распределенного COM?

1 Ответ

0 голосов
/ 27 октября 2011

Основное решение здесь - не использовать DCOM для этого, это ужасно неэффективно, и я поместил серверы под приличную нагрузку на ЦП, выполняя большие наборы инструкций DCOM.

Я ищу реализации Windows RPC Java, если бы я хотел сделать это удаленно, или WinAPI локально.

...