您的位置:首页 > 其它

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

2010-08-11 18:11 183 查看
没有问题的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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: