Acceda a la información de la placa base sin utilizar WMI

Necesito acceder a la identificación de motheroard (serial, fabricación, etc.) en mi aplicación en múltiples procesos. He podido consultar esto con éxito usando WMI, pero estoy buscando una alternativa.

Si te interesa saber la situación:

Tengo un comportamiento de aplicación diferente según la configuración del hardware, o si una variable de entorno particular está configurada (para propósitos de prueba).

bool IsVideoCardDisplay = ( getenv("Z_VI_DISPLAY") || !QueryWmiForSpecialBoard() ) ? false : true; 

Cuando se establece la variable de entorno, la consulta de WMI no es necesaria: la aplicación funciona bien. Sin embargo, cuando la variable de entorno no está presente, algunos de los componentes de mi aplicación no se inician cuando es necesario realizar las consultas de WMI. Sospecho que puede haber algunos efectos secundarios de las llamadas de WMI (que solo ocurren una vez por proceso. Por eso estoy buscando una forma alternativa.

En Vista +, puede usar la API GetSystemFirmwareTable para acceder a las tablas SMBIOS y analizarlas para obtener números de serie [posiblemente disponibles] y otras cadenas y valores de identificación.

En particular, puede acceder a los datos de la placa base, incluidos el proveedor y S / N:

  Intel Corporation DZ77BH-55K AAG39018-400 BQBH206600DT 

Aparentemente no hay manera de hacer esto, lo cual es desafortunado.

Esa información es proporcionada por la instrucción CPUID. El siguiente enlace le proporciona un progtwig que utiliza esta instrucción para exponer los resultados de la ejecución de la instrucción.

progtwig cpuid gnu