解决多图形化识别与验证动态链接库冲突的方法和装置的制作方法

文档序号:6470869阅读:160来源:国知局
专利名称:解决多图形化识别与验证动态链接库冲突的方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,尤指一种解决多图形化识别与验证动态链 接库沖突的方法和装置。
背景技术
窗口 (Windows)系列操作系统,如Windows NT、 Windows 2000、 Windows XP以及Windows 2003等,提供了 一个称为msgina.dll的图形化识 别与-睑i正(GINA, Graphical Identification and Authentication)动态链才妄库 (DLL, Dynamic Link library)文件。这个称为msgina.dll的GINA动态链 接库为用户提供交互式的系统登录界面。Windows操作系统启动时会运行一 个名叫窗口登录(Winlogon)的系统程序,这个系统程序会加载GINA DLL 并调用其中的相关函数,完成交互式的系统登录操作。图1是现有的Windows 2000操作系统自带的GINA DLL提供的交互式系统登录界面图。
现有技术除了提供上述称作msgina.dll的GINA DLL以外,还允许软件 开发商按照规定的一套规则实现自己定制的GINADLL。很多应用场景都需 要采用定制的GINA DLL,如以下两个应用场景
应用场景一单点登录应用
一个企业的用户登录Windows操作系统时需要正确输入用户名和密码 才能通过登录进入Windows操作系统。如果该企业应用了某网络接入软件, 即需要用户完成网络接入的身份认证才能允许访问网络,用户需要再次输入 用户名和密码等信息。如果两次输入的使用的是同一套用户名密码信息,则 企业用户自然会提出单点登录的需求,即登录Windows时输入一次用户名 密码信息后即能登录进入Windows操作系统,又能接入网络。网络接入软
件提供开发商的定制GINA DLL库可以满足这个需求,即登录Windows时 定制GINA DLL获取到用户输入的用户名密码等信息,用这些信息先去做网 络接入认证的操作,随后再去做登录Windows的操作。 应用场景二 USB智能卡与Windows登录整合应用 这种应用需要用户在计算机上安装USB智能卡以及相关的驱动程序, 智能卡中存有个人身份号码(PIN, Personal Identification Number),用户 要登录Windows,除了正确输入用户名和密码信息之外,还必须正确输入 PIN码。用户临时要离开时只需拔除智能卡,计算机自动锁定;只有再次插 入智能卡输入正确PIN码才能再次进入系统继续使用。这种应用同样需要定 制GINA DLL来实现。
尽管现有技术为软件开发商提供了 GINA DLL定制机制,但这个机制 存在一个局限性,使得只能有一个厂商的GINA DLL被系统程序winlogon 加载。 一个厂商要使得自己定制的GINA DLL起作用,需要把自己定制的 GINA DLL名称记录到注册表的指定位置,该指定位置为HKEY—LOCAL —MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 下的"GinaDLL"属性,例如,将定制的ABC—GinaHook.dll保存到注册表 的指定位置,即为将HKEY—LOCAL—MACHINE\SOFTWARE\Microsoft\Win dows NT\CurrentVersion\Winlogon下设的"GinaDLL"属性的值设置为AB C_GinaHook.dll。
当两个厂商定制的GINA DLL都希望在同一台计算机上生效时,问题 就暴露出来了 后安装的GINA DLL生效会导致先安装的GINA DLL失效。 这就是多个GINA DLL的冲突。但是现有技术并没有如何解决多个GINA DLL沖突的方案。

发明内容
本发明提供了一种解决多GINA DLL冲突的方法,该方法使得多个 GINA DLL能够协同工作。
本发明还提供了一种解决多GINA DLL冲突的装置,该装置使得多个 GINADLL能够协同工作。
为达到上述目的,本发明的技术方案具体是这样实现的
本发明公开了一种解决多图形化识别与验证动态链接库GINA DLL冲 突的方法,该方法包4舌
当窗口 Windows操作系统启动时,窗口登录Winlogon系统程序根据注 册表指定位置下保存的主导GINADLL的名称加载该主导GINADLL,调用 该主导GINA DLL中的指定接口 ,由该指定接口获取主导GINA DLL的外 部接口参数,并用该获取的外部接口参数调用主导GINA DLL的外部接口 ;
所迷主导GINA DLL的外部接口实现该主导GINA DLL自身的业务逻 辑,并根据预设的GINA链表查找到主导GINADLL的下 一级从属GINA DLL 的名称,从该GINA链表中获取该下 一 级从属GINA DLL的外部接口参数, 加载该下一级从属GINADLL,用所述下一级/人属GINADLL的外部4姿口参 数调用下 一级从属GINA DLL的外部4妄口 ;
对于每一个当前从属GINA DLL,该当前从属GINA DLL的外部接口被 上一级GINA DLL调用时,当前从属GINA DLL的外部接口实现本从属 GINADLL自身的业务逻辑,并根据所述GINA链表判断本从属GINADLL 是否存在再下一级GINA DLL;如果存在,则从该GINA链表中获取该再下 一级从属GINADLL的外部接口参数,加载该再下一级从属GINADLL,用 所迷再下一级从属GINA DLL的外部接口参数调用该再下一级从属GINA DLL的外部接口;如果不存在,则结束。
本发明还提供了一种解决多GINA DLL冲突的装置,该装置包括 Winlogon系统程序模块、属于主导GINA DLL的主导GINA DLL指定接口 模块和主导GINA DLL外部接口模块、 一个以上的属于不同从属GINADLL 的从属GINADLL外部接口模块和GINA链表存储模块,其中,
所述Winlogon系统程序模块,当Windows操作系统启动时,用于根据 注册表指定位置下保存的主导GINADLL的名称加载该主导GINADLL,调
用该主导GINA DLL中的主导GINA DLL指定接口模块;
所述主导GINA DLL指定接口模块,用于获取主导GINA DLL的外部 接口参数,并用该获取的外部接口参数调用主导GINA DLL外部接口模块;
所述主导GINA DLL外部接口模块,用于实现主导GINA DLL自身的 业务逻辑,并根据GINA链表查找到主导GINADLL的下 一级从属GINA DLL 的名称,从该GINA链表中获取该下一级从属GINA DLL的外部接口参数, 加载该下一级从属GINA DLL,用所述下一级从属GINA DLL的外部接口参 数调用下一级从属GINA DLL外部接口模块;
每一个从属GINA DLL外部接口模块,用在被上一级GINA DLL外部 接口模块调用时,实现本从属GINA DLL自身的业务逻辑,并根据所述GINA 链表判断本从属GINA DLL是否存在再下一级GINA DLL;如果存在,则从 该GINA链表中获取该再下一级从属GINA DLL的外部接口参数,加载该再 下一级从属GINA DLL,用所述再下一级从属GINA DLL的外部接口参数调 用该再下一级从属GINADLL外部接口模块;如果不存在,则结束。
由上述技术方案可见,本发明这种当Windows操作系统启动时,主导 GINA DLL由Winlogon系统程序加载和运行,而每个从属GINA DLL由其 上一级的主导GINA DLL或从属GINA DLL加载和运行的技术方案,使得 多个GINA DLL能够协同工作而不产生冲突。


