События входа / выхода из Windows - PullRequest
0 голосов
/ 14 января 2009

У меня есть служба, которая будет работать на системном уровне. Теперь я хочу отследить вошедшего в него пользователя. Ранее я пытался получить зарегистрированное имя пользователя из API GetUserName, но в моем случае он возвращает «SYSTEM» каждый раз.

Есть ли способ войти в систему под именем пользователя в моем случае? или есть какой-нибудь хук, который я могу установить, чтобы я мог узнать, какой пользователь вошел в систему?

P.S: В основном я работаю в Delphi 2007, но эти вопросы относятся к Win32 API.

Ответы [ 3 ]

3 голосов
/ 14 января 2009

Я незнаком с реализацией Delphi служб Windows, но где бы вы ни устанавливали элементы управления, принятые службой, вы должны добавлять SERVICE_ACCEPT_SESSIONCHANGE. Тогда в функции обратного вызова HandlerEx параметр dwEventType будет одним из значений WM_WTSSESSION_CHANGE, а lpEventData будет указателем на структуру WTSSESSION_NOTIFICATION, которая содержит идентификатор сеанса события.

Вы можете использовать эту информацию вместе с API служб терминалов, чтобы определить, кто что сделал.

1 голос
/ 14 января 2009

Вы можете использовать SENS для прослушивания подписки на уведомления о входе в систему.

0 голосов
/ 14 января 2009

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

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

...