Index: /trunk/src/VBox/Devices/EFI/DevEFI.cpp
===================================================================
--- /trunk/src/VBox/Devices/EFI/DevEFI.cpp	(revision 71060)
+++ /trunk/src/VBox/Devices/EFI/DevEFI.cpp	(revision 71061)
@@ -1793,5 +1793,4 @@
      * Plant some structures in RAM.
      */
-    FwCommonPlantSmbiosAndDmiHdrs(pDevIns, pThis->cbDmiTables, pThis->cNumDmiTables);
     if (pThis->u8IOAPIC)
         FwCommonPlantMpsFloatPtr(pDevIns);
@@ -2388,14 +2387,22 @@
 
     /*
-     * Plant DMI and MPS tables.
-     */
-    /** @todo XXX I wonder if we really need these tables as there is no SMBIOS header... */
+     * Plant DMI and MPS tables in the ROM region.
+     */
     rc = FwCommonPlantDMITable(pDevIns, pThis->au8DMIPage, VBOX_DMI_TABLE_SIZE, &pThis->aUuid,
                                pDevIns->pCfg, pThis->cCpus, &pThis->cbDmiTables, &pThis->cNumDmiTables);
     AssertRCReturn(rc, rc);
+
+    /*
+     * NB: VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.c scans memory for
+     * the SMBIOS header. The header must be placed in a range that EFI will scan.
+     */
+    FwCommonPlantSmbiosAndDmiHdrs(pDevIns, pThis->au8DMIPage + VBOX_DMI_TABLE_SIZE,
+                                  pThis->cbDmiTables, pThis->cNumDmiTables);
+
     if (pThis->u8IOAPIC)
         FwCommonPlantMpsTable(pDevIns,
-                              pThis->au8DMIPage + VBOX_DMI_TABLE_SIZE,
-                              _4K - VBOX_DMI_TABLE_SIZE, pThis->cCpus);
+                              pThis->au8DMIPage + VBOX_DMI_TABLE_SIZE + VBOX_DMI_HDR_SIZE,
+                              _4K - VBOX_DMI_TABLE_SIZE - VBOX_DMI_HDR_SIZE, pThis->cCpus);
+
     rc = PDMDevHlpROMRegister(pDevIns, VBOX_DMI_TABLE_BASE, _4K, pThis->au8DMIPage, _4K,
                               PGMPHYS_ROM_FLAGS_PERMANENT_BINARY, "DMI tables");
Index: /trunk/src/VBox/Devices/PC/DevFwCommon.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevFwCommon.cpp	(revision 71060)
+++ /trunk/src/VBox/Devices/PC/DevFwCommon.cpp	(revision 71061)
@@ -118,4 +118,6 @@
 } *DMIMAINHDRPTR;
 AssertCompileSize(DMIMAINHDR, 15);
+
+AssertCompile(sizeof(SMBIOSHDR) + sizeof(DMIMAINHDR) <= VBOX_DMI_HDR_SIZE);
 
 /** DMI header */
@@ -956,9 +958,12 @@
  *
  * @param   pDevIns         The device instance data.
+ * @param   pHdr            Pointer to the header destination.
  * @param   cbDmiTables     Size of all DMI tables planted in bytes.
  * @param   cNumDmiTables   Number of DMI tables planted.
  */
-void FwCommonPlantSmbiosAndDmiHdrs(PPDMDEVINS pDevIns, uint16_t cbDmiTables, uint16_t cNumDmiTables)
-{
+void FwCommonPlantSmbiosAndDmiHdrs(PPDMDEVINS pDevIns, uint8_t *pHdr, uint16_t cbDmiTables, uint16_t cNumDmiTables)
+{
+    RT_NOREF(pDevIns);
+
     struct
     {
@@ -995,5 +1000,5 @@
     aBiosHeaders.dmi.u8Checksum      = fwCommonChecksum((uint8_t*)&aBiosHeaders.dmi,    sizeof(aBiosHeaders.dmi));
 
-    PDMDevHlpPhysWrite(pDevIns, 0xfe300, &aBiosHeaders, sizeof(aBiosHeaders));
+    memcpy(pHdr, &aBiosHeaders, sizeof(aBiosHeaders));
 }
 
Index: /trunk/src/VBox/Devices/PC/DevFwCommon.h
===================================================================
--- /trunk/src/VBox/Devices/PC/DevFwCommon.h	(revision 71060)
+++ /trunk/src/VBox/Devices/PC/DevFwCommon.h	(revision 71061)
@@ -29,5 +29,5 @@
 /* Plant DMI table */
 int FwCommonPlantDMITable(PPDMDEVINS pDevIns, uint8_t *pTable, unsigned cbMax, PCRTUUID pUuid, PCFGMNODE pCfg, uint16_t cCpus, uint16_t *pcbDmiTables, uint16_t *pcNumDmiTables);
-void FwCommonPlantSmbiosAndDmiHdrs(PPDMDEVINS pDevIns, uint16_t cbDmiTables, uint16_t cNumDmiTables);
+void FwCommonPlantSmbiosAndDmiHdrs(PPDMDEVINS pDevIns, uint8_t *pHdr, uint16_t cbDmiTables, uint16_t cNumDmiTables);
 
 /* Plant MPS table */
