Public mode

No tenant, Graph, or device access. Every item links to its source. What this means

Some sources or documents need attention: 253/255 feeds/APIs · 50/444 docs · checked 23:20 UTC Customize Public modeDiscuss ChangeIntel on Discord

Windows 10 Group Policy settings

3,381 settings · 22H2 · 1.0 · 15 Jul 2024

11 settingsCSV
Back to the list

Windows Components › Search

Prevent unwanted iFilters and protocol handlers

ComputerIntune-readyPreventUnwantedAddins

Supported on Microsoft Windows XP, Windows Server 2003 with Windows Search version 3.01, or any version of Microsoft Windows with Windows Search 4.0

What it does

Enabling this policy prevents Windows Desktop Search from using iFilters and protocol handlers unless they are specified in the allow list. However, This policy will not prevent iFilters or protocol handlers from being installed, nor will it prevent them from being used by other applications or services. You can also specify an allow list of add-ins by providing the classID or ProgId string. For example, if you plan to deploy a particular iFilter, make sure that this iFilter is on the allow list, either as a GUID such as {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} (include the braces) or a ProgID such as VisFilter.CFilter.1. If you maintain a locked desktop environment, this setting is redundant because non-administrative users do not have permission to install new components. If your users have Administrator permissions or can install software, this policy prevents them from specifically using Windows Desktop Search-related add-ins. Note: Because of a limitation in the Group Policy editor, you must add at least one entry in the allow list, even if you want to enable this policy without an allow list. Create a list entry by putting a space in the name field and a space in the value field and then save it. This will create a placeholder entry that is ignored by the program.

What it writes

Hive
HKEY_LOCAL_MACHINE
Registry key
SOFTWARE\Policies\Microsoft\Windows\Windows Search

In Intune

No native CSP; import the ADMX (Intune-ready).

From Microsoft's Policy CSP DDF files (DDF v2 Files, February 2026), read 18 Oct 2026.

Options

OptionTypeRegistry valueAllowed values
Allow List List of values SOFTWARE\Policies\Microsoft\Windows\Windows Search\PreventUnwantedAddins Any

Configure and deploy

Choose a state and the option values; the output below is generated from the template for exactly that.

State
Options used when Enabled

Enabled · Computer · template defaults

Registry file (.reg)

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search\PreventUnwantedAddins]


PowerShell

$ErrorActionPreference = 'Stop'

function Set-RegistryValue {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name,
        [Parameter(Mandatory = $true)][string] $PropertyType,
        [Parameter(Mandatory = $true)][object] $Value
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        New-Item -Path $Path -Force | Out-Null
    }

    New-ItemProperty -LiteralPath $Path -Name $Name -PropertyType $PropertyType -Value $Value -Force | Out-Null
}

function Remove-RegistryValue {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name
    )

    if (Test-Path -LiteralPath $Path) {
        Remove-ItemProperty -LiteralPath $Path -Name $Name -Force -ErrorAction SilentlyContinue
    }
}

function Clear-RegistryKeyValues {
    param(
        [Parameter(Mandatory = $true)][string] $Path
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        return
    }

    foreach ($propertyName in (Get-Item -LiteralPath $Path).Property) {
        Remove-ItemProperty -LiteralPath $Path -Name $propertyName -Force -ErrorAction SilentlyContinue
    }
}

# Policy: Prevent unwanted iFilters and protocol handlers
# Name: PreventUnwantedAddins
# Scope: Machine
# State: Enabled
# Source: Search.admx

Clear-RegistryKeyValues -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search\PreventUnwantedAddins'
  • The OMA-URI is an inferred ADMX-backed Policy CSP candidate derived from the source ADMX file name and policy name.
  • Some Microsoft policies use built-in Policy CSP pages whose area names don't match the ADMX file name, so verify the candidate against Microsoft Learn before deployment.
  • The generated payload is incomplete because one or more ADMX element values were not supplied: PreventUnwantedAddins_AllowList

ADMX profile candidate (OMA-URI)

./Device/Vendor/MSFT/Policy/Config/ADMX_Search/PreventUnwantedAddins
Intune remediation scripts

Detection

$ErrorActionPreference = 'Stop'
$reasons = [System.Collections.Generic.List[string]]::new()

function Test-RegistryValueExists {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        return $false
    }

    return $null -ne (Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction SilentlyContinue)
}

function Test-RegistryValueEquals {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name,
        [Parameter(Mandatory = $true)][string] $Kind,
        [Parameter(Mandatory = $true)][object] $Expected
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        return $false
    }

    $valueObject = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction SilentlyContinue
    if ($null -eq $valueObject) {
        return $false
    }

    $actual = $valueObject.$Name
    switch ($Kind) {
        'String' { return [string]$actual -ceq [string]$Expected }
        'ExpandString' { return [string]$actual -ceq [string]$Expected }
        'DWord' { return [uint32]$actual -eq [uint32]$Expected }
        'QWord' { return [uint64]$actual -eq [uint64]$Expected }
        'MultiString' {
            $actualArray = @($actual)
            $expectedArray = @($Expected)
            if ($actualArray.Count -ne $expectedArray.Count) { return $false }
            for ($index = 0; $index -lt $actualArray.Count; $index++) {
                if ([string]$actualArray[$index] -cne [string]$expectedArray[$index]) { return $false }
            }
            return $true
        }
        'Binary' {
            $actualArray = [byte[]]$actual
            $expectedArray = [byte[]]$Expected
            if ($actualArray.Length -ne $expectedArray.Length) { return $false }
            for ($index = 0; $index -lt $actualArray.Length; $index++) {
                if ($actualArray[$index] -ne $expectedArray[$index]) { return $false }
            }
            return $true
        }
        default { return [string]$actual -ceq [string]$Expected }
    }
}

