1

私は c++ win32 API を使用しています。

GetUserNameExA(); を使用してユーザーの詳細を取得しようとしました。

この関数をシステム ログオン ダイアログ ソース (GINA) に使用しました。私のログファイルでは、それは

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

しかし、システムへのログオン後に使用され、その時点で"CN=sanju,CN=USERS,DC=JEGAN,DC=COM"、他のソリューションのようにユーザーの詳細が提供されます。

ユーザーの詳細のみが必要ですが、ログオン時にシステムの詳細が表示されます。ログオン時にユーザーの詳細を取得するにはどうすればよいですか?

注:私はすでにADSIを試しましたが、LDAP機能とディレクトリサービスは使用できません。他のシステム機能を提案してください。

4

2 に答える 2

5

David is correct - the GINA DLL is loaded by the WinLogon.exe process. Check Task Manager and you'll see that WinLogon.exe runs as Local System. The GetUserName and GetUserNameEx functions provide information about the identity for the current thread:

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

From a 20,000 foot view, after a user's credentials have been validated, the GINA notifies all Network Providers of the successful login. After this, it loads the user's profile and creates the user's shell (Explorer.exe) which is then displayed.

You might try using a Network Provider instead. They are fully supported up through Windows 8 and multiple NPs can be defined for the system so you won't run into the 'chaining' issues that GINAs have.

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

The NPLogonNotify function will receive the user's cleartext name, domain and password (sometimes you'll receive a UPN as username in which case the domain is blank). You can use this information as is, perform LDAP-based lookups to AD or use LogonUser & ImpersonateLoggedOnUser before calling GetUserNameEx. Be extremely careful with this last approach since network providers run as Local system within the WinLogon.exe process. Always call RevertToSelf and CloseHandle to undo/clean up the previous calls.

于 2012-11-19T19:27:09.960 に答える
0

あなたがやろうとしていることに対する唯一の(かなり風変わりな)回避策は、ドメインにアクセスできる側の他のユーザーアカウントにログオンして、ユーザーの詳細を照会できるようにすることです(詳細に必要な権限を覚えていないでください) . それ以外の場合は、Gregg の回答を使用することをお勧めします。

そのようなユーザーとして偽装されたスレッドを使用すると、ログオンしようとしているユーザーの情報を照会できるはずです (その時までにどのように知ることができますか?) NetUserGetInfo()。ニーズに最も適したものを選択しUSER_INFO_* struct、ドメイン サーバーに情報を問い合わせてください。これは、以前および以降のシステムでも機能するはずです (GINA 自体ではなく、機能)。

于 2012-11-19T19:36:13.703 に答える