Configure TPM platform validation profile for BIOS-based firmware configurations
Verified with Windows 11 25H2 — updated on July 10, 2026
Supported on: At least Windows Server 2012 or Windows 8
Path in the GPO console
Computer Configuration\Administrative Templates\Windows Components\BitLocker Drive Encryption\Operating System Drives Description
This policy setting allows you to configure how the computer's Trusted Platform Module (TPM) security hardware secures the BitLocker encryption key. This policy setting does not apply if the computer does not have a compatible TPM or if BitLocker has already been turned on with TPM protection. Important: This group policy only applies to computers with BIOS configurations or to computers with UEFI firmware with a Compatibility Service Module (CSM) enabled. Computers using a native UEFI firmware configuration store different values into the Platform Configuration Registers (PCRs). Use the "Configure TPM platform validation profile for native UEFI firmware configurations" group policy setting to configure the TPM PCR profile for computers using native UEFI firmware. If you enable this policy setting before turning on BitLocker, you can configure the boot components that the TPM will validate before unlocking access to the BitLocker-encrypted operating system drive. If any of these components change while BitLocker protection is in effect, the TPM will not release the encryption key to unlock the drive and the computer will instead display the BitLocker Recovery console and require that either the recovery password or recovery key be provided to unlock the drive. If you disable or do not configure this policy setting, BitLocker uses the default platform validation profile or the platform validation profile specified by the setup script. A platform validation profile consists of a set of Platform Configuration Register (PCR) indices ranging from 0 to 23. The default platform validation profile secures the encryption key against changes to the Core Root of Trust of Measurement (CRTM), BIOS, and Platform Extensions (PCR 0), the Option ROM Code (PCR 2), the Master Boot Record (MBR) Code (PCR 4), the NTFS Boot Sector (PCR 8), the NTFS Boot Block (PCR 9), the Boot Manager (PCR 10), and the BitLocker Access Control (PCR 11). Warning: Changing from the default platform validation profile affects the security and manageability of your computer. BitLocker's sensitivity to platform modifications (malicious or authorized) is increased or decreased depending upon inclusion or exclusion (respectively) of the PCRs.
Registry
SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS Value name: Enabled
Enabled: Enabled = 1
Disabled: Enabled = 0
Export Builder
BETAConfigure the state, scope and options, then generate .reg, PowerShell, Intune and SCCM outputs — or add the setting to a multi-setting collection.
These exports write the registry — this is not a managed GPO. ⓘ
.reg file
Windows Registry Editor Version 5.00
; Exported from gporais.com
; Policy: Configure TPM platform validation profile for BIOS-based firmware configurations
; State: Enabled
; Supported on: At least Windows Server 2012 or Windows 8
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS]
"Enabled"=dword:00000001
"0"=dword:00000001
"1"=dword:00000000
"2"=dword:00000001
"3"=dword:00000000
"4"=dword:00000001
"5"=dword:00000000
"6"=dword:00000000
"7"=dword:00000000
"8"=dword:00000001
"9"=dword:00000001
"10"=dword:00000001
"11"=dword:00000001
"12"=dword:00000000
"13"=dword:00000000
"14"=dword:00000000
"15"=dword:00000000
"16"=dword:00000000
"17"=dword:00000000
"18"=dword:00000000
"19"=dword:00000000
"20"=dword:00000000
"21"=dword:00000000
"22"=dword:00000000
"23"=dword:00000000 More formats (PowerShell, Intune, SCCM)
PowerShell
# Exported from gporais.com
# Policy: Configure TPM platform validation profile for BIOS-based firmware configurations
# State: Enabled
# Supported on: At least Windows Server 2012 or Windows 8
$path = 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'Enabled' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '0' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '1' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '2' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '3' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '4' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '5' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '6' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '7' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '8' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '9' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '10' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '11' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '12' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '13' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '14' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '15' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '16' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '17' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '18' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '19' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '20' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '21' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '22' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '23' -Value 0 -Type DWord Intune XML
No direct Policy CSP / OMA-URI mapping for this policy. Use the Intune Remediation tab, or ingest the ADMX in Intune. Intune Remediation
# === Detection script ===
# Exported from gporais.com
# Policy: Configure TPM platform validation profile for BIOS-based firmware configurations
# State: Enabled
# Supported on: At least Windows Server 2012 or Windows 8
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name 'Enabled' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '0' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '1' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '2' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '3' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '4' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '5' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '6' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '7' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '8' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '9' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '10' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '11' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '12' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '13' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '14' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '15' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '16' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '17' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '18' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '19' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '20' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '21' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '22' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '23' -Expected 0 -Kind DWord)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Configure TPM platform validation profile for BIOS-based firmware configurations
# State: Enabled
# Supported on: At least Windows Server 2012 or Windows 8
$path = 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'Enabled' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '0' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '1' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '2' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '3' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '4' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '5' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '6' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '7' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '8' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '9' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '10' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '11' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '12' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '13' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '14' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '15' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '16' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '17' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '18' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '19' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '20' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '21' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '22' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '23' -Value 0 -Type DWord SCCM scripts
# Exported from gporais.com
# Policy: Configure TPM platform validation profile for BIOS-based firmware configurations
# State: Enabled
# Supported on: At least Windows Server 2012 or Windows 8
# SCCM Configuration Item guidance:
# Create a Configuration Item of type "Setting: Script".
# Discovery script: use the Detection script below.
# Remediation script: use the Remediation script below.
# Compliance rule: the Discovery script output equals 'Compliant'.
# === Detection script ===
# Exported from gporais.com
# Policy: Configure TPM platform validation profile for BIOS-based firmware configurations
# State: Enabled
# Supported on: At least Windows Server 2012 or Windows 8
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name 'Enabled' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '0' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '1' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '2' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '3' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '4' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '5' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '6' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '7' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '8' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '9' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '10' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '11' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '12' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '13' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '14' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '15' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '16' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '17' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '18' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '19' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '20' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '21' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '22' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS' -Name '23' -Expected 0 -Kind DWord)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Configure TPM platform validation profile for BIOS-based firmware configurations
# State: Enabled
# Supported on: At least Windows Server 2012 or Windows 8
$path = 'HKLM:\SOFTWARE\Policies\Microsoft\FVE\OSPlatformValidation_BIOS'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'Enabled' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '0' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '1' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '2' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '3' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '4' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '5' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '6' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '7' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '8' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '9' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '10' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '11' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name '12' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '13' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '14' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '15' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '16' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '17' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '18' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '19' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '20' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '21' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '22' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name '23' -Value 0 -Type DWord Building a multi-setting collection? Add this setting and generate combined .reg / PowerShell / GPO scripts.