# Policy: Prevent unwanted iFilters and protocol handlers
# Name: PreventUnwantedAddins
# Scope: Machine
# State: Enabled
# Source: Search.admx

$keyPath = 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search\PreventUnwantedAddins'
if (Test-Path -LiteralPath $keyPath) {
    $propertyNames = (Get-Item -LiteralPath $keyPath).Property
    if ($propertyNames.Count -gt 0) {
        $reasons.Add('Key should be empty: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search\PreventUnwantedAddins') | Out-Null
    }
}

if ($reasons.Count -eq 0) {
    Write-Output 'Compliant'
    exit 0
}

$reasons | ForEach-Object { Write-Output $_ }
exit 1

Remediation

$ErrorActionPreference = 'Stop'

function Set-RegistryValue {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name,
        [Parameter(Mandatory = $true)][string] $PropertyType,
        [Parameter(Mandatory = $true)][object] $Value
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        New-Item -Path $Path -Force | Out-Null
    }

    New-ItemProperty -LiteralPath $Path -Name $Name -PropertyType $PropertyType -Value $Value -Force | Out-Null
}

function Remove-RegistryValue {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name
    )

    if (Test-Path -LiteralPath $Path) {
        Remove-ItemProperty -LiteralPath $Path -Name $Name -Force -ErrorAction SilentlyContinue
    }
}

function Clear-RegistryKeyValues {
    param(
        [Parameter(Mandatory = $true)][string] $Path
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        return
    }

    foreach ($propertyName in (Get-Item -LiteralPath $Path).Property) {
        Remove-ItemProperty -LiteralPath $Path -Name $propertyName -Force -ErrorAction SilentlyContinue
    }
}

# Policy: Prevent unwanted iFilters and protocol handlers
# Name: PreventUnwantedAddins
# Scope: Machine
# State: Enabled
# Source: Search.admx

Clear-RegistryKeyValues -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search\PreventUnwantedAddins'

History 2 retained releases

  1. 22H2 · 1.015 Jul 2024
    • Translations changed; choose a language above to compare its wording.
  2. 1607 · 2.015 Jul 2024
    • Already present in the first release ChangeIntel keeps.

Template

Internal name
PreventUnwantedAddins
Namespace
FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21
Template file
Search.admx
Release
Windows 10 22H2 · 1.0 · file set bc15f6a5271783ee…
Definition, editor controls and support

Definition

<policy class="Machine" clientExtension="{7933F41E-56F8-41d6-A31C-4148A711EE93}" displayName="$(string.PreventUnwantedAddins)" explainText="$(string.PreventUnwantedAddins_Explain)" key="SOFTWARE\Policies\Microsoft\Windows\Windows Search" name="PreventUnwantedAddins" presentation="$(presentation.PreventUnwantedAddins)" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21:Search" />
      <supportedOn ref="FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21:301To4" />
      <elements>
        <list id="PreventUnwantedAddins_AllowList" key="SOFTWARE\Policies\Microsoft\Windows\Windows Search\PreventUnwantedAddins" />
      </elements>
    </policy>

Editor controls

<presentation id="PreventUnwantedAddins" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
        <listBox refId="PreventUnwantedAddins_AllowList">Allow List</listBox>
      </presentation>

Supported platforms and category

FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21:category:Search
<category displayName="$(string.Search)" name="Search" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="Microsoft.Policies.Windows:WindowsComponents" />
    </category>
FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21:definition:301To4
<definition displayName="$(string.301To4)" name="301To4" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
Microsoft.Policies.Windows:category:WindowsComponents
<category displayName="$(string.WindowsComponents)" explainText="$(string.WindowsComponents_Help)" name="WindowsComponents" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21:category:Search
<category displayName="$(string.Search)" name="Search" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="Microsoft.Policies.Windows:WindowsComponents" />
    </category>
<strings><string id="FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21:Search">Search</string></strings>
FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21:definition:301To4
<definition displayName="$(string.301To4)" name="301To4" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="FullArmor.Policies.3B9EA2B5_A1D1_4CD5_9EDE_75B22990BC21:301To4">Microsoft Windows XP, Windows Server 2003 with Windows Search version 3.01, or any version of Microsoft Windows with Windows Search 4.0</string></strings>
Microsoft.Policies.Windows:category:WindowsComponents
<category displayName="$(string.WindowsComponents)" explainText="$(string.WindowsComponents_Help)" name="WindowsComponents" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Microsoft.Policies.Windows:WindowsComponents">Windows Components</string><string id="Microsoft.Policies.Windows:WindowsComponents_Help">Contains settings for operating system components.</string></strings>
ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 18 Oct 23:20 UTC · 253 of 255 readable · 252 fully read · documentation 50/444 current