zoukankan      html  css  js  c++  java
  • 编程制作管理员登陆报警器

    作者:Tuuzed(土仔)
    版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
    http://www.cppblog.com/tuuzed/archive/2008/03/16/44656.html

    某日,你“偶然”登陆到了一台服务器上,在确认管理员不在后,开始在服务器上做起一些见不得人的事来。但,这时的你一定不是“心定定”,你或许是在想:万一这时有用户登陆进来怎么办?如果有什么程序能在有用户登陆进来时提醒一下,那该多好。

    “自己动手,丰衣足食”的时候又来了。搞个思路吧:WIN32系统离不开消息,有人登陆应该会给个消息;得到消息了,判断是什么人登陆;根据登陆用户的权限做出反应。

    用户登陆系统给什么消息?查MSDN,系统会在用户登陆或断开时发出WM_WTSSESSION_CHANGE的消息,通过它附带的参数,可以判断出是登陆或是断开。其中WTS_CONSOLE_CONNECT、WTS_REMOTE_CONNECT、WTS_SESSION_LOGON十分有用。

    如何通过消息判断登陆用户是谁?还是在WM_WTSSESSION_CHANGE消息中,带有另一个参数:登陆者的session ID。将session ID传入API函数WTSQuerySessionInformation中可以查询到User Name。

    如何判断用户权限?获取的User Name传入API函数NetUserGetInfo中,利用带出的USER_INFO_1结构中的usri1_priv得到权限标识。

    下面是利用C++Builder做demo的核心代码:

    首先在Form建立时加入语句:WTSRegisterSessionNotification(frmMain->Handle, NOTIFY_FOR_ALL_SESSIONS),告诉系统有Session消息时通知Form。记住要传入的是主Form的Handle,而不是 Application的Handle(BCB用户应该知道区别)。

    然后在.H中重载void __fastcall WndProc(Messages::TMessage &Message);在.CPP中实现它:

    void __fastcall TfrmMain::WndProc(Messages::TMessage &Message)
    {
    if (Message.Msg==WM_WTSSESSION_CHANGE)
    {
    switch (Message.WParam)
    {
    case WTS_CONSOLE_CONNECT:
    //控制台登陆,报警。
    break;
    case WTS_CONSOLE_DISCONNECT:
    break;
    case WTS_REMOTE_CONNECT:
    //有远程连接,报警。
    break;
    case WTS_REMOTE_DISCONNECT:
    break;
    case WTS_SESSION_LOGON:
    //用户登陆了,报警。
    break;
    case WTS_SESSION_LOGOFF:
    break;
    case WTS_SESSION_LOCK:
    break;
    case WTS_SESSION_UNLOCK:
    break;
    default:
    //unknown
    }
    }
    }
    在C++ Builder编制程序的时候,一定要在#include <vcl.h>前先定义#define _WIN32_WINNT 0x0501,要不是的话编译时会提示找不到WM_WTSSESSION_CHANGE定义(具体原因是在winuser.h 中,_WIN32_WINNT必须是大于 0x0501系统才定义了WM_WTSSESSION_CHANGE)。最后,在程序退出前,要告诉系统不要再发消息过来了:WTSUnRegisterSessionNotification。

    程序做出来后,我给它起名:Hacker RUN! 中文名:黑客快跑。
  • 相关阅读:
    wget(转)
    852. Peak Index in a Mountain Array
    617. Merge Two Binary Trees
    814. Binary Tree Pruning
    657. Judge Route Circle
    861. Score After Flipping Matrix
    832. Flipping an Image
    461. Hamming Distance
    654. Maximum Binary Tree
    804. Unique Morse Code Words
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1891382.html
Copyright © 2011-2022 走看看