Есть ли программный способ, которым я могу подключиться к входу и выходу пользователя из системы (Windows SBS 2003) с целью простой регистрации? - PullRequest
5 голосов
/ 20 сентября 2010

Я пытаюсь написать центральный инструмент отчетности, который позволит отслеживать время на основе входа пользователей Windows в домен.Первоначально я собирался создать небольшой исполняемый файл, который будет запускаться при запуске «всех пользователей» на каждом компьютере, отслеживать имя пользователя, вошедшего в систему, и обновлять центральную базу данных.

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

Вместо этого я бы предпочел создать централизованную версию, но я нахожуДокументы MSDN и Windows SBS 2003 очень трудно найти для ответа.

По сути, я хотел бы подключиться к функциям 'login' и 'logout' на сервере и отследить всю информацию оттуда.Есть ли здесь естественные точки расширения?

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

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

Ответы [ 3 ]

3 голосов
/ 22 сентября 2010

Есть ли здесь естественные точки расширения?

Нет. Вернее, вы не подключаетесь к входу в систему / выходу из системы, если не хотите заменить модуль входа в систему (например, для другого механизма аутентификации): это не является чем-то тривиальным - слишком легко открыть дыры в безопасности (и я ожидаю, что это не очень хорошая идея , если не невозможно, в .NET).

Но поскольку в Windows (все версии, производные от NT) предусмотрена возможность регистрации всех входов и выходов, необходимая информация может быть записана в журнал событий безопасности. Затем есть несколько вариантов получения информации.

Первое: включить аудит входа / выхода.

Лучше всего это делать с помощью групповой политики. Для локального компьютера включите параметры в SecPol.msc (оснастка MMC локальной политики безопасности): Локальные политики | Политика аудита

Второе: прочитать журнал событий

В журнале событий безопасности ищите logon события (id 4624), здесь есть некоторая документация по этим событиям здесь .

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

0 голосов
/ 28 сентября 2010

Вы должны заглянуть в пространство имен Microsoft.Win32.SystemEvents. Там есть много обработчиков, но я верю, что вам нужно событие SessionSwitch, которое сообщит вам, входит ли текущий пользователь в окно вкл / выкл или блокирует экран. Это возможно, потому что окна переключаются на другой рабочий стол, когда экран заблокирован / разблокирован, так что вы сможете их поймать. Затем, чтобы получить информацию о пользователе, вы можете использовать UserPrincipal из пространства имен System.DirectoryServices.AccountManagement, используя основной контекст компьютера.

0 голосов
/ 27 сентября 2010

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

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