本文有助于避免使用未知环境变量时记录的组策略错误事件。
原始 KB 数: 2003730
现象
如果运行的是 Active Directory 林并使用文件系统安全策略,可能会看到记录以下事件:
Windows Vista、Windows Server 2008、Windows 7 和 Windows Server 2008 R2 会将此事件记录到组策略操作日志:
日志名称:Microsoft-Windows-GroupPolicy/Operational
来源:Microsoft-Windows-GroupPolicy
事件 ID:7016
任务类别:无
级别: 错误
关键字:
用户: 系统
说明:
已完成 20984 毫秒的安全扩展插件处理。
事件 Xml:
<事件 xmlns=“http://schemas.microsoft.com/win/2004/08/events/event">
...
<EventData>
<数据名称=“CSEElaspedTimeInMilliSeconds”>20984</Data>
<数据名称=“ErrorCode”>1252</Data>
<数据名称=“CSEExtensionName”>Security</Data>
<数据名称=“CSEExtensionId”>{827D319E-6EAC-11D2-A4EA-00C04F79F83A}</Data>
</EventData>
</事件>Windows XP 和 Windows Server 2003 将在应用程序日志中记录此事件:
事件 ID:1091
类别:无
来源:Userenv
类型错误:
消息:组策略客户端扩展安全性未能记录 RSOP(策略的结果集)数据。 查找该扩展之前报告的任何错误。所有 Windows 版本都将在应用程序日志中记录此事件:
事件 ID:1202
类别:无
来源:SceCli
类型: 警告
消息:安全策略通过警告传播。 0xd:数据无效。
根据实际策略配置,安全策略中的设置可能或可能不存在。 “ 详细信息 ”部分介绍了策略失败或成功的条件(尽管出现错误)。
原因
记录事件是因为一个策略的文件系统安全设置包含客户端计算机上未知的环境变量。 若要详细了解问题,请启用安全配置客户端扩展的日志记录:
SCECLI 1202 事件疑难解答。
在 %windir%\security\logs\winlogon.log 文件中,将看到如下条目:
处理 GP 模板 gpt0000x.inf。
错误 13:数据无效。
转换 %PROGRAMFILES(X86)%\MyApplication 时出错。
%PROGRAMFILES(X86)% 只是一个示例。 当策略在 64 位版本的 Windows 上进行编辑时使用,并且对文件夹 C:\PROGRAM FILES (X86) 或其子文件夹之一进行了安全设置。
gpt0000x.inf 文件(包含策略设置的文本文件)可以在 %windir%\security\templates\policies 文件夹中找到。 它还包含从 GPOPath 开始的行中 Active Directory 中策略的位置,使你能够确定哪个策略具有未知环境变量。
解决方法
若要避免此问题,请在接收引用缺失环境变量的设置的同一级别创建新策略。 然后使用 WMI 筛选器允许策略仅应用于已定义环境变量的计算机。
例如,%PROGRAMFILES(X86)% 的 WMI 筛选器将为:
从名称 = “PROGRAMFILES(X86)”的Win32_Envrionment中选择 *
详细信息
本部分介绍为什么在某些情况下策略设置成功应用,但在其他情况下,它们不会应用。
安全组策略由在Winlogon.exe进程中或 Windows Vista 及更高版本(GPSvc)中运行的Userenv.dll库驱动。 这是获取分配给计算机的策略列表的组件,并筛选出不适用的策略。 可以根据策略或 WMI 筛选器的权限筛选它们。
然后,Userenv/GPSvc 根据其优先级对策略进行排序。 应用的第一个策略是优先级最低的策略,最后一个策略是优先级最高的策略。 对于安全策略,Userenv/GPSvc 使用从 SYSVOL 下载的策略设置文件调用安全策略客户端扩展 (SCECLI)。
SCECLI 有两个阶段。 在第一阶段,它采用传递给它的设置,并将其馈送到安全数据库中。 第二个阶段是将这些设置应用于系统,例如,设置用户权限、安全选项或在注册表和文件上设置安全描述符。
第一阶段处于活动状态,直到处理最后一个策略。 最后一个策略从 Userenv/GPSvc 到 SCECLI 的调用是一种特殊情况。 调用后,第一阶段仍处于活动状态,最后一个策略中的设置将读取到安全数据库中,就像所有其他策略一样。 但在调用返回之前,SCECLI 会看到这是最后一个策略,并且在同一调用中执行第二个阶段。
注册表和文件系统策略的设置被视为提交成本高昂,SCECLI 不会在前台模式下的调用线程中执行它们。 对于这些设置,Userenv/GPSvc 将创建一个额外的线程,以便处理可以在用户已登录时完成。 域控制器是此规则的例外。 在用户可以登录之前,他们始终会首先完成所有安全策略应用程序。
对于缺少环境变量,SCECLI 会读取第一阶段中的设置,并在将环境变量解析为实际路径时遇到错误。 SCECLI 将跳过该条目,并继续向安全数据库添加设置,然后向 Userenv/GPSVC 返回错误。
当问题发生在除最后一个策略之外的任何策略中时,Userenv/GPSVC 会将错误视为致命问题并中止安全组策略。 因此,第二阶段永远不会发生。 在最后一个策略中出现问题时,SCECLI 将忽略错误并执行第二个阶段。 Userenv/GPSVC 仍中止策略应用程序并出现错误,但实际上策略处理已于此完成。
数据收集
如果需要Microsoft支持方面的帮助,建议按照使用 TSS 收集信息中的 步骤收集组策略问题来收集信息。