在msdn中查找自定义gina程序的线索

没有问题的Gina程序只实现了2个Wlx函数, 其他调用msGina.dll

 

 

带有(DWORD dwSasType)的WlxXX函数有3个, WlxLoggedOnSAS, WlxLoggedOutSAS, WlxWkstaLockedSAS. 主要就是修改这3个函数.

 

DWORD dwSasType 有以下定义

        /**
        #define WLX_SAS_TYPE_TIMEOUT                    (0)
        #define WLX_SAS_TYPE_CTRL_ALT_DEL               (1)
        #define WLX_SAS_TYPE_SCRNSVR_TIMEOUT            (2)
        #define WLX_SAS_TYPE_SCRNSVR_ACTIVITY           (3)
        #define WLX_SAS_TYPE_USER_LOGOFF                (4)
        #define WLX_SAS_TYPE_SC_INSERT                  (5)
        #define WLX_SAS_TYPE_SC_REMOVE                  (6)
        #define WLX_SAS_TYPE_AUTHENTICATED              (7)
        #define WLX_SAS_TYPE_SC_FIRST_READER_ARRIVED    (8)
        #define WLX_SAS_TYPE_SC_LAST_READER_REMOVED     (9)
        #define WLX_SAS_TYPE_SWITCHUSER                 (10)
        #define WLX_SAS_TYPE_MAX_MSFT_VALUE             (127)
        */

 

WlxXX返回的Action(DWORD dwSasAction) 有以下定义

/**
#define WLX_SAS_ACTION_LOGON                        (1)
#define WLX_SAS_ACTION_NONE                         (2)
#define WLX_SAS_ACTION_LOCK_WKSTA                   (3)
#define WLX_SAS_ACTION_LOGOFF                       (4)
#define WLX_SAS_ACTION_SHUTDOWN                     (5)
#define WLX_SAS_ACTION_PWD_CHANGED                  (6)
#define WLX_SAS_ACTION_TASKLIST                     (7)
#define WLX_SAS_ACTION_UNLOCK_WKSTA                 (8)
#define WLX_SAS_ACTION_FORCE_LOGOFF                 (9)
#define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF           (10)
#define WLX_SAS_ACTION_SHUTDOWN_REBOOT              (11)
#define WLX_SAS_ACTION_SHUTDOWN_SLEEP               (12)
#define WLX_SAS_ACTION_SHUTDOWN_SLEEP2              (13)
#define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE           (14)
#define WLX_SAS_ACTION_RECONNECTED                  (15)
#define WLX_SAS_ACTION_DELAYED_FORCE_LOGOFF         (16)
#define WLX_SAS_ACTION_SWITCH_CONSOLE               (17)
*/

 

通过观察这3个函数的入参dwSasType, 和调用msGina.dll的默认的返回的Action. 来决定我们修改过的MyGina.Dll的返回的Action与msGina.dll返回的一致,以免出现异常场景.

 

在没有任何一个用户登陆的情况下,Winlogon.exe接收到SAS事件调用该函数
WlxLoggedOutSAS

在锁定状态下,Winlogon.exe接收到SAS事件调用该函数
WlxWkstaLockedSAS

如果没有通过检验, 应该返回 WLX_SAS_ACTION_NONE, 而不是别的
如果通过校验, 应该尽可能的返回由系统gina函数执行的的结果, 而不是自己去写

 

在校验函数中,加入自己的验证代码

 

验证代码要做的事,例如:

1. 要用户输入口令, 正确, 才会去调用msGina.dll的系统实现

2. 要用户插入验证用的设备, 和设备交互, 设备中的信息合格, 才会去调用msGina.dll的系统实现

 

在msdn中搜索, 有gina函数实现的例子.

在msdn中搜索 'WLX_SAS_ACTION_NONE'

 

可以搜索到下列例子
'Implementing WlxLoggedOutSAS'
'Implementing WlxLoggedOnSAS'
'Implementing WlxWkstaLockedSAS'

 

这些例子最后都没有调用msGina.dll的行为, 而是单独实现了一段代码.

 

如果自己替换了系统登陆的对话框, 那就不能直接返回msGina的结果。

因为msGina执行时会再弹出一个系统的登陆对话框. 这时,就要参照msdn中给的例子, 返回 ‘WLX_SAS_XX’的系统宏定义.

 

要添加以下的额外定义, 现在不知道是哪个标准头中有这两个定义.

typedef struct _USER_ACCOUNT {
    struct _MiniAccount *   pNext;
    LPSTR                  lpUsername;
    LPSTR                  lpDomain;
    LPSTR                  lpPassword;
    LPSTR                  lpComment;
    DWORD                   IconId;
    DWORD                   Flags;
} USER_ACCOUNT, * PUSER_ACCOUNT;

typedef struct _GINA_CONTEXT {
    HANDLE                    hDllInstance;
    PWLX_DISPATCH_VERSION_1_1 pWlxFuncs;
    HANDLE                    hWlx;
    LPWSTR                    station;
    BOOL                    bAllowNewUser;
    BOOL                    bAutoLogonAtBoot;
    BOOL                    bAutoLogonAlways;
    HANDLE                  hUserToken;
    PUSER_ACCOUNT           pUserAccount;
} GINA_CONTEXT, * PGINA_CONTEXT;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值