How to check SLP 1.0 values from the BIOS using Win32 API?

Question:

Is there any API available to check SLP 1.0 values from the BIOS?

Answer:

Yes, you can use EnumSystemFirmwareTables API for that.

EnumSystemFirmwareTables API enumerates all system firmware tables of the specified type. It supports 3 types of firmware table provider.

  • The ACPI firmware table provider
  • The raw firmware table provider and
  • The raw SMBIOS firmware table provider

Where, the raw firmware table provider ('FIRM') returns a list of DWORD table identifiers. Each identifier corresponds to the beginning of a physical address range. Currently, this provider returns 'C000' and 'E000'. These values correspond to physical memory from 0xC0000 to 0xDFFFF and 0xE0000 to 0xFFFFF, respectively.

To check values of SLP 1.0 from the BIOS we need to access data from the physical memory location 0xE0000 to 0xFFFFF.

We also have the following alternatives to read data from low physical memory:

  1. Retrieve the SMBIOS properties using WMI. Many individual properties are contained in the Win32 classes. One can also retrieve the raw SMBIOS data in a single buffer using the MSSMBios_RawSMBiosTables class.
  2. Use the GetSystemFirmwareTable function to read the raw SMBIOS firmware table.

Links:

EnumSystemFirmwareTables Function
https://msdn.microsoft.com/en-us/library/ms724259(VS.85).aspx

GetSystemFirmwareTable Function
https://msdn.microsoft.com/en-us/library/ms724379(VS.85).aspx