A Windows VM made by MacVisor 27.2.1 or later has UEFI Secure Boot, a TPM 2.0 and measured boot, so BitLocker works in it as on a PC. This page is for the person who has to run that across a team: what to turn on, where the recovery keys go, what breaks the TPM's seal, and what your compliance tooling will say. The settings themselves are on Windows 11 guests.
At a glance
| Question | Answer |
|---|---|
| Does Windows 11's hardware check pass? | Yes: Secure Boot and TPM 2.0, with nothing bypassed |
| Does BitLocker work? | Yes, with a TPM protector. Windows doesn't turn it on by itself: you do |
| Where is the TPM? | In the VM's bundle, encrypted with a key only this Mac's Secure Enclave has |
| Does the TPM move with the VM to another Mac? | Only with mvz tpm export and mvz tpm import. Otherwise the VM needs its BitLocker recovery key there |
| Can the TPM be attested? | No. See What compliance tools report |
| Memory Integrity, Credential Guard? | No: they need nested virtualization, which Windows VMs don't have |
| Entra ID join and Intune enrollment? | Not tested by us yet. See What isn't tested |
What the VM's TPM is
The TPM is software: MacVisor runs it for the VM, in a sandboxed helper process of its own, and Windows drives it with its inbox TPM driver. To Windows it is a TPM 2.0 that is present and ready.
Its state is four files in the VM's bundle (tpm-*.bin), encrypted with AES-256-GCM. The key comes from a key in this Mac's Secure Enclave, which never leaves that Mac. What follows from that:
- A copy of the bundle on another Mac can't open the TPM. That covers a backup, an export, a disk taken out of the Mac, and a bundle copied over the network.
- On this Mac, the macOS account that owns the VM can start it, and the TPM unlocks for that start. The Secure Enclave key is usable once someone has signed in to the Mac after it started up, so VMs can start with the screen locked.
- So a TPM-only BitLocker protector protects the Windows disk away from this Mac, not from someone signed in to this Mac as the VM's owner. That is the same position as a PC with TPM-only BitLocker and automatic sign-in. Protect the Mac itself with FileVault and a password, as Security model says.
MacVisor keeps the Windows account's password in the bundle too, unless you delete it (mvz password <vm> --delete). For a VM that holds anything sensitive, delete it once Windows is set up, and turn automatic sign-in off (--no-autologin when you create the VM).
Turn BitLocker on
Windows doesn't encrypt a MacVisor VM by itself: MacVisor sets PreventDeviceEncryption so that a clone or a move doesn't lock anyone out by surprise. A value you set yourself, by Group Policy or MDM, is left alone.
-
Check the VM in an administrator PowerShell:
Get-Tpm | Select-Object TpmPresent, TpmReady # both True Confirm-SecureBootUEFI # True -
Turn BitLocker on with a recovery password. Windows adds the TPM protector itself:
manage-bde -on C: -RecoveryPassword -UsedSpaceOnly -SkipHardwareTestIt prints the 48-digit recovery password once. Escrow it before you go on: see Escrow the recovery key.
-
Check what it sealed to, once encryption has finished:
manage-bde -status C: manage-bde -protectors -get C:
| Secure Boot | PCR validation profile | What it means |
|---|---|---|
| On (the default) | 7, 11 | Sealed to the Secure Boot state. System Information shows PCR7 Configuration: Bound |
| Off | 0, 2, 4, 11 | Sealed to the boot files themselves, as on a PC without Secure Boot |
Keep Secure Boot on. With it, the seal depends only on the Secure Boot keys and on who signed the boot files, so replacing a boot file with a newer signed one doesn't ask for the recovery key.
BitLocker policies from Group Policy or an MDM (encryption method, required protectors, escrow before enabling) apply as on a PC.
From the Mac, a VM made with --ssh takes the same commands through mvz exec:
mvz exec win11 -- "manage-bde -status C:"
Escrow the recovery key
The recovery key is the only way into the disk when the TPM's seal breaks, and several ordinary VM operations break it. Escrow the key before anyone clones, moves or resets the VM.
| Where | How | Needs |
|---|---|---|
| Entra ID | BackupToAAD-BitLockerKeyProtector | The VM joined to Entra ID |
| Active Directory | Backup-BitLockerKeyProtector | The VM joined to the domain, and the BitLocker recovery schema and policy in place |
| A Microsoft account | Windows offers it when BitLocker is turned on from Settings | A personal Microsoft account signed in |
| Your own vault | Read the key from the Mac and store it | A VM made with --ssh |
Entra ID or Active Directory, in an administrator PowerShell in the VM:
$id = ((Get-BitLockerVolume -MountPoint C:).KeyProtector |
Where-Object KeyProtectorType -eq RecoveryPassword).KeyProtectorId
BackupToAAD-BitLockerKeyProtector -MountPoint C: -KeyProtectorId $id # Entra ID
Backup-BitLockerKeyProtector -MountPoint C: -KeyProtectorId $id # Active Directory
Your own vault, from the Mac:
mvz exec win11 -- "manage-bde -protectors -get C: -Type RecoveryPassword"
The output has the protector's ID and the 48-digit password. Store both with the VM's name: the recovery screen shows the first eight characters of the ID, which is how you find the right key.
What makes BitLocker ask for the recovery key
BitLocker asks when the TPM it sealed to is gone, or when what the TPM measured at boot has changed.
| Operation | Asks for the recovery key? | Why |
|---|---|---|
| Start, shut down, restart, suspend, resume, pause | No | Same TPM, same boot |
| Snapshot, and a revert on the Mac the snapshot was taken on | No | A snapshot holds the TPM as it was, and the revert brings it back |
| MacVisor's own backup, restored on this Mac in place of the VM | No | A backup carries the sealed TPM |
| Updating MacVisor | No | A VM keeps the boot files it has |
| Windows Update, an in-place repair install | No | Windows handles its own boot changes |
| Clone, linked or full | Yes | A clone gets a TPM of its own |
| A new VM from a template made from an encrypted VM | Yes | A template has no TPM |
| An export or a backup imported while the original is still on this Mac | Yes | The copy gets a TPM of its own; import says so |
| A move to another Mac | Yes, unless you move the TPM | The TPM's key stays in the first Mac's Secure Enclave |
| Reset TPM | Yes | The VM gets a new TPM |
| Turning the TPM off | Yes, at each start while it's off | The TPM is kept, and BitLocker unlocks from it again when you turn it back on |
| Turning Secure Boot on or off | Yes | The seal depends on the Secure Boot state |
mvz repair-boot --reset-keys | Yes | The Secure Boot keys are set up again |
Repair Boot Files, without --reset-keys | No with Secure Boot on. With it off, the next start may ask once | With Secure Boot off the seal covers the boot path |
| Erase and Install Windows | — | It erases the disk and the TPM |
Two rules follow:
-
Make templates and golden images before you turn BitLocker on. Every VM made from an encrypted image would start at the recovery screen. Turn BitLocker on in each VM, by policy or with the commands above, so each seals to its own TPM and escrows its own key.
-
Before a planned change to Secure Boot or its keys, suspend BitLocker for one restart, as you would before a firmware update on a PC. Windows seals to the new state at the next start:
Suspend-BitLocker -MountPoint C: -RebootCount 1
After entering the recovery key, sign in and check manage-bde -protectors -get C:. If the VM has a new TPM (a clone, a reset, a move without its TPM), remove the old TPM protector and add a new one, or BitLocker asks again at every start:
manage-bde -protectors -delete C: -Type TPM
manage-bde -protectors -add C: -TPM
Move a VM to another Mac
A VM moved without its TPM doesn't start on the other Mac until you choose: start it without its TPM (mvz set <vm> --tpm off), or give it a new one (mvz tpm reset <vm>). Either way BitLocker asks for the recovery key. To keep the same TPM instead:
- On the first Mac, shut the VM down and run
mvz tpm export <vm> <file>. It asks for a passphrase of at least 8 characters and writes the TPM sealed with that passphrase (PBKDF2-HMAC-SHA256 with 600,000 rounds, AES-256-GCM) instead of the Secure Enclave. - Move the VM (an export, a backup or a copy of its bundle) and the file.
- On the other Mac, with the VM shut down, run
mvz tpm import <vm> <file>.
Windows sees the same TPM, so BitLocker unlocks and Windows Hello carries on. The TPM is then sealed to the second Mac.
For a script, the passphrase comes on standard input or from --passphrase-file, never on the command line, and import needs --yes:
mvz tpm export win11 /Volumes/Transfer/win11.tpm --passphrase-file /path/to/passphrase
mvz tpm import win11 /Volumes/Transfer/win11.tpm --passphrase-file /path/to/passphrase --yes
What to plan for:
- Treat the export file as you treat the recovery key. With its passphrase it is the VM's TPM. Delete it after the import, or keep it in the vault where the recovery key is.
- Export before a Mac is erased, replaced or sent for repair. Don't count on a TPM opening on a Mac that was erased or whose logic board was changed. Migration Assistant and Time Machine copy the bundle, and the copy has the same limit as any other.
- If the first Mac is gone, use the recovery key: reset the TPM on the new Mac, start the VM, enter the key, and add a new TPM protector as shown above.
- Snapshots taken on the first Mac hold the TPM sealed to that Mac. A revert to one on the second Mac keeps the TPM you imported, and says so.
Reset a TPM
Reset TPM… under Firmware in VM Settings → System, or mvz tpm reset <vm>, erases the VM's TPM. The VM must be shut down, with no suspended session, and gets a new TPM at its next start. Use it for a VM that arrived without its TPM, or one whose TPM can't be read.
It is the same as clearing a PC's TPM. Afterwards:
- BitLocker asks for the recovery key, then needs a new TPM protector.
- Windows Hello asks for a new PIN.
- Keys and certificates that Windows kept in the TPM are gone. That includes the device's registration with Entra ID or a domain's certificates, where it had them: join or enroll again as you would after clearing a PC's TPM.
A reset can't be undone, except by reverting to a snapshot taken before it, which brings the old TPM back with the disk.
Backups and disaster recovery
| You have | After losing the Mac, you can |
|---|---|
| A backup or an export of the VM, and the BitLocker recovery key | Restore on another Mac, reset the TPM, enter the key |
| A backup or an export, and a TPM export with its passphrase | Restore on another Mac and import the TPM. Nothing asks for a key |
| A backup or an export alone | Restore the VM, but not read a BitLocker-encrypted disk |
One TPM export serves until that TPM is reset: it holds the TPM's identity, which later use doesn't change. For most teams the escrowed recovery key is enough, and the TPM export is for VMs where re-enrolling Windows Hello and certificates would be costly.
What compliance tools report
| Check | Result on a MacVisor VM |
|---|---|
| TPM 2.0 present and ready | Yes |
| Secure Boot enabled | Yes |
| BitLocker on, key escrowed | Yes, once you turn it on and escrow the key |
| TPM attestation, device health attestation | Fails. The TPM has no endorsement-key certificate from a TPM manufacturer, so Windows reports Cannot be attested |
| Autopilot self-deploying mode and pre-provisioning | Not possible: both need TPM attestation |
| Memory Integrity, Credential Guard, Virtualization-based Security | Off, and can't be turned on: they need nested virtualization |
| Secure Boot certificate and revocation (dbx) updates | Windows reports them as not applied: Microsoft's servicing skips Apple's virtual firmware (System events 1801 and 1802). The 2023 certificates are in every VM's keys already. See Windows 11 guests |
If a compliance policy requires attestation or Memory Integrity, a MacVisor VM can't meet it. Give those VMs a policy of their own that checks Secure Boot, the TPM and BitLocker by their state instead.
What isn't tested
We haven't yet run a Windows VM through these, so treat them as unknown rather than supported:
- Joining Entra ID, enrolling in Intune, user-driven Autopilot and Windows Hello for Business.
- BitLocker turned on silently by an Intune policy.
- A BitLocker startup PIN (TPM and PIN), typed at the pre-boot screen.
- Windows feature updates. An in-place repair install of the same version works.
If you run one of these on MacVisor, tell us how it went.
Checklist
- Secure Boot and the TPM on (the default for new Windows VMs).
- Templates made before BitLocker is turned on.
- BitLocker on in each VM, with a recovery password.
- The recovery key escrowed outside the VM, findable by the protector's ID.
- The Windows account's password deleted from the bundle, and automatic sign-in off, where the data calls for it.
- FileVault on the Mac.
- A TPM export, or the recovery key at hand, before a Mac is erased or replaced.
- A compliance policy for these VMs that doesn't need attestation or Memory Integrity.
DeltaSync