删除Windows Defender应用程序控制 (WDAC) 策略

注意

Windows Defender应用程序控制 (WDAC) 的某些功能仅在特定的 Windows 版本上可用。 详细了解Windows Defender应用程序控制功能可用性

删除 WDAC 策略

在某个时候,你可能想要删除一个或多个 WDAC 策略,或者删除已部署的所有 WDAC 策略。 本文介绍删除 WDAC 策略的各种方法。

重要提示

已签名的 WDAC 策略

如果尝试删除的策略是已签名的 WDAC 策略,则必须先部署包含选项 6 Enabled:Unsigned System Integrity Policy 的已签名替换策略。

替换策略必须与要替换的策略具有相同的 PolicyId,并且版本必须等于或大于现有策略。 替换策略还必须包括 <UpdatePolicySigners>。

若要生效,必须使用要替换的原始策略的 <UpdatePolicySigners> 节中包含的证书对此策略进行签名。

然后,必须重新启动计算机,以便停用策略的 UEFI 保护。 否则将导致启动失败。

在删除任何策略之前,必须先禁用用于 (部署它的方法,例如组策略或 MDM) 。 否则,策略可能会重新部署到计算机。

若要在删除策略之前使策略有效处于非活动状态,可以先将策略替换为包含以下更改的新策略:

  1. 将策略规则替换为“允许 *”规则;
  2. 设置选项 3 已启用:审核模式 以将策略更改为仅审核模式;
  3. 设置选项 11 Disabled:Script Enforcement;
  4. 允许所有 COM 对象。 请参阅 允许 WDAC 策略中的 COM 对象注册;
  5. 如果适用,请删除选项 0 Enabled:UMCI 以仅将策略转换为内核模式。

重要提示

删除策略后,重启计算机使其生效。 如果不重启设备,就无法删除 WDAC 策略。

使用 CiTool.exe 删除 WDAC 策略

从 Windows 11 2022 更新开始,可以使用 CiTool.exe 删除 WDAC 策略。 在提升的命令窗口中,运行以下命令。 请务必将 文本 PolicyId GUID 替换为要删除的 WDAC 策略的实际 PolicyId:

    CiTool.exe -rp "{PolicyId GUID}" -json

然后重新启动计算机。

使用 MDM 解决方案(如 Intune)删除 WDAC 策略

可以使用移动设备管理 (MDM) 解决方案(如 Microsoft Intune)使用 ApplicationControl CSP 从客户端计算机中删除 WDAC 策略。

有关使用 ApplicationControl CSP 的具体信息,请咨询 MDM 解决方案提供商。

然后重新启动计算机。

使用脚本删除 WDAC 策略

若要使用脚本删除 WDAC 策略,脚本必须从计算机中删除策略文件 () 。 对于 (1903+) WDAC 策略的多种策略格式,请在以下位置查找策略文件。 请务必将 PolicyId GUID 替换为要删除的 WDAC 策略的实际 PolicyId。

  • <EFI 系统分区>\Microsoft\Boot\CiPolicies\Active\{PolicyId GUID}.cip
  • <OS Volume>\Windows\System32\CodeIntegrity\CiPolicies\Active\{PolicyId GUID}.cip

对于 单策略格式 WDAC 策略,除了上述两个位置外,还要查找一个名为 SiPolicy.p7b 的文件,该文件可在以下位置找到:

  • <EFI 系统分区>\Microsoft\Boot\SiPolicy.p7b
  • <OS Volume>\Windows\System32\CodeIntegrity\SiPolicy.p7b

然后重新启动计算机。

用于删除单个 WDAC 策略的示例脚本

# Set PolicyId GUID to the PolicyId from your WDAC policy XML
$PolicyId = "{PolicyId GUID}"

# Initialize variables
$SinglePolicyFormatPolicyId = "{A244370E-44C9-4C06-B551-F6016E563076}"
$SinglePolicyFormatFileName = "\SiPolicy.p7b"
$MountPoint =  $env:SystemDrive+"\EFIMount"
$SystemCodeIntegrityFolderRoot = $env:windir+"\System32\CodeIntegrity"
$EFICodeIntegrityFolderRoot = $MountPoint+"\EFI\Microsoft\Boot"
$MultiplePolicyFilePath = "\CiPolicies\Active\"+$PolicyId+".cip"

# Mount the EFI partition
$EFIPartition = (Get-Partition | Where-Object IsSystem).AccessPaths[0]
if (-Not (Test-Path $MountPoint)) { New-Item -Path $MountPoint -Type Directory -Force }
mountvol $MountPoint $EFIPartition

# Check if the PolicyId to be removed is the system reserved GUID for single policy format.
# If so, the policy may exist as both SiPolicy.p7b in the policy path root as well as
# {GUID}.cip in the CiPolicies\Active subdirectory
if ($PolicyId -eq $SinglePolicyFormatPolicyId) {$NumFilesToDelete = 4} else {$NumFilesToDelete = 2}

$Count = 1
while ($Count -le $NumFilesToDelete)
{

    # Set the $PolicyPath to the file to be deleted, if exists
    Switch ($Count)
    {
        1 {$PolicyPath = $SystemCodeIntegrityFolderRoot+$MultiplePolicyFilePath}
        2 {$PolicyPath = $EFICodeIntegrityFolderRoot+$MultiplePolicyFilePath}
        3 {$PolicyPath = $SystemCodeIntegrityFolderRoot+$SinglePolicyFormatFileName}
        4 {$PolicyPath = $EFICodeIntegrityFolderRoot+$SinglePolicyFormatFileName}
    }

    # Delete the policy file from the current $PolicyPath
    Write-Host "Attempting to remove $PolicyPath..." -ForegroundColor Cyan
    if (Test-Path $PolicyPath) {Remove-Item -Path $PolicyPath -Force -ErrorAction Continue}

    $Count = $Count + 1
}

# Dismount the EFI partition
mountvol $MountPoint /D

注意

必须以管理员身份运行脚本才能删除计算机上的 WDAC 策略。

删除导致启动停止失败的 WDAC 策略

阻止启动关键驱动程序的 WDAC 策略可能会导致启动停止失败 (BSOD) 发生,但可以通过在策略中设置选项 10 Enabled:Boot Audit On Failure 来缓解这种情况。 此外,已签名的 WDAC 策略可保护策略免受已获得系统管理级别访问权限的管理操作和恶意软件的侵害。 因此,即使对于管理员来说,签名的 WDAC 策略也比未签名的策略更难删除。 篡改或删除已签名的 WDAC 策略将导致发生 BSOD。

删除导致启动停止失败的策略:

  1. 如果策略是 已签名 的 WDAC 策略,请从 UEFI BIOS 菜单中关闭安全启动。 有关在 BIOS 菜单中查找关闭安全启动的位置的帮助,请咨询原始设备制造商 (OEM) 。
  2. 访问计算机上的“高级启动选项”菜单,然后选择 “禁用驱动程序签名强制实施”选项。 有关在启动期间访问“高级启动选项”菜单的说明,请咨询 OEM。 此选项将挂起单个启动会话的所有代码完整性检查,包括 WDAC。
  3. 正常启动 Windows 并登录。 然后, 使用脚本删除 WDAC 策略
  4. 如果在上面的步骤 1 中关闭了安全启动,并且驱动器受 BitLocker 保护, 请暂停 BitLocker 保护 ,然后从 UEFI BIOS 菜单打开安全启动。
  5. 重新启动计算机。

注意

如果驱动器受 Bitlocker 保护,则可能需要 Bitlocker 恢复密钥来执行上述步骤 1-2。