Как контролировать вход/выход пользователя Active Directory?

Я пишу простое настольное приложение на C#, которое отображает строку текста в текстовом поле всякий раз, когда кто-то входит или выходит из Active Directory. Он предназначен для работы на том же компьютере, что и AD, под управлением Windows Server 2008 и Windows Server 2003. Пока все хорошо, для S2008 мне удалось запустить ManagementEventWatcher всякий раз, когда запускается событие с (EventCode = 4624 OR EventCode = 4634).

Вот запрос WMI, который я сейчас использую:

SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance isa "Win32_NTLogEvent" AND (TargetInstance.EventCode = '4624' OR TargetInstance.EventCode = '4634')

а затем я разбираю eventArgs.Properties["TargetInstance"].Properties["Message"] в поисках пользователя и IP-адреса клиента.

Странно то, что даже когда пользователь выходит из системы, я все равно получаю только одно событие с кодом события 4624. Что происходит с событием 4634? Как поймать выход из системы?

(Я также ищу обходной путь для SU: Как получить информацию о событии в приложении, запущенном планировщиком заданий?)


person Tom    schedule 17.11.2010    source источник


Ответы (2)


Компьютер Windows Server 2008 начал вести себя подобным образом всего через несколько часов безотказной работы. Перезагрузка устранила проблему. Это всего лишь догадка, но она могла быть вызвана слишком многократными попытками запустить мое приложение на машине S2008 и слишком большим количеством ошибок, что испортило конфигурацию операционной системы.

person Tom    schedule 18.11.2010

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

Вы можете использовать классы .Net для получения этих сохраненных событий. нравится получать системные события

EventLog log = new EventLog("System");
person Amit Kumawat    schedule 18.12.2015