编辑:事实证明我可能想得太多了。请参阅下面的答案。
这对 SuperUser 来说可能更好,也可能不好,这是关于一些工作站未能遵守企业标准的问题。此处的所有参考均针对 Win7 Professional 安装。
本质上,某台机器在计算机锁定时会显示以下内容:
而不是这样:
这是一个很大的变化。显示的是不同的凭证提供商图块,我们所有的品牌都被撕掉了。正常行为是直接进入解锁 PC 的提示,但这台机器要求您实际单击“用户解锁”图块。
当你这样做时,会出现一个相当通用的提示,同样没有品牌,也没有预先填充的用户名。我怀疑它可能是操作系统默认配置中的默认提供商之一。
不幸的是,我无法再访问损坏的系统(我建议当地技术人员重新进行映像,因为在我们的情况下这是一个选项,并且对于罕见的问题来说速度更快)。
有谁知道解决这类问题的好方法吗?自从给出重新映像建议以来,我比较了两个系统上的凭据提供程序注册表,主要区别似乎是损坏的系统上没有 Novell 凭据提供程序。显然,当安装此凭据提供程序时,它会定义自己的过滤器列表。主凭据提供程序列表中没有过滤器:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Provider Filters\
,
过滤器列表仅包含通用条目(我认为它是 {DDC0EED2-ADBE-40b6-A217-EDE16A79A0DE}),因此它不会重定向到 novell 列表:
HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Authentication\NCCredProvider\FilterList
该过滤器列表包含一些更熟悉的提供程序,例如{6f45dc1e-5384-457a-bc13-2cd81b0d28ed}。
我目前怀疑根本原因要么是组策略中出现了问题(很可能是本地机器的问题,否则整个站点都会出现问题),要么是 Novell 客户端配置错误或尝试卸载,从而与我们的企业 MOE 产生负面交互,而企业 MOE 假定 Novell 身份验证提供程序会存在。
更新
检查了我的家庭系统后,我没有发现注册表与损坏的系统有任何明显差异。过滤器 GUID DDC0EED2-ADBE-40b6-A217-EDE16A79A0DE 在两种情况下都链接到 authui.dll,并且 Cred Provider 列表似乎大致相同。
但是,当工作站被锁定时,我的家庭系统会直接进入默认解锁提示(我的用户名已预先填充),类似于上面没有品牌的图像 2,这很不寻常,因为这个“用户解锁”提供程序似乎是默认的后备,但它并没有出现在家庭系统上,而且我根本没有摆弄家庭系统上的凭证提供程序行为。尽管两者都使用通用过滤器,但它们似乎表现出不同的行为。
然而,在网上很难找到有关凭证提供商管理(而不是对其进行编码)的任何信息,这让我怀疑是否有人习惯于处理这些问题,是否有一个好的清单可以查阅,以便更快地追踪这些问题。
像:
- 凭证提供程序服务是否会在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication 以外的任何地方查找其提供程序(不包括使用此处的 GUID 查找 classes_root)?例如,它是否会在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Authentication 处检查 Wow6432node 版本?
- 是否有任何形式的日志记录可以打开(或打开,如果它记录到事件查看器)?如果它默认或在调整设置后显示在事件查看器中,我应该在哪些日志中查找哪些事件 ID?
- 结合并扩展上述内容,是否有人可以提供现有的良好故障排除文档的链接,或者更好的完整描述,说明凭据提供程序如何从注册表项和 CLSID DLL 引用转变为用户最终看到的特定图块?(不是规范或如何自己动手,而是构建在各种情况下向用户显示的各种凭据提供程序屏幕的端到端过程。)
答案1
我已经发现并解决了此案例中的问题。在编译了自己的凭证提供程序并仔细检查注册表后,解决方案出奇地简单。
(所有故障排除和图片编辑均在 Win7 机器上完成。)
为 Windows 8/8.1 设计的 SCCM 品牌应用程序包被错误地部署到了 Windows 7 计算机上。虽然大多数影响只是表面的,但
C:\ProgramData\Microsoft\用户帐户图片\user.bmp
文件被搞乱了,足以混淆凭证提供程序(尽管可以在 MSpaint 和 Windows 图像查看器中查看)。常规登录提供程序没有显示空白图块,而是完全失败并且根本不显示任何图块,从而导致锁定 PC 后无法进行常规登录。
事实上,删除(手动添加,专为管理员解锁机器而设计的)用户解锁提供程序会导致屏幕完全空白,根本没有登录选项。
这似乎是糟糕的错误处理 - 在显示用户图块时出现的任何错误都应该导致凭据提供程序放弃处理并仅显示空白图块或从某处拉取的默认图块? 也就是说,这肯定是一个特殊的失败案例,相比之下,一个完全损坏的位图文件(在十六进制编辑器中乱七八糟,直到 paint 和 WIM 无法打开它),成功失败处理并显示一个空白的可用图块:
(忽略智能卡提供商的突然出现。这是一台有同样问题的另一台机器,一台笔记本电脑,我很确定它已经有这个提供商了。)
似乎没有立即明显的方法来找到所使用的位图编码,但对我来说,解决这个问题就像在 mspaint 中打开文件、更改单个像素并保存一样简单。
在十六进制编辑器中查看问题文件,数据部分中存在大量无关的空值,其模式为三个字节的像素数据 + 1 个空值。相比之下,paint 保存的版本在标头部分之后没有空值。paint 版本的标头也短了大约 100 个字节。
我将在 Windows 8.1 机器上再次运行此程序,看看行为是否不同。也许该操作系统中的登录 UI 可以更好地处理它们(事实上,导致问题的图像很可能仅在 Windows 8/8.1 上创建和测试)。