想不想拥有自己个性化的WIN2000登陆界面呢?本文就教你如何实现。
你可以通过编程替换掉微软的MSGINA.DLL,用来实现自己的密码登陆验证功能,如图,我就加入了两个密码验证的功能。
一、原理
在NT/2000中交互式的登陆支持是由WinLogon调用GINA DLL实现的,GINA DLL提供了一个交互式的界面为用户登陆提供认证请求。WinLogon会和GINA DLL进行交互,缺省是MSGINA.DLL(在System32目录下)。微软同时也为我们提供了接口,我们可以自己编写GINA DLL来代替MSGINA.DLL。
WinLogon初始化时会创建3个桌面:
(1)、winlogon桌面:主要显示Windows 安全等界面,如你按下CTRL+ALT+DEL,登陆的界面等
(2)、应用程序桌面:我们平时见到的那个有我的电脑的界面
(3)、屏幕保护桌面:屏幕保护显示界面。
在默认情况下,GINA显示登陆对话框,用户输入用户名及密码 。所以要获得用户名和密码 ,则可以写一个新的GINA DLL,其中提供接口调用msgina.dll的函数WlxLoggedOutSAS。
二、程序实现
GINA DLL要输出下列函数(winlogon会调用):
(表一)GINA 函数一览表
函数 |
描述 |
WlxActivateUserShell |
激活用户外壳程序 |
WlxDisplayLockedNotice |
允许GINA DLL 显示锁定信息 |
WlxDisplaySASNotice |
当没有用户登陆时,Winlogon调用此函数 |
WlxDisplayStatusMessage |
Winlogon 用一个状态信息调用此函数进行显示 |
WlxGetConsoleSwitchCredentials |
Winlogon调用此函数读取当前登陆用户的信任信息,并透明地将它们传到目标会话 |
WlxGetStatusMessage |
Winlogon 调用此函数获取当前状态信息 |
WlxInitialize |
针对指定的窗口位置进行GINA DLL初始化 |
WlxIsLockOk |
验证工作站正常锁定 |
WlxIslogoffOk |
验证注销正常 |
WlxLoggedOnSAS |
用户已登陆并且工作站没有被加锁,如果此时接收到SAS事件,则Winlogon 调用此函数 |
WlxLoggedOutSAS |
没有用户登陆,如果此时收到SAS事件,则Winlogon 调用此函数, This indicates that a logon attempt should be made 。 |
WlxLogoff |
请求注销操作时通知GINA DLL |
WlxNegotiate |
表示当前的Winlogon版本是否能使用GINA DLL |
WlxNetworkProviderLoad |
在加载网络服务提供程序收集了身份和认证信息后,Winlogon 调用此函数 |
WlxRemoveStatusMessage |
Winlogon 调用此函数告诉GINA DLL 停止显示状态信息 |
WlxScreensaverNotify |
允许GINA与屏幕保护操作交互 |
WlxShutdown |
在关闭之前Winlogon 调用此函数,允许GINA实现任何关闭任务,例如从读卡器中退出智能卡 |
WlxStartApplication |
当系统需要在用户的上下文中启动应用程序时调用此函数 |
WlxWkstaLockedSAS |
当工作站被锁定,如果接收到一个SAS,则Winlogon 调用此函数 |
为了简化编程,我们从MSGINA.DLL中动态获取上述函数,在自定义的DLL中(以下称为MyGina.DLL)中直接调用MSGINA.DLL的函数即可。现在我们要处理的就是WlxLoggedOutSAS函数:
int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{
//=========================加入我的登陆=========================
Clogin login;
if (login.DoModal()==IDCANCEL)
{
return WLX_SAS_ACTION_NONE;
}
if(login.bCLOSE==TRUE)
{
return WLX_SAS_ACTION_SHUTDOWN;
}
if(login.DoModal()==IDOK)
{
char UserName[40];
char PassWord[40];
char PassWord2[40];
strcpy(UserName,theApp.MyUser);
strcpy(PassWord,theApp.MyPass);
//在这里,我为了简便,直接在程序里面比较密码,并且把默认管理员帐号设置为自动登陆
//自动登陆函数SetAutoLogon
strcpy(PassWord2,theApp.MyPass2);
// AfxMessageBox(UserName);
// AfxMessageBox(PassWord);
if(!strcmp(UserName,"Administrator"))
if(!strcmp(PassWord,"123"))
if(!strcmp(PassWord2,"456"))
{
SetAutoLogon("administrator","","123");
return theApp.MyWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,
pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
}
}
AfxMessageBox("密码或者用户名错误!不能登陆!");
return WLX_SAS_ACTION_NONE;
}
然后设计登陆框,实现自己的界面,具体实现就不再详细说明了,可以参考代码。
三、安装和注意事项:
在编写GIAN DLL中要注意,GINA DLL使用的是unicode。
【安装】GINA DLL的安装:
1. 添加注册表
键名 : \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
变量名 : GinaDLL
变量类型 : [REG_SZ]
内容 : "你的GINA DLL的名称" 如:"MyGina.DLL:
2. 将你的GINA DLL(MyGina.dll)拷贝到系统目录下(system32);
3. 重启机器,你的GINA DLL(MyGina.dll)就会运行。
【注意】
1. 如果出现进不了你的系统,那你进入DOS后,将msgina.dll拷贝成你的GINA DLL(MyGina.dll)就可进入了;或者进入安全模式,删除掉那个键值( GinaDLL )。
2. Console 程序如果想使用MFC类,必须包含<afx.h>,同时注释掉<windows.h>。
3. 如果出现这种错误:“LINK : fatal error LNK1104: cannot open file "mfc42u.lib" ”,那么说明 lib路径的设置问题,你的链接器在指定的目录下没有找到这个的文件,你应该添加新的目录以便编译器找到所需的库文件。具体位置:IDE中 菜单Tools\Options\Directories\show directories for\ <library files>。
4. 如果出现这种错误:“uafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj ”或者“mfcs42ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj ”,那么“See if you have _AFXDLL and _USRDLL in the preprocessor definitions. Try removing one of them”。具体位置:IDE中 菜单Project \ Setting \ C/C++ \ preprocessor definition 。
分享到:
相关推荐
标题中的"GINA1.zip_gina_zip"表明这是一个与GINA(Graphical Identification and Authentication)相关的压缩文件,可能包含一个...对于IT专业人士,理解和应用这些知识点有助于构建更加安全和定制化的登录环境。
* WlxStartApplication:当系统需要在用户的上下文中启动应用程序时调用此函数 * WlxWkstaLockedSAS:当工作站被锁定,如果接收到一个SAS,则Winlogon调用此函数 为了简化编程,我们可以从MSGINA.DLL中动态获取上述...
测试了很多人写的gina,发现只有这两个gina源代码可以在xp下用.注意请按安装方法使用. cooldoggina的界面做的很不错,内容很多. ginastub及其精简,就几个必须的接口函数,一点多余功能都没有. 可以在vc6.0下编译通过....
2. **兼容性**:自定义GINA可能会影响与其他系统的兼容性,特别是当涉及到旧版Windows或特定的应用程序时。测试在各种环境中运行的性能和稳定性至关重要。 ### 文件`ginafull`分析 由于没有提供具体的`ginafull`...
四、应用与安全性 虽然现代Windows系统倾向于使用Credential Providers,但Gina的概念仍然有价值,特别是对于需要在旧版Windows系统上实施特殊认证策略的情况。自定义Gina可以增强系统的安全性,例如,集成多因素...
在提供的压缩包文件"GINA"中,可能包含了一个示例的自定义Gina DLL以及相关文档或说明,用于指导开发者如何创建和应用自定义Gina。这些资源可能包括源代码、编译后的DLL、示例配置、使用教程等,帮助理解Gina的工作...
描述中提到的“加入了两个密码验证的功能”,意味着开发人员可能创建了一个新的DLL文件,该文件包含两种不同的验证方式,可能是为了提高安全性或满足特定应用场景的需求。这可能包括如双因素认证、硬件令牌验证或...
本篇文章将深入探讨MS GINA及其附带的完整源代码样本——gina.sample.zip_full_gina_gina_source_code,帮助读者理解其工作原理和可能的应用场景。 首先,让我们了解什么是GINA。GINA,全称为Graphical ...
5. **应用更改**:在"cooldoggina"中应用新logo,程序会自动处理替换系统中的Gina组件。 6. **重启系统**:为了使更改生效,需要重启你的计算机。登录时,你应该能看到新的登录logo。 7. **测试与检查**:确认修改...
在儿科应用中,GINA涵盖了哮喘的定义、描述、诊断、评估和治疗,特别强调了儿童哮喘的识别。对于6岁及以上的孩子,诊断依据包括多变的呼吸系统症状史、支气管扩张剂的可逆性试验、肺功能测试(如PEF检测)以及过敏原...
ADSelfServicePlus应用场景-Gina
GINA,全称为全球哮喘倡议...综上所述,GINA在儿科科学中的应用是一个全面的、动态的过程,涵盖哮喘的定义、诊断、管理和预防,旨在确保每个哮喘患者都能得到恰当的、个性化的治疗,以改善他们的生活质量并减少并发症。
同时,也需要了解替换Gina可能带来的潜在风险,比如可能导致某些应用或服务无法正常运行,或者与某些硬件或软件组件不兼容。 总的来说,"gina 完全替换msgina"是一种高级的系统定制行为,适用于对系统安全有特殊...
Delphi是一款强大的面向对象的Pascal编程环境,它为开发者提供了丰富的工具和库来构建桌面应用程序。 标题“RPI.rar_gina delphi”暗示了这是一个关于使用Delphi开发Gina相关组件或模块的资源包。这个压缩文件可能...
《My Name Is Gina》教案是针对七年级英语教学的一个单元,该单元主要集中在学习和复习数字,特别是从0到9的英文表达。本教案详细规划了教学内容、目标、学习者特征、教学策略、教学重点与难点,以及教学过程。 一...
日历登录管理器通过自定义GINA模块,实现了对登录界面的个性化改造,允许用户在登录过程中直接查看和操作日历,而无需切换到其他应用。 此登录管理器的特色在于其用户友好的界面设计。它将日历直观地显示在登录窗口...
3. **示例应用**:例如,如果你有一个企业内部的单点登录(SSO)系统,可以创建一个自定义的GINA模块,使得用户只需输入一次凭证就可以访问所有系统资源。 在提供的压缩包文件中,可能包含了一些关于如何使用DELPHI...
### 远程注销Gina知识点解析 #### 一、Gina概述 "Gina"是“Graphical Identification and Authentication”的缩写,在Windows系统中主要用于处理用户的登录、注销等身份验证过程。Gina模块作为Windows安全子系统的...
标题中的"Configuración de página_excel_"指的是在Excel中对工作表页面的设置,这通常涉及到打印设置、页面布局和样式调整。在这个话题中,我们将深入探讨如何通过使用宏(Macros)来自动化这些配置过程。 Excel...
此外,HTML5引入了许多新元素,如`<canvas>`用于图形绘制,`<audio>`和`<video>`用于多媒体播放,这些都可能在这个项目中有所应用。 项目中可能还涵盖了CSS(Cascading Style Sheets)来控制页面的样式和布局,以及...