0 c++ winapi monitoring windows-server-2003 windows-server-2008
我想写一个程序,如果有人登录我的服务器,它应该自动执行一些任务.
我对此的疑问是:
1)是否有用户登录后立即设置的最后一次登录记录我可以使用/监控我的目的?如果没有,我可以使用类似的东西吗?
2)持续监控这样一个价值的最佳方法是什么?
您最好的(也是最安全的)赌注是创建一个接受SERVICE_CONTROL_SESSIONCHANGE控件的服务.
这将允许您的服务控制处理程序在用户登录,注销,锁定会话以及各种其他选项时接收控件.在链接打击中查找更多信息.
这是通过创建一个在dwControlsAccepted中具有SERVICE_ACCEPT_SESSIONCHANGE标志的服务来完成的,如下所示:
SERVICE_STATUS ss;
...
ss.dwControlsAccepted |= SERVICE_ACCEPT_SESSIONCHANGE;
Run Code Online (Sandbox Code Playgroud)
其次是:
// This lets the service accept the session change ctrls
// The service handle here is received by calling RegisterServiceCtrlHandler
SetServiceStatus(hServiceHandle,
&ss);
Run Code Online (Sandbox Code Playgroud)
这将允许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;
...
}
}
Run Code Online (Sandbox Code Playgroud)
您可以阅读可以从此处收到的所有不同会话更改通知:WM_WTSSESSION_CHANGE,您需要的所有通知都在说明的wParam部分.
好吧,无论如何,这是它的要点.您可以在此处阅读有关handlerex功能的更多信息:HandlerEx以及有关服务的更多信息:服务功能.我建议您阅读ServiceMain函数,RegisterServiceCtrlHandler函数,最重要的是,阅读MSDN页面上发布的示例.他们非常有帮助.
祝好运!