ApplicationControl 云解决方案提供商

Windows Defender应用程序控制 (WDAC) 策略可以从 MDM 服务器进行管理,也可以通过 ApplicationControl 配置服务提供程序 (CSP) 通过 WMI 桥使用 PowerShell 在本地进行管理。 ApplicationControl CSP 已添加到 Windows 10 版本 1903 中。 此 CSP 为 Windows 10 版本 1903) 中引入的多个策略 (提供了扩展的诊断功能和支持。 它还支持 Windows 10 版本 1709) 中引入的策略部署 (无需重新启动。 与 AppLocker CSP 不同,ApplicationControl CSP 正确检测到存在“不重启”选项,因此不会计划重新启动。

使用 AppLocker CSP 的 CodeIntegrity 节点部署的现有Windows Defender应用程序控制 (WDAC) 策略现在可以使用 ApplicationControl CSP URI 进行部署。 尽管将继续支持使用 AppLocker CSP 的 WDAC 策略部署,但所有新功能工作将仅在 ApplicationControl CSP 中完成。

以下列表显示了 ApplicationControl 配置服务提供程序节点:

策略

范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies

包含所有策略的子树的开头。

每个策略通过其全局唯一标识符 (GUID) 进行标识。

描述框架属性:

属性名 属性值
格式 node
访问类型 “获取”

策略/{Policy GUID}

范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}

策略的 GUID。

每个策略 GUID 节点包含一个策略节点和一个对应的 PolicyInfo 节点。

描述框架属性:

属性名 属性值
格式 node
访问类型 “获取”
动态节点命名 UniqueName:ApplicationControl CSP 强制给定策略 URI 的“ID”段与策略 Blob 中的策略 ID 相同。

Policies/{Policy GUID}/Policy

范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/Policy

编码为 base64 的策略二进制文件。 支持的值为二进制文件,由 ConvertFrom-CIPolicy cmdlet 从策略 XML 文件转换。

默认值为空。

描述框架属性:

属性名 属性值
格式 b64
访问类型 添加、删除、获取、替换

Policies/{Policy GUID}/PolicyInfo

范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo

描述 GUID 指示的策略的信息。

描述框架属性:

属性名 属性值
格式 node
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/BasePolicyId
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/BasePolicyId

策略 GUID 指示的策略的 BasePolicyId。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/FriendlyName
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/FriendlyName

策略 GUID 指示的策略的 FriendlyName。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/IsAuthorized
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/IsAuthorized

是否授权由 GUID 指示的策略由系统上的强制引擎加载。

支持的值如下所示:

  • True:指示授权由系统上的强制引擎加载策略。
  • False:指示该策略无权由系统上的强制引擎加载。 此值为默认值。

描述框架属性:

属性名 属性值
格式 bool
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/IsBasePolicy
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/IsBasePolicy

如果策略是基础策略与补充策略,则为 TRUE/FALSE。

描述框架属性:

属性名 属性值
格式 bool
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/IsDeployed
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/IsDeployed

是否在物理计算机上的系统 (部署 GUID 指示的策略)

支持的值如下所示:

  • True:指示策略部署在系统上,并且存在于物理计算机上。
  • False:指示策略未部署在系统上,并且不在物理计算机上。 此值为默认值。

描述框架属性:

属性名 属性值
格式 bool
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/IsEffective
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/IsEffective

GUID 指示的策略是否在强制引擎加载的系统 (有效,并且实际上)

支持的值如下所示:

  • True:指示策略由强制引擎加载并在系统上生效。
  • False:指示策略未由强制引擎加载,并且对系统无效。 此值为默认值。

描述框架属性:

属性名 属性值
格式 bool
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/IsSystemPolicy
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/IsSystemPolicy

如果策略是系统策略,则为 TRUE/FALSE,该策略由 Microsoft 作为操作系统的一部分进行管理。

描述框架属性:

属性名 属性值
格式 bool
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/PolicyOptions
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/PolicyOptions

策略 GUID 指示的策略的策略选项。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/Status
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/Status

策略 GUID 指示的策略的当前状态。

默认值为 0,指示策略状态为 OK

描述框架属性:

属性名 属性值
格式 int
访问类型 “获取”
Policies/{Policy GUID}/PolicyInfo/Version
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Policies/{Policy GUID}/PolicyInfo/Version

