Accessing SMX/TPM registers in Windows

Accessing SMX/TPM registers in Windows

I would like to do a measured launch in Windows.I have a Dell Optiplex 755 with TXT/VT-x/VT-d and the TPM enabled from BIOS. Also, I've installed the manufacturer drivers for the TPM and Q35 chipset. The VMX instructions work correctly as well as GETSEC. The GETSEC[CAPABILITIES] reports a compatible chipset. I can't, however, access the SMX or TPM registers.

According to the documentation, the SMX registers are memory mapped to 0xFED20000 - FED3FFFF and the TPM registers are mapped to 0xFED40000 - 0xFED4FFFF. These regions are listed as allocated resources in the Device Manager application, so the system is finding them.

I've tried read/writes tothe public SMX regs(0xFED30000)in assembly and the READ_REGISTER_XXX macros. Neither work. Even windbg can see anything in these ranges. What am I doing wrong? How do I access the SMX registers?

Thank you,


2 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

You should be able to read the TXT public space registers (0xfed3xxxx) from a driver once you map them into your address space. I havent tried this under Windows myself, but I know of others who have.

In the case of the TPM, if you have a driver loaded then that may be preventing your access.

When you say that you are not able to read the registers, what exactly is the failure?

Leave a Comment

Please sign in to add a comment. Not a member? Join today