Our customer wrote: DMIScope on x64 Windows hangs on write operation, but works fine on x86 Windows on the same platform. Why it happens? |
---|
This happens because of the way how your BIOS is written.
The sample below is taken from widely installed Phoenix BIOS version 6.0 to demonstrate why described error occurs. Doing the DMI write operation BIOS tries to switch the system into 32-bit protected mode by causing the SMI (System Management Interrupt). The used code is as follow:
|
Under Windows x64 the SMI handler from BIOS cannot be executed (simply
because 32-bit protected mode code of SMI handler cannot be executed
on x64 architecture) and, therefore, CPU flags will be never changed. As
result, following conditional JP instruction will be executed forever in the
endless loop. Microsoft emulator executing 16-bit code built into Windows x64 provides no mechanism to recognize or break execution in such situation. As result, DMIScope appears to hang, but in fact system is sitting in the end-less loop inside of the BIOS code. |