有没有办法如何获取当前会话中存储的凭据?

时间:2014-03-05 06:24:37

标签: .net windows winapi

我想要达到的目标(背景)

获取用户连接到没有域的Windows网络中的计算机的用户的SID。

使用简单的Windows共享。当用户浏览器计算机在网络中共享时,系统会提示他输入存储在凭证缓存中的凭据。

有三种情况(我发现):

  1. 本地计算机上的已登录用户匹配(名称和 密码)网络中计算机上的用户。然后没有提示 显示,用户在网络计算机上自动记录。

  2. lcal计算机上的已登录用户与现有用户不匹配 用户在网络计算机上。系统会提示用户输入对话框 输入用户名和密码,可选择记住 输入凭据 - 这可能导致:

    2.1。用户确实记住输入的凭据 - 然后是   存储在凭证缓存中,即使在那里也可用   用户注销并再次登录。

    2.2。用户不记得要记住   输入凭证 - 然后将它们存储在某个会话中   凭证缓存并在用户注销之前使用。

  3. 我所知道的(做过)

    • 如何将用户名转换为SID - 可以使用API​​方法(LookupAccountName完成,即使对于存储在网络计算机上的用户也是如此)。 这实际上帮助我解决了案例1.因为我只是将当前用户名转换为远程计算机上的SID。

    • 如何阅读凭据缓存并获取相应计算机存储在那里的用户名 - 可以使用方法CredGetTargetInfoCredReadDomainCredentials 的组合来完成,这将有助于我解决案例2.1。

    我的问题是什么(问题)

    而我不知道 - 如果有办法解决案例2.2 - 因为我找不到如何获取仅存储在当前会话中的凭据的方法。这意味着当用户从他们那里被提出但没有勾选商店/记住复选框时。它们在凭证缓存中找不到,但在用户在登录会话期间再次访问远程计算机时会使用它们。

    最后一点:项目实际上是用c#(。NET2.0)编写的,但我使用pinvoke来调用这些提到的方法。如果有一种框架方式来实现我想要做的事情,那么优秀但Windows API也可以。

0 个答案:

没有答案