gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:13:26 30 4
gpt4 key购买 nike

我正在使用 C++ win32 API。

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

我已经将此功能用于系统登录对话框源(GINA)。在我的日志文件中,它给出了

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

但它是在登录系统后使用的,那时它会在我的其他解决方案中提供用户详细信息,如 "CN=sanju,CN=USERS,DC=JEGAN,DC=COM"

我只想要用户详细信息,但它在登录时提供了系统详细信息,我怎样才能在登录时获得用户详细信息?

注意:我已经尝试过ADSI、LDAP功能和目录服务无法使用。所以建议任何其他系统功能。

最佳答案

David 是正确的 - GINA DLL 由 WinLogon.exe 进程加载。检查任务管理器,您会看到 WinLogon.exe 作为本地系统运行。 GetUserNameGetUserNameEx 函数提供有关当前线程身份的信息:

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

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

您可以尝试改用网络提供商。它们在 Windows 8 中得到完全支持,并且可以为系统定义多个 NP,因此您不会遇到 GINA 所具有的“链接”问题。

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

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

关于c++ - GetUserNameExA 函数无法在系统启动时(GINA)提供用户详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13450125/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com