图1是现有的Windows 2000操作系统自带的GINA DLL提供的交互式 系统登录界面图2是本发明实施例一种解决多GINADLL冲突的方法的流程图; 图3是本发明实施例中安装A—GINA.dll后的示意图; 图4是在(2-1)所示的情况下安装B一GINA.dll后的示意图; 图5是在(2-2)所示的情况下安装B—GINA.dll后的示意图; 图6是在(2-3)所示的情况下强行安装B—GINA.dll后的示意图7是在(3-1)所示的情况下安装C_GINA.dll后的示意图; 图8是在(3-2)所示的情况下安装C—GINA.dll后的示意图; 图9是在(3-3)所示的情况下安装C一GINA.dll后的示意图; 图IO是本发明实施例一种解决多GINADLL冲突的装置的结构框图。
具体实施例方式
本发明的核心思想是当Windows操作系统启动时,主导GINA DLL由 Winlogon系统程序加载和运行,而每个从属GINA DLL由其上一级的主导 GINADLL或从属GINADLL加载和运行,这样多个GINADLL便可以协同工 作,而不产生冲突,具体方案如图2所示。
图2是本发明实施例 一种解决多GINA DLL冲突的方法的流程图。如图2 所示,该方法包括以下步骤
步骤201,当窗口 Windows搡作系统启动时,窗口登录Winlogon系统 程序根据注册表指定位置下保存的主导GINADLL的名称加载该主导GINA DLL,调用该主导GINA DLL中的指定接口 ,由该指定接口获取主导GINA DLL的外部接口参数,并用该获取的外部接口参数调用主导GINA DLL的 外部接口 。
步骤202,所述主导GINADLL的外部接口实现该主导GINADLL自身 的业务逻辑,并根据预设的GINA链表查找到主导GINADLL的下一级从属 GINA DLL的名称,从该GINA链表中获取该下 一级从属GINA DLL的外部 接口参数,加载该下一级从属GINADLL,用所述下一级从属GINADLL的 外部接口参数调用下一级从属GINADLL的外部接口 。
步骤203,对于每一个当前从属GINA DLL,该当前从属GINA DLL的 外部接口被上一级GINA DLL调用时,当前从属GINA DLL的外部接口实 现本从属GINA DLL自身的业务逻辑,并根据所述GINA链表判断本从属 GINADLL是否存在再下一级GINADLL;如果存在,则从该GINA链表中 获取该再下一级从属GINADLL的外部接口参数,加栽该再下一级从属
GINA DLL,用所述再下 一级从属GINA DLL的外部接口参数调用该再下一 级从属GINA DLL的外部接口;如果不存在,则结束。
上述过程中的GINA链表是在安装主导GINA DLL和个从属GINA DLL 时生成的,GINA链表中保存主导GINA DLL和各从属GINA DLL之间的链 式关系信息,根据上述方案可见,该链式关系信息至少包括主导GINADLL 的名称、每个从属GINA DLL的名称、每个从属GINA DLL的外部接口参 数集合、每个从属GINA DLL的外部接口名称,以及各GINA DLL之间的 链式上下级关系。
为使本发明的目的、技术方案及优点更加清楚明白,以下列举实施例, 对本发明进 一 步详细说明。
按照本发明的方案, 一个定制的GINA DLL在实际应用中可能是主导 GINADLL,也可能是从属GINADLL,需要在安装时,根据具体情况来界 定。
1、当安装一个名称为A一GINA.dll的GINA DLL时,首先判断当前的 操作系统下是否已经存在主导GINA DLL,如果不存在,则在注册表指定位 置下保存该要安装的GINA DLL的名称"A一GINA.dll"(即将HKEY一LOC
下的GinaDLL属性值设置为A—GINA.dll),并在GINA链表中填写A_GIN A.dll所能提供的输入参数集合,本实施例中用属性"Capability—A"表示, 同时还在GINA链表中填写A—GINA.dll的外部接口名称"Interface_A"以 及外部接口参数集合"paramSet_A",将A_GINA.dll本身保存到默认目录
(如C:\WINDOWS\system32)下。至此A—GINA.dll安装完毕,且A—GINA. dll被安装成了主导GINA DLL。
图3是本发明实施例中安装A—GINA.dll后的示意图。如图3所示,Wi ndows系统重新启动后,Winlogon根据注册表指定位置下保存的主导GINA
DLL的名称获知A—GINA.dll,从默认目录(C:\WINDOWS\system32 )下加 载A GINA.dll,调用A GINA.dll中的一个符合GINA规范要求的指定接口
(例如,该指定接口可以是名称为WlxLoggedOutSASDlgProc的接口函数), 该指定接口通过现有的方式获取A—GINA.dll的外部接口参数集合"ParamS et—A",用"ParamSet—A"中的参数调用A—GINA.dll的外部接口 "Interfac e_A"。在图3中箭头表示加载和调用。其中,Winlogon根据注册表指定位 置下保存的GINA DLL的名称,加载该GINA DLL,然后调用该GINA D LL中的指定接口函数,由该指定接口函数获取该GINA DLL的外部接口参 数集合并调用该GINA DLL的外部接口的过程为现有技术。
本实施例中,在GINA链表中填写A_GINA.dll的"Capability—A"属性 是为了后续安装多个GINA DLL时界定主导和从属GINA DLL之用。在本 实施例中用32位的整数表示"Capability"属性,由高位到低位分别称为第
1位、第2位........第32位,每一位对应一个输入参数,该位为1表示
支持,为0表示不支持。规定第1位至第4位分别表示参数"用户名"、"密 码"、"登录位置"和"登录窗口句柄"。则如果Capability—A = 0x000000 OF就表示A一GINA.dll支持提供"用户名"、"密码"、"登录位置,,和"登 录窗口句柄,,四个参数,且只支持这四个参数。
GINA链表可以用多种表达方式实现,这里给出用ini格式的文件实现 的GINA链表,当A_GINA.dll安装完毕后,GINA链表的形式如下
GinaDLL=A—GINA.dll
Capability=< 'Capability—A >
Interface=< Interface—A >
ParamSet=< ParamSet—A >
其中,"First GINA DLL"表示是主导GINA DLL。
2、当安装一个名称为B—GINA.dll的GINA DLL时,当前系统下已经有 作为主导GINA DLL的A_GINA.dll,则比较当前要安装的B—GINA.dll和已 安装的A_GINA.dll所能支持的输入参数集合与外部接口参数集合,存在以 下三种情况
(2-1)如果B_GINA.dll所能支持的输入参数集合"Capability_B"負巨 够包含A—GINA.dll外部接口参数集合"ParamSet_A,,,将B—GINA.dll本身 保存到默认目录(如C:\WINDOWS\system32)下,并将B—GINA.dll设置为 主导GINA DLL,将A—GINA.dll设置为B_GINA.dll的从属GINA DLL,具 体为将注册表指定位置下的GinaDLL属性设置为GinaDLL = B—GINA.dll, 且GINA链表的内容变更为
GinaDLL=B—GINA.dll
Capability=< Capability—B >
Interface=< Interface一B >
ParamSet=< ParamSet—B 〉
Next = A_GINA.dll
Capability=< Capability—A > Interface=< Interface—A > ParamSet=< ParamSet一A >
其中,属性"Next = A—GINA.dll"表示A_GINA.dll为B—GINA.dll的从 属GINA DLL。
需要说明的是,在本发明实施例中集合A包含集合B,是指集合B中 所有元素都能在集合A中找到。
图4是在(2-1)所示的情况下安装B—GINA.dll后的示意图。如图4所 示,Windows系统重新启动后,Winlogon根据注册表指定位置下保存的主 导GINA DLL的名称获知B—GINA.dll,从默认目录(C:\WINDOWS\system 32)下加载B_GINA.dll,调用B_GINA.dll中的一个符合GINA规范要求的 指定接口,该指定接口通过现有的方式获取B—GINA.dll的外部接口参数集 合"ParamSet—B",用"ParamSet—B"中的参数调用B—GINA.dll的外部接 口 "Interface—B" 。 B—GINA.dll的外部接口 "Interface—B"实现该B—GINA.
dll自身的业务逻辑,并根据GINA链表中的B—GINA.dll的"Next"属性查 找到B—GINA.dll的下一级从属为A_GINA.dll,从该GINA链表中荻取A—G INA.dll的外部接口参数"PamnSet—A",从默认目录(如C:\WINDOWS\sy stem32)下加载A—GINA.dll,用"PamnSet—A"中参数调用"Interface—A"; "Interface—A" 实现该A_GINA.dll自身的业务逻辑。
(2-2)如果A_GINA.dll所能支持的输入参数集合"Capability_A"能 够包含B—GINA.dll外部接口参数集合"ParamSet—B",将B—GINA.dll本身 保存到默认目录(如C:\WINDOWS\system32)下,并将B—GINA.dll设置为 A一GINA.dll的从属GINA DLL,具体为将GINA链表的内容变更为
GinaDLL- A—GINA.dll
Capability^ Capability—A >
Interface=< Interface—A >
ParamSet=< ParamSet—A >
Next = B—GINA.dll
Capability=< Capability一B > Interface=< Interface—B > ParamSet=< ParamSet—B >
图5是在(2-2)所示的情况下安装B—GINA.dll后的示意图。在图5中 Windows系统重新启动后的A_GINA.dll和B一GINA.dll协同工作的过程与图 4中所描述的类似,只是A—GINA.dll和B—GINA.dll互换了角色而以,这里 不再复述。
(2-3)如果B_GINA.dll所能支持的输入参数集合"Capability_B"不 能够包含A_GINA.dll外部接口参数集合"ParamSet—A",且A—GINA.dll 所能支持的输入参数集合"Capability_A"不能够包含A—GINA.dll外部接口 参数集合"ParamSet—B",则这两个GINA DLL不同协同工作,只能放弃
B—GINA.dll的安装,或者强行安装B—GINA.dll,这时A_GINA.dll失效。如 果强行安装B—GINA.dll,则GINA链变更为如下形式
GinaDLL=B—GINA.dll
Capability=< Capability—B >
Interface=< Interface_B >
ParamSet=< ParamSet—B >
图6是在(2-3)所示的情况下强行安装B—GINA.dll后的示意图。
3、如果当前系统下已经存在两个以上的GINA DLL,即已存在一个主 导GINA DLL和一个以上的从属GINA DLL时,如果要安装一个新的GINA DLL,则需要从主导GINA DLL开始逐级比较,最终找到 一个插入新的GINA DLL的位置,该位置可能是链头(即新GINA DLL作为主导GINA DLL), 也可能是链尾,也可能是GINA DLL链中间的某个位置。
这里^f艮设系统已安装了 A—GINA.dll和B—GINA.dll,且安装情况如图5 所示,当前需要安装一个新的C一GINA.dll,则从主导GINA DLL开始依次 比较当前要安装的C_GINA.dll和已安装的各GINA DLL所能支持的输入参 数集合与外部接口参数集合,存在以下四种情况
(3-1)如果C_GINA.dll所能支持的输入参数集合"Capability_C"能 够包含A_GINA.dll (主导GINA DLL)外部接口参数集合"ParamSet—A", 将C—GINA.dll本身保存到默认目录(如C:\WINDOWS\system32)下,并将 C—GINA.dll设置为主导GINA DLL,将A一GINA.dll设置为C_GINA.dll的从 属GINA DLL,具体为将注册表指定位置下的GinaDLL属性的值设置为 C_GINA.dll,且GINA链表的内容变更为
GinaDLL=C—GINA.dll
Capability=< Capability_C >
Interface=< Interface—C 〉
ParamSet=< ParamSet C>
Next = A GINA.dll
Capability=< Capability_A > Interface=< Interface—A > ParamSet=< ParamSet—A > Next = B GINA.dll
GinaDLL=A—GINA.dll
Capability=< Capability_A >
Interface^ Interface—A >
ParamSet=< ParamSet_A >
Next = C一GINA.dll
Capability=< Capability—C > Interface=< Interface_C > ParamSet=< ParamSet_C > Next = B一GINA.dll
Capability=< Capability—B >Interface=< Interface_B > ParamSet=< ParamSet_B >
图8是在(3-2)所示的情况下安装C一GINA.dll后的示意图。 (3-3)如果B_GINA.dll所能支持的输入参数集合"Capability_B"能 够包含C—GINA.dll外部接口参数集合"ParamSet—C",将C—GINA.dll本身 保存到默认目录(如C:\WINDOWS\system32)下,并将C—GINA.dll插入到 链尾,具体为将GINA链表的内容变更为
GinaDLL=A—GINA.dll
Capability=< Capability—A >
Interface=< Interface—A 〉
ParamSet=< ParamSet—A >
Next = B_GINA.dll
Capability^ Capability一B > Interface=< Interface一B > ParamSet=< ParamSet—B > Next = C_GINA.dllCapability=< Capability一C > Interface=< Interface一C > ParamSet=< ParamSet一C >
图9是在(3-3)所示的情况下安装C—GINA.dll后的示意图。 (34)如果上述三种情况都不是,则C_GINA.dll不能与已存在的 A—GINA.dll和B—GINA.dll协同工作,此时放弃C—GINA.dll的安装,或者 强行安装C—GINA.dll,贝'J A—GINA.dll和B—GINA.dll失效。 在上述安装各GINA DLL的过程中,都将GINA DLL保存到了默认目 录(如C:\WINDOWS\system32)下,这样当加载GINA DLL时,都从所述 默认目录下获取要加载的GINA DLL并进行加载。
在本发明的另一个实施例中,还可以在安装各GINA DLL的过程中, 都将各GINA DLL保存到了不同的目录下,这时,需要在GINA链表中与每 个GINA DLL的名称对应保存该GINA DLL被保存的目录信息。当加载某 个GINA DLL时,就可以从GINA链表获取要加载的GINADLL被保存的目 录信息,进而获取要加载GINA DLL并进行加载。
例如,以图5所示的情况为例,,ii殳作为主导GINADLL的A_GINA.dll 被保存到了默认目录(如C:\WINDOWS\system32 )下,但作为从属的 B—GINA.dll被保存到了另 一个目录(如C:\WINDOWS\ginadll)下,则可以 在GINA链表中增加一个"Location"属性来表示对应IGNADLL被保存的 目录,GINA链表的具体形式可以如下
GinaDLL= A_GINA.dll
Location = C:\WINDOWS\system32
Capability=< Capability—A >
Interface=< Interface—A >
ParamSet=< ParamSet一A >
Next = B一GINA.dll
Location = C:\WINDOWS\ginadll Capability=< Capability_B > Interface=< Interface—B > ParamSet=< ParamSet一B >
前面的实施例中描述了本发明中如何实现多GINA DLL的安装以及协 同工作的过程,接下来给出从系统中卸载一个GINA DLL的方式。
当一个GINA DLL不再被使用而需要从系统中卸载时要确保不影响其 他现存的GINA DLL的协同工作,为此,在本发明实施例中给出了以下GINA DLL链的收缩方法
(1-a)如果当前要卸载的GINADLL同时存在上一级GINA DLL和下 一级GINA DLL,则在GINA链表让当前要卸载的GINA DLL的上一级GINA DLL直接指向当前要卸栽的GINA DLL的下一级GINA DLL。
例如,在图7所示的GINA DLL链中,如果要卸载A—GINA.dll,则在 GINA链表中将C_GINA.dll ( A—GINA.dll的上一级)的属性"Next"的值修 改为B_GINA.dll (A_GINA.dll的下一级)。
(1-b )如果当前要卸载的GINA DLL存在上一级GINA DLL,但不存 在下一级GINA DLL,则将当前要卸载的GINADLL的上一级GINADLL置 为链尾。
例如,在图7所示的GINA DLL链中,如果要卸载B—GINA.dll,则在 GINA链表中将A—GINA.dll (B—GINA.dll的上一级)的属性"Next"删除。 (1-c)如果当前要卸载的GINA DLL存在下一级GINA DLL,但不存 在上一级GINADLL,则将当前要卸载的GINADLL的下一级GINADLL置 为主导GINA DLL。
例如,在图7所示的GINA DLL链中,如果要卸载C—GINA.dll,则将 注册表指定位置下的GinaDLL设置为GinaDLL = A_GINA.dll ( C—GINA.dll 的下一级),并在GINA链表中将A—GINA.dll标识为主导GINADLL。
(2)从GINA链表中删除所述待卸载的GINADLL的全部信息,即将 待卸载的GINA DLL的整个条目从GINA链表中个删除。
例如,在图7所示GINADLL链中,在没有卸载A—GINA.dll时,GINA 链表的内容为
GinaDLL=C—GINA.dll
Capability^ Capability—C >
Interface=< Interface—C > ParamSet=< ParamSet—C > Next = A_GINA.dll
Capability=< Capability—A > Interface=< Interface—A > .. ParamSet=< ParamSet—A > Next = B_GINA.dll
Capability=< Capability—B > Interface=< Interface_B > ParamSet=< ParamSet—B 〉
当A—GINA.dll被卸载后,GINA链表的内容为
GinaDLL-C_GINA.dll
Capability=< Capability一C >
Interface=< Interface—C >
ParamSet=< ParamSet一C >
Next = C一GINA,dll Capability=< Capability_B > Interface=< Interface一B > ParamSet=< ParamSet_B 〉
图IO是本发明实施例一种解决多GINADLL冲突的装置的结构框图。
如图IO所示,该装置包括Winlogori系统程序才莫块100、属于主导GINADLL 的主导GINADLL指定接口模块101和主导GINADLL外部接口模块102、 一个以上的属于不同从属GINA DLL的从属GINA DLL外部接口模块(在 图IO中示意性画出了两个从属GINA DLL外部接口模块103和104)以及 GINA链表存储模块105,其中
Winlogon系统程序模块100,当Windows操作系统启动时,用于根据 注册表指定位置下保存的主导GINADLL的名称加载该主导GINADLL,调 用该主导GINADLL中的主导GINADLL指定接口模块101;
所述主导GINA DLL指定接口模块101,用于获取主导GINA DLL的 外部接口参数,并用该获取的外部接口参数调用主导GINA DLL外部接口才莫 块102;
主导GINA DLL外部接口模块102,用于实现主导GINA DLL自身的业 务逻辑,并根据GINA链表查找到主导GINADLL的下 一级从属GINA DLL 的名称,从该GINA链表中获取该下 一 级从属GINA DLL的外部接口参数, 加载该下一级从属GINADLL,用所述下一级从属GINADLL的外部接口参 数调用下一级从属GINA DLL外部接口模块103;
每一个从属GINA DLL外部接口模块,用在被上一级GINA DLL外部 接口模块调用时,实现本从属GINADLL自身的业务逻辑,并根据所述GINA 链表判断本从属GINA DLL是否存在再下一级GINA DLL;如果存在,则从 该GINA链表中获取该再下一级从属GINA DLL的外部接口参数,加载该再 下一级从属GINADLL,用所述再下一级从属GINA DLL的外部接口参数调 用该再下一级从属GINA DLL外部接口模块;如果不存在,则结束。
如图10所示的装置还进一步包括安装模块106,用于在注册表的指 定位置下保存主导GINADLL的名称,在GINA链表中保存主导GINADLL 和一个以上的从属GINA DLL之间的链式关系信息;所述链式关系信息包 括主导GINADLL的名称、每个从属GINADLL的名称、每个从属GINA DLL的外部接口参数集合、每个从属GINA DLL的外部接口名称,以及各
GINA DLL之间的链式上下级关系。
在图10中安装模块106,用于在不存在主导GINA DLL时,对于第一 个要进行安装的第一 GINA DLL,将第一 GINA DLL的名称保存到注册表的 指定位置下,并将第一 GINA DLL的名称标识为主导GINA DLL保存到 GINA链表中;对于第二个要进行安装的第二 GINADLL,当第一 GINADLL 所能支持的输入参数集合包含第二 GINADLL的外部接口参数集合时,将第 二 GINA DLL的名称保存到GINA链表中,并在GINA链表中将第二 GINA DLL的名称标识为所述第一 GINA DLL的下一级从属GINA DLL,还在 GINA链表中与第二 GINA DLL的名称对应保存第二 GINA DLL的外部接口 参数集合与外部接口名称;反之,当第二 GINADLL所能支持的输入参数集 合包含第一 GINA DLL的外部接口参数集合时,则用第二 GINA DLL的名 称替换注册表的指定位置下的第一 GINA DLL的名称,将第二 GINA DLL 的名称标识为主导GINA DLL保存到GINA链表中,而将第一 GINA DLL 的名称标识为第二 GINA DLL的下一级从属GINA DLL,并与第一 GINA DLL的名称对应保存第一 GINA DLL的外部接口参数集合与外部接口名称; 之后,对于每一个要进行安装的当前GINADLL,将该当前GINA DLL插入 到GINA链表中的GINA DLL链中的指定位置,并满足如下条件当前GINA DLL的上一级GINA DLL所能支持的输入参数集合包含当前GINA DLL的 外部接口参数集合,当前GINADLL多能支持的输入参数集合包含当前 GINA DLL的下一级GINA DLL的外部接口参数集合。
如图10所示的装置还进一步包括卸载模块107,对于GINA链表中 的GINA DLL链中的任一个要进行卸载的当前GINA DLL,如果当前GINA DLL同时存在上一级GINA DLL和下一级GINA DLL,则让当前GINA DLL 的上一级GINA DLL直接指向当前GINA DLL的下一级GINA DLL;如果当 前GINA DLL存在上一级GINA DLL,但不存在下一级GINADLL,则将当 前GINA DLL的上一级GINA DLL置为链尾;如果当前GINA DLL存在下 一级GINADLL,但不存在上一级GINADLL,则将当前GINADLL的下一
级GINADLL置为主导GINADLL;从GINA链表中删除当前GINA DLL的
全部信息。
在图10中,安装模块106进一步用于在所述GINA链表中与每个GINA DLL的名称对应保存该GINADLL所能支持的输入参数的集合。
在图10中,安装模块103在安装主导GINA DLL和一个以上的从属 GINA DLL的过程中,将所述主导GINA DLL和一个以上的从属GINA DLL 都保存到指定目录下;Winlogon系统程序模块100、主导GINADLL外部接 口模块102以及各从属GINADLL外部接口模块,用于从所述指定目录下获 取要加栽的GINADLL并进行加载。
或者,在图10中,安装模块106在安装主导GINADLL和一个以上的 从属GINADLL的过程中,将主导GINADLL和一个以上的从属GINADLL 保存到不同的目录下,并在所述GINA链表中与每个GINA DLL的名称对应 保存该GINA DLL被保存的目录信息;Winlogon系统程序模块100、主导 GINA DLL外部接口模块102以及各从属GINA DLL外部接口模块,用于从 GINA链表获取要加载的GINADLL被保存的目录信息,进而获取要加载 GINA DLL并进行加载。
综上所述,本发明这种当Windows操作系统启动时,主导GINA DLL 由Winlogon系统程序加载和运行,而每个从属GINADLL由其上一级的主 导GINA DLL或从属GINA DLL加载和运行的技术方案,使得多个GINA DLL能够协同工作而不产生沖突
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护 范围,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
权利要求
1、一种解决多图形化识别与验证动态链接库GINA DLL冲突的方法,其特征在于,该方法包括当窗口Windows操作系统启动时,窗口登录Winlogon系统程序根据注册表指定位置下保存的主导GINA DLL的名称加载该主导GINA DLL,调用该主导GINA DLL中的指定接口,由该指定接口获取主导GINA DLL的外部接口参数,并用该获取的外部接口参数调用主导GINA DLL的外部接口;所述主导GINA DLL的外部接口实现该主导GINA DLL自身的业务逻辑,并根据预设的GINA链表查找到主导GINA DLL的下一级从属GINA DLL的名称,从该GINA链表中获取该下一级从属GINA DLL的外部接口参数,加载该下一级从属GINA DLL,用所述下一级从属GINA DLL的外部接口参数调用下一级从属GINA DLL的外部接口;对于每一个当前从属GINA DLL,该当前从属GINA DLL的外部接口被上一级GINA DLL调用时,当前从属GINA DLL的外部接口实现本从属GINA DLL自身的业务逻辑,并根据所述GINA链表判断本从属GINA DLL是否存在再下一级GINA DLL;如果存在,则从该GINA链表中获取该再下一级从属GINA DLL的外部接口参数,加载该再下一级从属GINA DLL,用所述再下一级从属GINA DLL的外部接口参数调用该再下一级从属GINADLL的外部接口;如果不存在,则结束。
2、如权利要求1所述的方法,其特征在于,该方法在所有步骤之前进 一步包括安装主导GINA DLL和一个以上的从属GINADLL,以使得在注册表的 指定位置下保存主导GINA DLL的名称,在GINA链表中保存主导GINA DLL和一个以上的从属GINA DLL之间的链式关系信息;所述链式关系信 息包括主导GINA DLL的名称、每个从属GINA DLL的名称、每个从属 GINA DLL的外部接口参数集合、每个从属GINA DLL的外部接口名称,以及各GINA DLL之间的链式上下级关系。
3、 如权利要求2所述的方法,其特征在于,所述安装主导GINA DLL 和一个以上的从属GINA DLL包括当不存在主导GINA DLL时,对于第 一个要进行安装的第一 GINA DLL, 将第一 GINADLL的名称保存到注册表的指定位置下,并将第一 GINA DLL 的名称标识为主导GINA DLL保存到GINA链表中;对于第二个要进行安装的第二 GINADLL,当第一 GINADLL所能支持 的输入参数集合包含第二 GINADLL的外部接口参数集合时,将第二 GINA DLL的名称保存到GINA链表中,并在GINA链表中将第二 GINA DLL的 名称标识为所述第一 GINADLL的下一级从属GINADLL,还在GINA链表 中与第二 GINA DLL的名称对应保存第二 GINA DLL的外部接口参数集合 与外部接口名称;反之,当第二 GINADLL所能支持的输入参数集合包含第 一 GINA DLL的外部接口参数集合时,则用第二 GINA DLL的名称替换注 册表的指定位置下的第一 GINA DLL的名称,将第二 GINA DLL的名称标 识为主导GINA DLL保存到GINA链表中,而将第一 GINA DLL的名称标 识为第二 GINA DLL的下 一 级从属GINA DLL,并与第一 GINA DLL的名称 对应保存第一 GINA DLL的外部接口参数集合与外部接口名称;之后,对于每一个要进行安装的当前GINADLL,将该当前GINA DLL 插入到GINA链表中的GINA DLL链中的指定位置,并满足如下条件当前 GINA DLL的上一级GINA DLL所能支持的输入参数集合包含当前GINA DLL的外部接口参数集合,当前GINA DLL多能支持的输入参数集合包含 当前GINA DLL的下一级GINA DLL的外部接口参数集合。
4、 如权利要求3所迷的方法,其特征在于,该方法进一步包括对于 GINA链表中的GINA DLL链中的任一个要进行卸栽的当前GINA DLL,如果当前GINADLL同时存在上一级GINA DLL和下一级GINA DLL, 则让当前GINA DLL的上一级GINA DLL直接指向当前GINA DLL的下一 级GINA DLL;如果当前GINA DLL存在上一级GINA DLL,但不存在下一级GINA DLL,则将当前GINA DLL的上一级GINA DLL置为链尾;如果当前GINA DLL存在下一级GINA DLL,但不存在上一级GINA DLL,则将当前GINA DLL的下一级GINA DLL置为主导GINA DLL;从GINA链表中删除当前GINA DLL的全部信息。
5、 如权利要求3或4所述的方法,其特征在于,该方法进一步包括 在所述GINA链表中与每个GINA DLL的名称对应保存该GINA DLL所能支持的输入参数的集合。
6、 如权利要求3或4所迷的方法,其特征在于, 在所述安装主导GINA DLL和一个以上的从属GINA DLL的过程中,所述主导GINA DLL和一个以上的从属GINA DLL都被保存到了指定目录 下;所述加载GINA DLL是/人所述指定目录下获取要加载的GINA DLL并 进行力口载;或者,在所述安装主导GINA DLL和一个以上的乂人属GINA DLL的过 程中,所述主导GINA DLL和一个以上的从属GINA DLI^皮保存到了不同 的目录下;在所述GINA链表中与每个GINA DLL的名称对应保存该GINA DLL被保存的目录信息;所述加载GINA DLL是从GINA链表获取要加载 的GINADLL被保存的目录信息,进而获取要加载GINA DLL并进行加载。
7、 一种解决多GINADLL冲突的装置,其特征在于,该装置包括 Winlogon系统程序模块、属于主导GINA DLL的主导GINA DLL指定接口 模块和主导GINA DLL外部接口模块、一个以上的属于不同从属GINA DLL 的从属GINA DLL外部接口模块和GINA链表存储模块,其中,所迷Winlogon系统程序模块,当Windows操作系统启动时,用于根据 注册表指定位置下保存的主导GINADLL的名称加载该主导GINADLL,调 用该主导GINA DLL中的主导GINA DLL指定接口模块;所述主导GINADLL指定接口模块,用于获取主导GINA DLL的外部 接口参数,并用该获取的外部接口参数调用主导GINA DLL外部接口模块;所述主导GINA DLL外部接口模块,用于实现主导GINA DLL自身的 业务逻辑,并根据GINA链表查找到主导GINADLL的下 一级从属GINA DLL 的名称,从该GINA链表中获取该下一级从属GINA DLL的外部接口参数, 加载该下一级从属GINADLL,用所述下一级从属GINADLL的外部接口参数调用下一级从属GINADLL外部接口模块;每一个从属GINA DLL外部接口模块,用在被上一级GINA DLL外部 接口模块调用时,实现本从属GINADLL自身的业务逻辑,并根据所述GINA 链表判断本从属GINADLL是否存在再下一级GINADLL;如果存在,则从 该GINA链表中获取该再下一级从属GINADLL的外部接口参数,加载该再 下一级从属GINADLL,用所述再下一级从属GINADLL的外部接口参数调 用该再下一级从属GINA DLL外部接口模块;如果不存在,则结束。
8、 如权利要求7所述的装置,其特征在于,该装置进一步包括安装 模块,用于在注册表的指定位置下保存主导GINADLL的名称,在GINA链 表中保存主导GINA DLL和一个以上的从属GINA DLL之间的链式关系信 息;所述链式关系信息包括主导GINADLL的名称、每个从属GINADLL 的名称、每个从属GINA DLL的外部接口参数集合、每个从属GINA DLL 的外部接口名称,以及各GINA DLL之间的链式上下级关系
9、 如权利要求8所述的装置,其特征在于,所述安装模块, 用于在不存在主导GINADLL时,对于第一个要进行安装的第一 GINADLL,将第一 GINADLL的名称保存到注册表的指定位置下,并将第一 GINA DLL的名称标识为主导GINA DLL保存到GINA链表中;对于第二个要进行安装的第二 GINADLL,当第一 GINA DLL所能支持 的输入参数集合包含第二 GINADLL的外部接口参数集合时,将第二 GINA DLL的名称保存到GINA链表中,并在GINA链表中将第二 GINA DLL的 名称标识为所述第一 GINA DLL的下 一级从属GINA DLL,还在GINA链表 中与第二 GINA DLL的名称对应保存第二 GINA DLL的外部接口参数集合 与外部接口名称;反之,当第二 GINADLL所能支持的输入参数集合包含第一GINA DLL的外部接口参数集合时,则用第二 GINA DLL的名称替换注 册表的指定位置下的第一 GINA DLL的名称,将第二 GINA DLL的名称标 识为主导GINA DLL保存到GINA链表中,而将第一 GINA DLL的名称标 识为第二 GINA DLL的下一级从属GINA DLL,并与第一 GINA DLL的名称 对应保存第一 GINA DLL的外部接口参数集合与外部接口名称;之后,对于每一个要进行安装的当前GINADLL,将该当前GINA DLL 插入到GINA链表中的GINA DLL链中的指定位置,并满足如下条件当前 GINA DLL的上一级GINA DLL所能支持的输入参数集合包含当前GINA DLL的外部接口参数集合,当前GINA DLL多能支持的输入参数集合包含 当前GINA DLL的下一级GINA DLL的外部接口参数集合。
10、 如权利要求9所述的装置,其特征在于,该装置进一步包括卸载 模块,对于GINA链表中的GINA DLL链中的任一个要进行卸载的当前GINA DLL ,如果当前GINA DLL同时存在上 一 级GINA DLL和下 一 级GINA DLL, 则让当前GINA DLL的上一级GINA DLL直接指向当前GINA DLL的下一 级GINA DLL;如果当前GINA DLL存在上 一 级GINA DLL,但不存在下一 级GINA DLL,则将当前GINADLL的上一级GINA DLL置为链尾;如果当 前GINA DLL存在下一级GINA DLL,但不存在上一级GINA DLL,则将当 前GINA DLL的下 一级GINA DLL置为主导GINA DLL;从GINA链表中删 除当前GINA DLL的全部信息。
11、 如权利要求9或IO所述的装置,其特征在于,所述安装模块,进 一步用于在所述GINA链表中与每个GINA DLL的名称对应保存该GINA DLL所能支持的输入参数的集合。
12、 如权利要求9或IO所述的装置,其特征在于, 所述安装模块,在安装主导GINA DLL和一个以上的从属GINA DLL的过程中,将所述主导GINA DLL和一个以上的从属GINA DLL都保存到 指定目录下;所述Winlogon系统程序模块、主导GINA DLL外部接口模块以及各从 属GINADLL外部接口模块,用于从所述指定目录下获取要加载的GINA DLL并进行加栽;或者,所述安装模块,在安装主导GINADLL和一个以上的从属GINA DLL的过程中,将主导GINA DLL和一个以上的从属GINA DLL保存到不 同的目录下,并在所述GINA链表中与每个GINA DLL的名称对应保存该 GINA DLL被保存的目录信息;所述Winlogon系统程序模块、主导GINA DLL外部接口模块以及各从 属GINA DLL外部接口模块,用于从GINA链表获取要加载的GINADLL被 保存的目录信息,进而获取要加载GINA DLL并进行加载。
全文摘要
本发明公开了一种解决多图形化识别与验证动态链接库GINA DLL冲突的方法,包括当Windows操作系统启动时,主导GINA DLL由Winlogon系统程序加载和运行,而每个从属GINA DLL由其上一级的主导GINA DLL或从属GINA DLL加载和运行。本发明该公开了一种解决多GINA DLL冲突的装置。本发明的技术方案,使得多个GINA DLL能够协同工作而不产生冲突。
文档编号G06F9/445GK101387968SQ20081022362
公开日2009年3月18日 申请日期2008年9月28日 优先权日2008年9月28日
发明者刘恒胜, 卢志坚 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1