Lire les structures smbios/dmi (informations sur le bios, la mémoire,....)

Description

Ce code permet d'avoir acces au infos SMBIOS résidentes en mémoire sous XP/2000/NT. On trouve des infos sur la carte mère, le processeur, la mémoire, les slots, les ports...

Ce code n'a été testé que sous XP Home mais doit fonctionner sur XP/2000/NT
D'après MSDN et le fonctionnement des .sys, ce code ne doit pas fonctionner sous 9x/ME.

Je vois déjà des programmeurs qui vont dire "WMI fait déjà tout ca". Oui effectivement, WMI renvoie en grande partie les memes infos mais ce code permet de se passer de WMI... ca peut servir...

Pour ce qui est du fonctionnement : le programme principale accède à une dll qui gère en pilote en mode kernel pour lire la mémoire physique où les structures se trouvent. (pour ceux qui veulent le code de la dll et du .sys, il seront bientot sur CPPFrance)

La dll exporte 2 fonctions :
'déclaration en VB.Net
'renvoie des infos sur DMI
'pBuffer renvoie à une structure TableEntryPoint contenant des infos à passer à GetDMITableStructure
'nBufferLenght : taille de pBuffer
Declare Function GetDMIInfos Lib "SMBIOSdll.dll" (ByRef pBuffer As TableEntryPoint, ByVal nBufferLenght As Integer) As Integer
'renvoie un tableau d'octets correspondant à une structure du type spécifié dans pStruc
'pStruc doit contenir les parametres comme le type ou le numéro de la structure à chercher
'pBuffer renvoie à un tableau d'octets contenat la structure recherchée
'nBufferLenght : taille de pBuffer
Declare Function GetDMITableStructure Lib "SMBIOSdll.dll" Alias "GetDMITableStructure" (ByRef pStruc As StrucTableHeader, ByRef pBuffer As Byte, ByVal nBufferLenght As Integer) As Integer

ou
'VB 6.0
Declare Function GetDMIInfos Lib "SMBIOSdll.dll" (ByVal pBuffer As Long, ByVal nBufferLenght As long) As long
Declare Function GetDMITableStructure Lib "SMBIOSdll.dll" Alias "GetDMITableStructure" (ByVal pStruc As Long, Byval pBuffer As long, ByVal nBufferLenght As long) As long

pour passer les buffers au fonction il faut utiliser varptr()

la premiere renvoie des infos sur DMI
la seconde renvoie les structures demandées

pour plus d'infos sur DMI(SMBIOS) : http://www.dmtf.org/standards/bios.php

la dll et le driver .sys doivent etre dans le répertoire de l'executable VB.Net ou VB6.0 (sous VB6.0 ils doivent aussi etre dans le répertoire de VB (pourquoi ? je sais pas :()) Dans VB6.0, il ne faut pas utiliser le bouton Stop de VB mais arret le programme par la croix de la fenetre

Conclusion :


N'hésitez pas à commenter et à noter...
Ce code ne comporte pas de bugs... à ma connaissance...

Une version VB6.0 et VB.Net sont disponibles.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.