Procedure
Verify the system has a TPM and is ready for use. Run "tpm.msc". Review the sections in the center pane. "Status" must indicate it has been configured with a message such as "The TPM is ready for use" or "The TPM is on and ownership has been taken". TPM Manufacturer Information - Specific Version = 2.0 If a TPM is not found or is not ready for use, this is a finding.
Procedure
Verify the system firmware is configured to run in UEFI mode, not Legacy BIOS. Run "System Information". Under "System Summary", if "BIOS Mode" does not display "UEFI", this is a finding.
Procedure
Verify the system firmware is configured for Secure Boot. Run "System Information". Under "System Summary", if "Secure Boot State" does not display "On", this is a finding.
Procedure
Confirm VBS is enabled and running with Secure Boot or Secure Boot and DMA Protection. If there are documented operational mission needs to disable VBS, this may be reduced to a CAT III finding. Run "PowerShell" with elevated privileges (run as administrator). Enter the following: "Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard" If "RequiredSecurityProperties" does not include a value of "2" indicating "Secure Boot" (e.g., "{1, 2}"), this is a finding. If "Secure Boot and DMA Protection" is configured, "3" will also be displayed in the results (e.g., "{1, 2, 3}"). If "VirtualizationBasedSecurityStatus" is not a value of "2" indicating "Running", this is a finding. Alternately: Run "System Information". Under "System Summary", verify the following: If "Device Guard virtualization-based security" does not display "Running", this is a finding. If "Device Guard Required Security Properties" does not display "Base Virtualization Support, Secure Boot", this is a finding. If "Secure Boot and DMA Protection" is configured, "DMA Protection" will also be displayed (e.g., "Base Virtualization Support, Secure Boot, DMA Protection"). The policy settings referenced in the Fix section will configure the following registry values. However, due to hardware requirements, the registry values alone do not ensure proper function. Registry Hive: HKEY_LOCAL_MACHINE Registry Path: \SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\ Value Name: EnableVirtualizationBasedSecurity Value Type: REG_DWORD Value: 1 Value Name: RequirePlatformSecurityFeatures Value Type: REG_DWORD Value: 1 (Secure Boot only) or 3 (Secure Boot and DMA Protection) A Microsoft article on the Credential Guard system requirement can be found at the following link: https://technet.microsoft.com/en-us/itpro/windows/keep-secure/credential-guard-requirements
Procedure
Confirm Credential Guard is running. Run "PowerShell" with elevated privileges (run as administrator). Enter the following: "Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard" If "SecurityServicesRunning" does not include a value of "1" (e.g., "{1, 2}"), this is a finding. Alternately: Run "System Information". Under "System Summary", verify the following: If "virtualization-based Services Running" does not list "Credential Guard", this is a finding. The policy settings referenced in the Fix section will configure the following registry value. However, due to hardware requirements, the registry value alone does not ensure proper function. Registry Hive: HKEY_LOCAL_MACHINE Registry Path: \SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\ Value Name: LsaCfgFlags Value Type: REG_DWORD Value: 0x00000001 (1) (Enabled with UEFI lock)
Procedure
Confirm virtualization-based protection of code integrity. If there are documented operational mission needs to disable code integrity, this may be reduced to a CAT II finding. Run "PowerShell" with elevated privileges (run as administrator). Enter the following: "Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard" If "SecurityServicesRunning" does not include a value of "2" (e.g., "{1, 2}"), this is a finding. Alternately: Run "System Information". Under "System Summary", verify the following: If "Virtualization-based Security Services Running" does not list "Hypervisor enforced Code Integrity", this is a finding. The policy settings referenced in the Fix section will configure the following registry value. However, due to hardware requirements, the registry value alone does not ensure proper function. Registry Hive: HKEY_LOCAL_MACHINE Registry Path: \SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\ Value Name: HypervisorEnforcedCodeIntegrity Value Type: REG_DWORD Value: 0x00000001 (1) (Enabled with UEFI lock), or 0x00000002 (2) (Enabled without lock)
Procedure
Verify the effective setting in Local Group Policy Editor. Run "gpedit.msc". Navigate to Local Computer Policy >> Computer Configuration >> Windows Settings >> Security Settings >> Local Policies >> User Rights Assignment. If any groups or accounts other than the following are granted the "Modify firmware environment values" user right, this is a finding: Administrators
Success looks like: TpmPresent, TpmReady, TpmEnabled and TpmActivated are True and LockedOut is False; note ManufacturerIdTxt and ManufacturerVersion for the firmware inventory.
If it does not: TpmPresent False on a Windows 11 PC means the TPM is disabled in firmware; enable it and clear it only if the device is not yet in use. LockedOut True means repeated bad authorisations; wait out the lockout or reset it from firmware, then find the cause.
Success looks like: True.
If it does not: False means Secure Boot is turned off in firmware; "Cmdlet not supported on this platform" means the PC booted in legacy BIOS mode and needs a UEFI reinstall before anything else in this plan is worth testing.
Success looks like: VirtualizationBasedSecurityStatus is 2 (running); SecurityServicesRunning contains 1 (Credential Guard) and 2 (memory integrity, HVCI), and 3 (System Guard Secure Launch) where the hardware supports it; AvailableSecurityProperties lists 2 (Secure Boot) and 3 (DMA protection).
If it does not: Status 1 means configured but not running: a restart or a firmware setting (virtualisation, IOMMU) is missing. A missing 1 on an Enterprise or Education device means Credential Guard was turned off or the device lacks the prerequisites; the System log, source WinInit, event 13 confirms it started and 15 to 17 say why it did not.
Success looks like: Kernel DMA Protection On, Secure Boot State On, and the running services match the previous step.
If it does not: Kernel DMA Protection Off on hardware that supports it is a firmware setting; on hardware that does not, record the exception and rely on the BitLocker pre-boot PIN.
Success looks like: The TPM manufacturer is Microsoft (Pluton) and the firmware version matches the latest Windows Update.
If it does not: A discrete or firmware TPM from another vendor means Pluton is present but not in use, which is how 2026 and later AMD and Qualcomm designs ship; test that TPM's firmware against the vendor's advisories instead.
Success looks like: VolumeStatus FullyEncrypted, ProtectionStatus On, EncryptionMethod XtsAes256, key protectors TPM (or TPM and PIN where the baseline requires it) and RecoveryPassword, with the recovery password escrowed to Entra ID or Active Directory.
If it does not: "Waiting for Activation" means only the clear protector exists: add the TPM and recovery-password protectors and back the password up with BackupToAAD-BitLockerKeyProtector. ProtectionStatus Off means protection was suspended: Resume-BitLocker, then find who suspended it.
Success looks like: The device-health rules (BitLocker, Secure Boot, code integrity) and the system-security rules (TPM, encryption, firewall, antivirus) all read compliant; the minimum OS version rule matches the build the fleet runs.
If it does not: A device-health rule still failing after BitLocker was turned on needs a restart before attestation re-measures; a TPM rule failing with Get-Tpm healthy points at a stale compliance evaluation, so sync the device and wait for the next report.