获取用户连接到没有域的Windows网络中的计算机的用户的SID。
使用简单的Windows共享。当用户浏览器计算机在网络中共享时,系统会提示他输入存储在凭证缓存中的凭据。
有三种情况(我发现):
本地计算机上的已登录用户匹配(名称和 密码)网络中计算机上的用户。然后没有提示 显示,用户在网络计算机上自动记录。
lcal计算机上的已登录用户与现有用户不匹配 用户在网络计算机上。系统会提示用户输入对话框 输入用户名和密码,可选择记住 输入凭据 - 这可能导致:
2.1。用户确实记住输入的凭据 - 然后是 存储在凭证缓存中,即使在那里也可用 用户注销并再次登录。
2.2。用户不记得要记住 输入凭证 - 然后将它们存储在某个会话中 凭证缓存并在用户注销之前使用。
如何将用户名转换为SID - 可以使用API方法(LookupAccountName
完成,即使对于存储在网络计算机上的用户也是如此)。 这实际上帮助我解决了案例1.因为我只是将当前用户名转换为远程计算机上的SID。
如何阅读凭据缓存并获取相应计算机存储在那里的用户名 - 可以使用方法CredGetTargetInfo
和CredReadDomainCredentials
的组合来完成,这将有助于我解决案例2.1。
而我不知道 - 如果有办法解决案例2.2 - 因为我找不到如何获取仅存储在当前会话中的凭据的方法。这意味着当用户从他们那里被提出但没有勾选商店/记住复选框时。它们在凭证缓存中找不到,但在用户在登录会话期间再次访问远程计算机时会使用它们。
最后一点:项目实际上是用c#(。NET2.0)编写的,但我使用pinvoke来调用这些提到的方法。如果有一种框架方式来实现我想要做的事情,那么优秀但Windows API也可以。