在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;
带有(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;
相关文章推荐
- 让 .Net 程序可以在自定义位置查找托管/非托管 dll 的几种方法
- 如何在SharePoint2010中创建自定义电子邮件警报处理程序
- 一个 Android程序员的小程序入门学习笔记『三』(自定义属性和获取属性)
- 微软技术文档:关于MFC示例程序的分类查找
- 微信小程序获取自定义属性的值
- 编写程序,查找并删除forward_list<int>中的奇数元素
- asp.net2.0实现自定义Web处理类(迁移事件处理程序到SQL Server200中)
- Fedora 16 添加自定义程序到Favorites
- 效仿UNIX程序grep的实现方法改写模式查找程序
- 微信小程序 自定义对话框实例详解
- 微信小程序 自定义属性
- 在MSDN里创建胖客户端程序时MSDN的一个错误
- C语言字典查找程序,最高效查找
- C++/clr 本地自定义类型和托管自定义类型的相互转换 【MSDN如何:扩展封送处理库】
- VC下Release版程序崩溃异常捕捉与查找--map文件方式
- delphi程序全局热键的自定义方法
- 二分查找的递归算法程序
- 90%程序员写不出无BUG的二分查找程序?
- 转载 支持中文字母数字、自定义字体php验证码程序
- 跳过window无关联时弹出的[使用web服务查找合适的程序]对话框,直接显示打开方式对话框