2012-07-16 7 views

risposta

3

persone normalmente fanno questo genere di cose tramite WMI, ma non riesce a fornire informazioni utili un sacco di volte, anche fornendo informazioni "sbagliata" perché a volte si basa su vendor riempita informazioni dal BIOS (via SMBIOS), che viene spesso vuoto o sbagliato, invece di andare a comunicare con la parte hardware specifica.

Ho passato questa esperienza prima per ottenere informazioni sulla RAM. WMI ha fornito informazioni errate sul BIOS e ho scoperto che i chip RAM sono dotati di uno speciale chip SPD (Serial Presence Detect) con cui avevo bisogno di comunicare. Alla fine il mio datore di lavoro ha optato per l'API CPUID.

Qui l'autore CPU-Z parla un po 'su questo argomento in un'intervista:

http://www.techpowerup.com/mobile/reviews/Interviews/Franck_Delattre/1.html.

Per ottenere informazioni come questa è necessario cercare su come comunicare con lo spazio di configurazione PCI in modalità kernel attraverso un driver o andare per qualche API alternativa che farebbe questo per voi.

Ecco alcuni link che ho vissuto in quel momento:

http://www.codeproject.com/Articles/35378/Access-Physical-Memory-Port-and-PCI-Configuration

http://support.microsoft.com/?scid=kb;en-us;253232&x=3&y=13

http://www.hollistech.com/Resources/Misc%20articles/getbusdata.htm

http://www.osronline.com/showThread.CFM?link=176210#T4

Inoltre, credo che vale la pena di menzionare di le funzioni SetupDi in Windows che a volte sono abl e per fornire informazioni che WMI non può.

+0

Grazie Chico. Ho passato attraverso SetupDi Api. Sebbene sembrino migliori di WMI, sono ancora inaffidabili per la maggior parte del tempo. È sorprendente quanto sia difficile trovare un buon esempio per questo genere di cose. Se finisco per trovare un modo affidabile, lo posterò su github :) – ivymike

+0

@ivymike ok, non ero fortunato con le informazioni sulla RAM, NON C'È STATA AFFIDABILE per estrarre informazioni dai chip SPD. Sono stato in grado di creare un semplice driver per abilitare SMBUS per uno specifico ICH (Intel southbridge) costruito sulla mia vecchia scheda madre del PC. Abilitare SMBUS è il primo passo per estrarre informazioni da questi chip, ho trovato alcune indicazioni sul pacchetto linux-lm-sensors che ha un modulo per la comunicazione SMBUS e uno script perl per interpretare i dati SPD. Ad ogni modo, l'ho fatto proprio come un proof of concept, ha funzionato sulla base del datasheet della mia specifica versione ICH, che aveva ... –

+0

@ivymike ... indirizzi specifici dello spazio di configurazione PCI. Le specifiche hardware cambiano anche da versione a versione per lo stesso fornitore. Avrei bisogno di supportare un elenco di fornitori. Questo è ciò che fa l'API CPUID e anche ciò che fa il pacchetto lm-sensors. L'unica fonte affidabile farebbe questo tipo di enorme supporto hardware. –