由 GUID 指示的策略版本,作为字符串。 分析时,使用 uint64 作为包含数据类型。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 “获取”

令 牌

范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Tokens

包含所有标记的子树的开头。

描述框架属性:

属性名 属性值
格式 node
访问类型 “获取”

Tokens/{ID}

范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Tokens/{ID}

用于区分令牌的任意 ID。

描述框架属性:

属性名 属性值
格式 node
访问类型 “获取”
动态节点命名 UniqueName:ApplicationControl CSP 强制给定令牌 URI 的“ID”段是唯一的。

Tokens/{ID}/Token

范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Tokens/{ID}/Token

编码为 base64 的令牌二进制文件。 支持的值为从 OneCoreDeviceUnlockService 获取的二进制文件。

描述框架属性:

属性名 属性值
格式 b64
访问类型 添加、删除、获取、替换

Tokens/{ID}/TokenInfo

范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Tokens/{ID}/TokenInfo

描述由相应 ID 指示的令牌的信息。

描述框架属性:

属性名 属性值
格式 node
访问类型 “获取”
Tokens/{ID}/TokenInfo/Status
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Tokens/{ID}/TokenInfo/Status

令牌 ID 指示的令牌的当前状态。

描述框架属性:

属性名 属性值
格式 int
访问类型 “获取”
Tokens/{ID}/TokenInfo/type
范围 版本 适用的操作系统
✅ 设备
❌ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1903 [10.0.18362] 及更高版本
./Vendor/MSFT/ApplicationControl/Tokens/{ID}/TokenInfo/Type

令牌 ID 指示的令牌类型。

描述框架属性:

属性名 属性值
格式 int
访问类型 “获取”

IsAuthorized、IsDeployed 和 IsEffective 值

下表根据 IsAuthorized、IsDeployed 和 IsEffective 节点的不同值提供了此策略的结果:

IsAuthorized IsDeployed IsEffective 结果
True True True 策略当前正在运行,并且有效。
True True False 策略需要重新启动才能生效。
True False True 策略需要重新启动才能从 CI 卸载。
False True True 无法访问。
True False False *无法访问。
False True False *无法访问。
False False True 无法访问。
False False False *无法访问。

* 表示有效的中间状态;但是,如果 MDM 事务导致此状态配置, END_COMMAND_PROCESSING 则 将导致失败。

Microsoft Intune使用指南

对于通过 ApplicationControl CSP 将Intune独立或混合管理与 Configuration Manager 配合使用以部署自定义策略的客户,请参阅使用 Microsoft Intune 部署Windows Defender应用程序控制策略

通用 MDM 服务器使用指南

若要在不使用Intune的情况下使用 ApplicationControl CSP,必须:

  1. 了解生成的策略的 GUID,该 GUID 可在 1903 年之前的系统中作为 或 <PolicyTypeID> 在策略 xml <PolicyID> 中找到。
  2. 使用 ConvertFrom-CIPolicy cmdlet 将策略转换为二进制格式,以便进行部署。 二进制策略可以是有符号的,也可以是无符号的。
  3. 使用 certutil -encode 命令行工具 (二进制策略表示形式的 Base64 编码 blob) 创建策略节点。

下面是 certutil 调用示例:

certutil  -encode WinSiPolicy.p7b WinSiPolicy.cer

使用 certutil 的替代方法是使用以下 PowerShell 调用:

[Convert]::toBase64String($(Get-Content -Encoding Byte -ReadCount 0 -Path <bin file>))

部署策略

若要使用 CSP 部署新的基本策略,请在 ./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/Policy 上使用 Base64 编码的策略节点作为 {Data} 执行 ADD。 请参阅以下示例 1 中的“格式”部分。

若要部署基本策略和补充策略,请执行以下操作:

  1. ./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/Policy 上使用 Base64 编码的策略节点作为 {Data} 执行 ADD,以及基本策略的 GUID 和策略数据。
  2. 为每个基策略或补充策略 (及其自己的 GUID 和数据) 重复此操作。

以下示例演示了部署两个基本策略和一个补充策略 (该策略已指定了它补充且不需要在 ADD) 中反映的基本策略。

示例 1:添加第一个基本策略

<Add>
    <CmdID>1</CmdID>
    <Item>
        <Target>
            <LocURI>./Vendor/MSFT/ApplicationControl/Policies/{Base1GUID}/Policy</LocURI>
        </Target>
        <Meta>
             <Format xmlns="syncml:metinf">b64</Format>
        </Meta>
        <Data> {Base1Data} </Data>
    </Item>
