Как контролировать вход пользователя в Windows Server 2003/2008? - PullRequest
0 голосов
/ 22 ноября 2010

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

Мои вопросы по этому поводу:

  • 1) Есть липоследняя запись входа в систему, установленная сразу после входа пользователя, которую я могу использовать / контролировать для своих целей?Если нет, то есть ли что-нибудь подобное, что я могу использовать?

  • 2) Каков наилучший способ постоянно контролировать такое значение?

Ответы [ 2 ]

5 голосов
/ 22 ноября 2010

Ваша лучшая (и, безусловно, самая безопасная) ставка заключается в создании службы, которая принимает элемент управления SERVICE_CONTROL_SESSIONCHANGE.

Это позволит вашему обработчику управления службами получать управление всякий раз, когда пользователь входит в систему, выходит из системы, блокирует сеанс и другие различные параметры. Ищите больше информации в ссылке удара.

Это делается путем создания службы с флагом SERVICE_ACCEPT_SESSIONCHANGE в dwControlsAccepted следующим образом:

SERVICE_STATUS ss;
...
ss.dwControlsAccepted |= SERVICE_ACCEPT_SESSIONCHANGE;

Далее:

// This lets the service accept the session change ctrls
// The service handle here is received by calling RegisterServiceCtrlHandler
SetServiceStatus(hServiceHandle,
                 &ss);

Это позволит Windows отправлять элементы управления SERVICE_CONTROL_SESSIONCHANGE в вашу функцию HandlerEx, которая должна выглядеть примерно так:

DWORD WINAPI HandlerEx(DWORD dwControl,
                       DWORD dwEventType, 
                       LPVOID lpEventData, 
                       LPVOID lpContext)
{
   switch (dwControl)
   {
    ...// Regular control handling
       case (SERVICE_CONTROL_SESSIONCHANGE):
            switch(dwEventType)
            {
                case(WTS_SESSION_LOGON):
                    // Handle logon
                break;

                case(WTS_SESSION_LOCK):
                    // Handle lock
                break;
                ...
            }
       break;

       ...
   }
}

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

Ну, в этом-то и суть. Вы можете прочитать более подробную информацию о функции handlerex здесь: HandlerEx и больше информации об услугах в целом здесь: Сервисные функции . Я предлагаю вам ознакомиться с функцией ServiceMain, функцией RegisterServiceCtrlHandler и, что наиболее важно, прочитать примеры, размещенные на страницах MSDN. Они очень полезны.

Удачи!

0 голосов
/ 22 ноября 2010

Почему бы просто не развернуть скрипт входа в систему?Избавит вас от хлопот.

...