BCD Settings and BitLocker
Applies To: Windows 8.1, Windows Server 2012 R2, Windows Server 2012, Windows 8
When protecting data at rest on an operating system volume, during the boot process BitLocker verifies that the security sensitive boot configuration data (BCD) settings have not changed since BitLocker was last enabled, resumed, or recovered.
BitLocker and BCD Settings
In Windows 7 and Windows Server 2008 R2, BitLocker validated nearly all BCD settings with the winload, winresume, and memtest prefixes. However, this high degree of validation caused BitLocker to go into recovery mode for benign setting changes, for example, when applying a language pack BitLocker would enter recovery.
In Windows 8, Windows Server 2012, and later operating systems BitLocker narrows the set of BCD settings validated to reduce the chance of benign changes causing a BCD validation problem. If you believe that there is a risk in excluding a particular BCD setting from the validation profile, you can increase BCD validation coverage to suit your validation preferences. Alternatively, if a default BCD setting is persistently triggering recovery for benign changes, then you can exclude that BCD setting from the validation profile.
When secure boot is enabled
Computers with UEFI firmware can use Secure Boot to provide enhanced boot security. When BitLocker is able to use Secure Boot for platform and BCD integrity validation, as defined by the Allow Secure Boot for integrity validation group policy setting, the Use enhanced Boot Configuration Data validation profile group policy is ignored.
One of the benefits of using Secure Boot is that it can correct BCD settings during boot without triggering recovery events. Secure Boot enforces the same BCD settings as BitLocker. Secure Boot BCD enforcement is not configurable from within the operating system.
Customizing BCD validation settings
To modify the BCD settings BitLocker validates the IT Pro will add or exclude BCD settings from the platform validation profile by enabling and configuring the Use enhanced Boot Configuration Data validation profile Group Policy setting.
For the purposes of BitLocker validation, BCD settings are associated with a specific set of Microsoft boot applications. BCD settings are either associated with a specific boot application or can apply to all boot applications by associating a prefix to the BCD setting entered in the Group Policy setting. Prefix values include:
winload
winresume
memtest
all
All BCD settings are specified by combining the prefix value with either a hexadecimal (hex) value or a “friendly name.”
The BCD setting hex value is reported when BitLocker enters recovery mode and is stored in the event log (event ID 523). The hex value uniquely identifies which BCD setting caused the recovery event.
You can quickly obtain the friendly name for the BCD settings on your computer by using the command “bcdedit.exe /enum all”.
Not all BCD settings have friendly names, for those settings the hex value is the only way to configure an exclusion policy.
When specifying BCD values in the Use enhanced Boot Configuration Data validation profile Group Policy setting, use the following syntax:
Prefix the setting with the boot application prefix
Append a colon ‘:’
Append either the hex value or the friendly name
If entering more than one BCD setting, you will need to enter each BCD setting on a new line
For example, either “winload:hypervisordebugport” or “winload:0x250000f4” yield the same value.
Setting that applies to all boot applications may be applied only to an individual application, however the reverse is not true. For example, one can specify either: “all:locale” or “winresume:locale”, but as the bcd setting “win-pe” does not apply to all boot applications, “winload:winpe” is valid, but “all:winpe” is not valid. The setting that controls boot debugging (“bootdebug” or 0x16000010) will always be validated and will have no effect if it is included in the provided fields.
Note
Take care when configuring BCD entries in the Group Policy setting. The Local Group Policy Editor does not validate the correctness of the BCD entry. BitLocker will fail to be enabled if the Group Policy setting specified is invalid.
Default BCD validation profile
The following table contains the default BCD validation profile used by BitLocker in Windows 8, Windows Server 2012, and later operating systems:
Hex Value |
Prefix |
Friendly Name |
---|---|---|
0x11000001 |
all |
device |
0x12000002 |
all |
path |
0x12000030 |
all |
loadoptions |
0x16000010 |
all |
bootdebug |
0x16000040 |
all |
advancedoptions |
0x16000041 |
all |
optionsedit |
0x16000048 |
all |
nointegritychecks |
0x16000049 |
all |
testsigning |
0x16000060 |
all |
isolatedcontext |
0x1600007b |
all |
forcefipscrypto |
0x22000002 |
winload |
systemroot |
0x22000011 |
winload |
kernel |
0x22000012 |
winload |
hal |
0x22000053 |
winload |
evstore |
0x25000020 |
winload |
nx |
0x25000052 |
winload |
restrictapiccluster |
0x26000022 |
winload |
winpe |
0x26000025 |
winload |
lastknowngood |
0x26000081 |
winload |
safebootalternateshell |
0x260000a0 |
winload |
debug |
0x260000f2 |
winload |
hypervisordebug |
0x26000116 |
winload |
hypervisorusevapic |
0x21000001 |
winresume |
filedevice |
0x22000002 |
winresume |
filepath |
0x26000006 |
winresume |
debugoptionenabled |
Full list of friendly names for ignored BCD settings
This following is a full list of BCD settings with friendly names which are ignored by default. These settings are not part of the default BitLocker validation profile, but can be added if you see a need to validate any of these settings before allowing a BitLocker–protected operating system drive to be unlocked.
Note
Additional BCD settings exist that have hex values but do not have friendly names. These settings are not included in this list.
Hex Value |
Prefix |
Friendly Name |
---|---|---|
0x12000004 |
all |
description |
0x12000005 |
all |
locale |
0x12000016 |
all |
targetname |
0x12000019 |
all |
busparams |
0x1200001d |
all |
key |
0x1200004a |
all |
fontpath |
0x14000006 |
all |
inherit |
0x14000008 |
all |
recoverysequence |
0x15000007 |
all |
truncatememory |
0x1500000c |
all |
firstmegabytepolicy |
0x1500000d |
all |
relocatephysical |
0x1500000e |
all |
avoidlowmemory |
0x15000011 |
all |
debugtype |
0x15000012 |
all |
debugaddress |
0x15000013 |
all |
debugport |
0x15000014 |
all |
baudrate |
0x15000015 |
all |
channel |
0x15000018 |
all |
debugstart |
0x1500001a |
all |
hostip |
0x1500001b |
all |
port |
0x15000022 |
all |
emsport |
0x15000023 |
all |
emsbaudrate |
0x15000042 |
all |
keyringaddress |
0x15000047 |
all |
configaccesspolicy |
0x1500004b |
all |
integrityservices |
0x1500004c |
all |
volumebandid |
0x15000051 |
all |
initialconsoleinput |
0x15000052 |
all |
graphicsresolution |
0x15000065 |
all |
displaymessage |
0x15000066 |
all |
displaymessageoverride |
0x16000009 |
all |
recoveryenabled |
0x1600000b |
all |
badmemoryaccess |
0x1600000f |
all |
traditionalkseg |
0x16000017 |
all |
noumex |
0x1600001c |
all |
dhcp |
0x1600001e |
all |
vm |
0x16000020 |
all |
bootems |
0x16000046 |
all |
graphicsmodedisabled |
0x16000050 |
all |
extendedinput |
0x16000053 |
all |
restartonfailure |
0x16000054 |
all |
highestmode |
0x1600006c |
all |
bootuxdisabled |
0x16000072 |
all |
nokeyboard |
0x16000074 |
all |
bootshutdowndisabled |
0x1700000a |
all |
badmemorylist |
0x17000077 |
all |
allowedinmemorysettings |
0x22000040 |
all |
fverecoveryurl |
0x22000041 |
all |
fverecoverymessage |
0x31000003 |
all |
ramdisksdidevice |
0x32000004 |
all |
ramdisksdipath |
0x35000001 |
all |
ramdiskimageoffset |
0x35000002 |
all |
ramdisktftpclientport |
0x35000005 |
all |
ramdiskimagelength |
0x35000007 |
all |
ramdisktftpblocksize |
0x35000008 |
all |
ramdisktftpwindowsize |
0x36000006 |
all |
exportascd |
0x36000009 |
all |
ramdiskmcenabled |
0x3600000a |
all |
ramdiskmctftpfallback |
0x3600000b |
all |
ramdisktftpvarwindow |
0x21000001 |
winload |
osdevice |
0x22000013 |
winload |
dbgtransport |
0x220000f9 |
winload |
hypervisorbusparams |
0x22000110 |
winload |
hypervisorusekey |
0x23000003 |
winload |
resumeobject |
0x25000021 |
winload |
pae |
0x25000031 |
winload |
removememory |
0x25000032 |
winload |
increaseuserva |
0x25000033 |
winload |
perfmem |
0x25000050 |
winload |
clustermodeaddressing |
0x25000055 |
winload |
x2apicpolicy |
0x25000061 |
winload |
numproc |
0x25000063 |
winload |
configflags |
0x25000066 |
winload |
groupsize |
0x25000071 |
winload |
msi |
0x25000072 |
winload |
pciexpress |
0x25000080 |
winload |
safeboot |
0x250000a6 |
winload |
tscsyncpolicy |
0x250000c1 |
winload |
driverloadfailurepolicy |
0x250000c2 |
winload |
bootmenupolicy |
0x250000e0 |
winload |
bootstatuspolicy |
0x250000f0 |
winload |
hypervisorlaunchtype |
0x250000f3 |
winload |
hypervisordebugtype |
0x250000f4 |
winload |
hypervisordebugport |
0x250000f5 |
winload |
hypervisorbaudrate |
0x250000f6 |
winload |
hypervisorchannel |
0x250000f7 |
winload |
bootux |
0x250000fa |
winload |
hypervisornumproc |
0x250000fb |
winload |
hypervisorrootprocpernode |
0x250000fd |
winload |
hypervisorhostip |
0x250000fe |
winload |
hypervisorhostport |
0x25000100 |
winload |
tpmbootentropy |
0x25000113 |
winload |
hypervisorrootproc |
0x25000115 |
winload |
hypervisoriommupolicy |
0x25000120 |
winload |
xsavepolicy |
0x25000121 |
winload |
xsaveaddfeature0 |
0x25000122 |
winload |
xsaveaddfeature1 |
0x25000123 |
winload |
xsaveaddfeature2 |
0x25000124 |
winload |
xsaveaddfeature3 |
0x25000125 |
winload |
xsaveaddfeature4 |
0x25000126 |
winload |
xsaveaddfeature5 |
0x25000127 |
winload |
xsaveaddfeature6 |
0x25000128 |
winload |
xsaveaddfeature7 |
0x25000129 |
winload |
xsaveremovefeature |
0x2500012a |
winload |
xsaveprocessorsmask |
0x2500012b |
winload |
xsavedisable |
0x25000130 |
winload |
claimedtpmcounter |
0x26000004 |
winload |
stampdisks |
0x26000010 |
winload |
detecthal |
0x26000024 |
winload |
nocrashautoreboot |
0x26000030 |
winload |
nolowmem |
0x26000040 |
winload |
vga |
0x26000041 |
winload |
quietboot |
0x26000042 |
winload |
novesa |
0x26000043 |
winload |
novga |
0x26000051 |
winload |
usephysicaldestination |
0x26000054 |
winload |
uselegacyapicmode |
0x26000060 |
winload |
onecpu |
0x26000062 |
winload |
maxproc |
0x26000064 |
winload |
maxgroup |
0x26000065 |
winload |
groupaware |
0x26000070 |
winload |
usefirmwarepcisettings |
0x26000090 |
winload |
bootlog |
0x26000091 |
winload |
sos |
0x260000a1 |
winload |
halbreakpoint |
0x260000a2 |
winload |
useplatformclock |
0x260000a3 |
winload |
forcelegacyplatform |
0x260000a4 |
winload |
useplatformtick |
0x260000a5 |
winload |
disabledynamictick |
0x260000b0 |
winload |
ems |
0x260000c3 |
winload |
onetimeadvancedoptions |
0x260000c4 |
winload |
onetimeoptionsedit |
0x260000e1 |
winload |
disableelamdrivers |
0x260000f8 |
winload |
hypervisordisableslat |
0x260000fc |
winload |
hypervisoruselargevtlb |
0x26000114 |
winload |
hypervisordhcp |
0x21000005 |
winresume |
associatedosdevice |
0x25000007 |
winresume |
bootux |
0x25000008 |
winresume |
bootmenupolicy |
0x26000003 |
winresume |
customsettings |
0x26000004 |
winresume |
pae |
0x25000001 |
memtest |
passcount |
0x25000002 |
memtest |
testmix |
0x25000005 |
memtest |
stridefailcount |
0x25000006 |
memtest |
invcfailcount |
0x25000007 |
memtest |
matsfailcount |
0x25000008 |
memtest |
randfailcount |
0x25000009 |
memtest |
chckrfailcount |
0x26000003 |
memtest |
cacheenable |
0x26000004 |
memtest |
failuresenabled |