GetUserNameExA函数在系统启动时(GINA)无法提供用户详细信息?

San*_*onu 1 c++ windows dns winapi active-directory

我正在使用c ++ win32 API.

我试图使用GetUserNameExA()获取用户详细信息;

我已将此功能用于系统logondialog源(GINA).在我的日志文件中,它给出了

CN=ComputerName,CN=Computers,DC=JEGAN,DC=COM".

但它在登录系统后使用,当时它提供了用户详细信息,就像"CN=sanju,CN=USERS,DC=JEGAN,DC=COM"在我的其他解决方案中一样.

我只想要用户详细信息,但它在登录时提供系统详细信息,如何在登录时获取用户详细信息?

注意:我已经尝试过ADSI,LDAP功能和目录服务无法使用.因此建议任何其他系统功能.

Gre*_*ski 5

大卫是正确的 - GINA DLL由WinLogon.exe进程加载.检查任务管理器,您将看到WinLogon.exe作为本地系统运行.该GetUserNameGetUserNameEx功能提供有关信息标识为当前线程:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724435.aspx

从20,000英尺的视图,在验证用户的凭据后,GINA会通知所有网络提供商成功登录.在此之后,它加载用户的配置文件并创建用户的shell(Explorer.exe),然后显示该shell.

您可以尝试使用网络提供商.它们通过Windows 8得到完全支持,并且可以为系统定义多个NP,因此您不会遇到GINA具有的"链接"问题.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa378775.aspx

NPLogonNotify函数将接收用户的明文名称,域名和密码(有时您将收到UPN作为用户名,在这种情况下域名为空).您可以按原样使用此信息,对AD执行基于LDAP的查找或在调用之前使用LogonUser&.最后一种方法要非常小心,因为网络提供程序在WinLogon.exe进程中作为本地系统运行. 始终呼叫并撤消/清除以前的呼叫.ImpersonateLoggedOnUserGetUserNameExRevertToSelfCloseHandle