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功能和目录服务无法使用.因此建议任何其他系统功能.
大卫是正确的 - GINA DLL由WinLogon.exe进程加载.检查任务管理器,您将看到WinLogon.exe作为本地系统运行.该GetUserName和GetUserNameEx功能提供有关信息标识为当前线程:
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