Windows 声明的配置协议概述

Windows 声明的配置 (WinDC) 协议是一种所需的状态设备配置模型,旨在高效可靠地管理 Windows 设备。 它使用 OMA-DM SyncML 协议通过专用 OMA-DM 服务器在单个批处理中提供所有必要的设置。 设备上的 WinDC 客户端堆栈会处理这些设置,以最高效、最可靠的方式实现所需状态。

WinDC 协议要求设备具有单独的 OMA-DM 注册,该注册依赖于使用主 OMA-DM 服务器注册的设备。 所需状态模型与服务器负责设备所需状态的当前模型不同。 仅当设备已注册到主移动设备管理 (MDM) 服务器时,才允许这种双重注册。 此其他注册将所需的状态管理功能与主要功能分开。

WinDC 注册涉及两个阶段:

  • 声明的配置发现:WinDC 协议的初始发现阶段使用专用 JSON 架构从 发现服务终结点 (DS) 查询注册详细信息。 此阶段涉及发送具有特定标头和 JSON 正文的 HTTP 请求,其中包含用户域、租户 ID 和 OS 版本等详细信息。 DS 根据注册类型 (Microsoft Entra 加入或注册的设备) ,使用必要的注册服务 URL 和身份验证策略进行响应。
  • 声明的配置注册:注册阶段使用 MS-MDE2 协议 和新的 DMClient CSP 策略进行双重注册。 此阶段涉及使用 SyncML 命令设置 LinkedEnrollment/DiscoveryEndpoint 和触发 LinkedEnrollment/Enroll 。 然后,设备可以通过这些策略与 OMA-DM 服务器交互来管理其配置状态。

WinDC 注册提供以下所需状态管理功能:

  • 资源访问:提供对配置所需的资源的访问权限。
  • 扩展性:允许根据需要扩展配置功能。

说明 WinDC 模型的示意图。

注册设备后,OMA-DM 服务器可以使用 DeclaredConfiguration CSP 发送指定方案的完整设置名称和值集合。 设备上的 WinDC 堆栈负责处理配置请求,并维护其状态,包括方案更新。

WinDC 所需状态模型的优点是它高效且准确,特别是因为 WinDC 客户端堆栈负责配置设备。 WinDC 的效率是因为客户端可以异步处理方案设置的批处理,从而释放服务器资源来执行其他工作。 因此,WinDC 协议的延迟较低。 至于配置质量和准确性,WinDC 客户端堆栈对设备的配置外围应用进行了详细的了解。 此行为包括正确处理影响配置方案的连续设备更新。

受支持的平台

所有版本的 Windows 10/11 都支持已加入Microsoft Entra设备的 WinDC 注册。

Windows 10/11 支持Microsoft Entra已注册设备的 WinDC 注册,并具有以下更新:

  • Windows 11版本 24H2, ( 操作系统内部版本 26100.1301 KB5040529)
  • Windows 11版本 23H2,KB5040527 (OS 内部版本 22631.3958)
  • Windows 11版本 22H2,KB5040527 (OS 内部版本 22621.3958)
  • Windows 10版本 22H2,KB5040525 (OS 内部版本 19045.4717)

刷新间隔

每当设备上存在 WinDC 文档且当前没有用于刷新的计划任务时,将创建 WinDC 刷新计划。 默认情况下,任务每 4 小时运行一次,并且可以配置。 每次运行 WinDC 刷新任务时,它都会通过比较 WinDC 文档中的当前系统配置与服务器意图来检查来自所需状态的所有偏移。 如果有任何偏移,WinDC 引擎会尝试重新应用 WinDC 文档来修复它。 如果由于缺少实例数据而无法重新应用 WinDC 文档,则会将 WinDC 文档标记为偏移状态,并触发新的同步会话以通知存在偏移。

