Я пишу простое настольное приложение на 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: Как получить информацию о событии в приложении, запущенном планировщиком заданий?)