0

我想写一个应该自动执行一些任务的程序,如果有人登录到我的服务器。如何监视Windows Server 2003/2008用户登录?

我对此的问题是:

  • 1)是否有一个最后的登录记录中 在 用户登录,我可以使用/监视器我 目的后立即设置?如果不是有什么 类似,我可以使用?

  • 2)什么是最好的方式来不断 监测这样的价值?

+1

管理任务,所有管理员应该知道如何做到这一点。问一个。 – leppie 2010-11-22 06:42:39

回答

5

您最好的(也是最安全的)赌注是创建一个接受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以及更多关于服务的信息:Service Functions。我建议你阅读ServiceMain函数,RegisterServiceCtrlHandler函数,最重要的是阅读MSDN页面上发布的示例。他们超级有用。

祝你好运!

0

为什么不直接部署登录脚本?会为你省点麻烦。

+1

没有答案(应该是一个评论)。无论如何,显而易见的答案是因为登录脚本以登录用户的权限执行。 – MSalters 2010-11-22 10:08:44

+0

脚本可以为服务器触发某些内容。这也为您提供了在另一台计算机上远程运行任务的简单选项。 – kichik 2010-11-22 12:28:42