若要识别、调整或删除刷新计划,请使用 RefreshInterval URI:

  • 确定当前计划:

    <?xml version="1.0" encoding="utf-8"?>
    <SyncML xmlns="SYNCML:SYNCML1.1">
      <SyncBody>
        <Get>
          <CmdID>2</CmdID>
          <Item>
            <Target>
              <LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/ManagementServiceConfiguration/RefreshInterval</LocURI>
            </Target>
          </Item>
        </Get>
        <Final />
      </SyncBody>
    </SyncML>
    
  • 调整当前计划:

    <?xml version="1.0" encoding="utf-8"?>
    <SyncML xmlns="SYNCML:SYNCML1.1">
      <SyncBody>
        <Replace>
          <CmdID>2</CmdID>
          <Item>
            <Meta>
              <Format>int</Format>
              <Type>text/plain</Type>
            </Meta>
            <Target>
              <LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/ManagementServiceConfiguration/RefreshInterval</LocURI>
            </Target>
            <Data>30</Data>
          </Item>
        </Replace>
        <Final />
      </SyncBody>
    </SyncML>
    
  • 删除当前计划并使用系统默认值:

    <?xml version="1.0" encoding="utf-8"?>
    <SyncML xmlns="SYNCML:SYNCML1.1">
      <SyncBody>
        <Delete>
          <CmdID>2</CmdID>
          <Item>
            <Target>
              <LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/ManagementServiceConfiguration/RefreshInterval</LocURI>
            </Target>
          </Item>
        </Delete>
        <Final />
      </SyncBody>
    </SyncML>
    

疑难解答

如果声明的配置文档的处理失败,错误将记录到 Windows 事件日志中:

  • 管理员事件:Application and Service Logs\Microsoft\Windows\DeviceManagement-Enterprise-Diagnostics-Provider\Admin
  • 操作事件: Application and Service Logs\Microsoft\Windows\DeviceManagement-Enterprise-Diagnostics-Provider\Operational

常见错误

  • <LocURI>如果使用设备范围,则在 DeclaredConfiguration 文档指定用户上下文时,管理员事件日志显示类似于以下内容的错误消息:

    MDM ConfigurationManager: Command failure status. Configuration Source ID: (DAD70CC2-365B-450D-A8AB-2EB23F4300CC), Enrollment Name: (MicrosoftManagementPlatformCloud), Provider Name: (DeclaredConfiguration), Command Type: (SetValue: from Replace), CSP URI: (./Device/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document), Result: (The system cannot find the file specified.)

  • 如果 DeclaredConfiguration 文档内的 和 之间的<LocURI>文档 ID 不匹配,管理员事件日志将显示类似于以下内容的错误消息:

    MDM Declared Configuration: End document parsing from CSP: Document Id: (DCA000B5-397D-40A1-AABF-40B25078A7F91), Scenario: (MSFTVPN), Version: (A0), Enrollment Id: (DAD70CC2-365B-450D-A8AB-2EB23F4300CC), Current User: (S-1-5-21-3436249567-4017981746-3373817415-1001), Schema: (1.0), Download URL: (), Scope: (0x1), Enroll Type: (0x1A), File size: (0xDE2), CSP Count: (0x1), URI Count: (0xF), Action Requested: (0x0), Model: (0x1), Result:(0x8000FFFF) Catastrophic failure.

  • OMA-URI 中的任何拼写错误都会导致失败。 在此示例中, TrafficFilterList 指定而不是 TrafficFilterLists,并且管理员事件日志显示类似于以下内容的错误消息:

    MDM ConfigurationManager: Command failure status. Configuraton Source ID: (DAD70CC2-365B-450D-A8AB-2EB23F4300CC), Enrollment Type: (MicrosoftManagementPlatformCloud), CSP Name: (vpnv2), Command Type: (Add: from Replace or Add), CSP URI: (./user/vendor/msft/vpnv2/Test_SonicWall/TrafficFilterLists), Result: (Unknown Win32 Error code: 0x86000002).

    操作通道中还有另一条警告消息:

    MDM Declared Configuration: Function (DeclaredConfigurationExtension_PolicyCSPConfigureGivenCurrentDoc) operation (ErrorAtDocLevel: one or more CSPs failed) failed with (Unknown Win32 Error code: 0x82d00007)