</Add>

示例 2:添加第二个基本策略

<Add>
    <CmdID>1</CmdID>
    <Item>
        <Target>
            <LocURI>./Vendor/MSFT/ApplicationControl/Policies/{Base2GUID}/Policy</LocURI>
        </Target>
        <Meta>
            <Format xmlns="syncml:metinf">b64</Format>
        </Meta>
        <Data> {Base2Data} </Data>
    </Item>
</Add>

示例 3:添加补充策略

<Add>
    <CmdID>1</CmdID>
    <Item>
        <Target>
            <LocURI>./Vendor/MSFT/ApplicationControl/Policies/{Supplemental1GUID}/Policy</LocURI>
        </Target>
        <Meta>
            <Format xmlns="syncml:metinf">b64</Format>
        </Meta>
        <Data> {Supplemental1Data} </Data>
    </Item>
</Add>

获取策略

使用已部署策略的 GUID 执行 GET,以询问/检查策略本身或有关该策略的信息。

下表显示了不同节点上的 Get 操作的结果:

节点 获取结果
./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/Policy raw p7b
./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/PolicyInfo/Version 策略版本
./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/PolicyInfo/IsEffective 策略是否有效
./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/PolicyInfo/IsDeployed 系统上的策略是否为
./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/PolicyInfo/IsAuthorized 策略是否已在系统上授权
./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/PolicyInfo/Status 部署是否成功
./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/PolicyInfo/FriendlyName 每个策略的友好名称

Get 命令的一个示例是:

 <Get>
    <CmdID>1</CmdID>
        <Item>
            <Target>
                <LocURI>./Vendor/MSFT/ApplicationControl/Policies/{PolicyGUID}/Policy</LocURI>
            </Target>
        </Item>
 </Get>

删除策略

无重启删除

删除后,通过 ApplicationControl CSP 部署的策略将从系统中删除,但在下次重新启动之前一直有效。 若要在功能上执行无重启删除,请先将现有策略替换为 C:\Windows\schemas\CodeIntegrity\ExamplePolicies\AllowAll.xml) “允许所有”策略 (,然后删除更新的策略。 此序列将立即防止阻止任何内容,并在下次重新启动时完全取消策略。

未签名的策略

若要删除未签名的策略,请对 ./Vendor/MSFT/ApplicationControl/Policies/Policy/Policy 执行 DELETE。

已签名策略

注意

默认情况下,已签名的策略只能替换为另一个已签名策略。 因此,对 ./Vendor/MSFT/ApplicationControl/Policies/Policy GUID/Policy 执行 DELETE 不足以删除已签名的策略。

若要删除已签名的策略,请执行以下操作:

  1. 将其替换为允许未签名策略的已签名更新。
  2. 使用未签名的“全部允许”策略部署另一个更新。
  3. 执行删除。

Delete 命令的一个示例是:

   <Delete>
     <CmdID>1</CmdID>
        <Item>
            <Target>
                  <LocURI>./Vendor/MSFT/ApplicationControl/Policies/{PolicyGUID}/Policy</LocURI>
            </Target>
        </Item>
   </Delete>

PowerShell 和 WMI 网桥使用指南

还可以从 PowerShell 本地管理 ApplicationControl CSP,也可以使用 WMI 桥接提供程序通过Configuration Manager的任务序列脚本进行管理。

设置使用 WMI 桥

  1. 将 WDAC 策略转换为 Base64。

  2. 通过 PSExec 或类似) 打开本地系统上下文 (PowerShell。

  3. 使用 WMI 接口:

    $namespace = "root\cimv2\mdm\dmmap"
    $policyClassName = "MDM_ApplicationControl_Policies01_01"
    $policyBase64 = "<base64policy>"
    

通过 WMI 桥部署策略

运行以下命令。 PolicyID 是可在策略 xml 中找到的 GUID,应在此处使用不带大括号。

New-CimInstance -Namespace $namespace -ClassName $policyClassName -Property @{ParentID="./Vendor/MSFT/ApplicationControl/Policies";InstanceID="<PolicyID>";Policy=$policyBase64}

通过 WMI 桥查询所有策略

Get-CimInstance -Namespace $namespace -ClassName $policyClassName

配置服务提供程序参考