2012-03-15 3 views
2

Мне нужно создать службу Windows, которая проверяет, когда пользователь регистрируется в Windows (на компьютере с несколькими пользователями) и когда пользователи выходят из системы (или блокируют компьютер) и с этой информацией подсчитывают время, когда пользователь был зарегистрирован (я не забочусь о простое) или лучше, если я могу получить эту последнюю часть напрямую. (Я не возражаю, если пользователь вытащит шнур, служба будет опросить текущего пользователя и зарегистрировать эту информацию, чтобы я знал, был ли компьютер отключен таким образом в следующий раз, когда он просыпается. Это не должно быть точный).Как проверить, что текущий пользователь зарегистрировался и занесено в журнал

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

Я буду использовать C# или Delphi, я был бы признателен, чтобы указать, какой API искать, чтобы получить эту информацию.

У вас уже есть программное обеспечение, которое проверяет это как таковое, предназначенное для проверки использования компьютера для детей. Мне нужно что-то в этом роде, но я настроюсь на другую цель, кроме как смотреть детей.

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

+0

Вам также необходимо принять участие, чтобы кто-то вытащил силовой аккорд. –

+1

Включите аудит для успешных логинов. Затем просто запустите службу просмотра журналов событий для соответствующих событий. – JamieSee

ответ

2

Происхождение этой информации взято из SECURITY_LOGON_SESSION_DATA. Вы можете использовать LsaGetLogonSessionData или LsaEnumerateLogonSessions. Чтобы получить идентификатор сеанса потока (или токен входа пользователя), вы можете использовать GetTokenInformation с параметром TokenSessionId.

В the old answer вы найдете исходный код небольшой демонстрации.

Если вам нужен монитор логин и выход из системы, я бы рекомендовал вам реализовать ISensLogon2 интерфейс обратного вызова (см из System Event Notification Service (SENS)) в службе окон. Если вы планируете использовать его в C#, я бы порекомендовал вам the article.

+0

Спасибо, очень полезная статья. –

+0

@CraigStevenson: Добро пожаловать! – Oleg

0

Чтобы получить эту информацию, вам необходимо допросить журнал событий Windows. Эрик Фитцджеральд рассказывает об этом here. Обратите также внимание на то, что он ссылается на here, о том, как полагаться на событие «LogOff», ну, ненадежное. Это упоминает мой комментарий выше, о людях, вытаскивающих силовой аккорд.

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

3

Попробуйте Win32_LogonSession класс WMI, проверьте StartTime ID регистрацию и свойство Типа входа. Также вы можете взглянуть на класс Win32_Session.

Смежные вопросы