L'éternel problème du pilote manquant...

Je me suis encore confronté aujourd'hui à la recherche du pilote de carte réseau qu'on ne trouve jamais...

Dans le contexte, à chaque workshop que je délivre autour de MDT, je bute toujours sur l'impossibilité de me connecter à mon point de déploiement depuis l'image WinPE Lite Touch... A chaque fois, c'est le petit désagrément qui me fait perdre du temps mais plus encore aux personnes à qui je présente cette solution. Et tout ça à cause d'un malheureux pilote de carte réseau manquant...

Situation assez frustrante dans l'absolu surtout quand on ne sait pas quel pilote choisir sur le site du constructeur car souvent... plusieurs sont proposés !

Comme par exemple pour le Dell PowerEdge 860 :

image

J'ai donc décidé de trouver un moyen simple, efficace et rapide (enfin autant que possible...) de trouver le pilote adéquat pour la carte réseau de la machine de démonstration qui est utilisée lors de mes interventions.

Et voici donc décrit mon raisonnement et les étapes que je mets en oeuvre pour trouver le pilote de la carte réseau d'une machine (en l'occurence toujours le Dell PowerEdge 860) qui ne dispose pas d'un système d'exploitation installé.

Identification de la carte réseau

L'idée tout d'abord est d'identifier le périphérique en lui-même. Ce qui peut être effectué en trouvant son modèle exact ou son device ID.

Pour identifier le device ID a coup sûr, il est possible d'exploiter WMI via la classe Win32_PnPEntity.

Voici donc un script VBS qui peut être exécuté sur la machine cible (toujours sans système d'exploitation installé) depuis une image WinPE générique (qui peut être générée depuis le Deployment Workbench) et qui va lister tous les périphériques présents :

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity",,48)
For Each objItem in colItems
    Wscript.Echo objItem.Manufacturer & _
    " <> " & objItem.Description & _
    " <> " & objItem.DeviceID
Next

Ce qui nous donne un output de ce type (sur le Dell PowerEdge 860) :

image

Où la carte réseau est :

Broadcom NetXtreme Gigabit Ethernet

et le device ID :

PCI\VEN_14E4&DEV_1659&SUBSYS_01E61028&REV_11\4&A082FAC&0&00E4

Bon, c'est bien mais où cela nous mène-t'il ? Les constructeurs ne proposent pas le téléchargement des drivers en les décrivant par le device ID...

Note : l'ID du fabricant est celui qui suit VEN_ (pour Broadcom : 14E4) et l'ID du périphérique est celui qui suit DEV_ (pour la carte réseau qui fait le sujet de ce post : 1659).

Là où il est question d'avoir de la jugeotte

Et c'est à ce moment que ma méthode devient empirique...

Je sais que ma carte réseau est une Broadcom... donc je vais me focaliser sur ce fabricant en éliminant ainsi les pilotes Intel, ce qui me laisse 3 choix parmi ceux de la capture présentée plus haut (l'intérêt de télécharger le HTML ou l'utilitaire ne me semble pas bien judicieux).

Parmi ces trois choix, le mieux serait peut être de prendre la dernière version, ce qui me permet d'identifier le driver Broadcom pour la famille de carte NetXtreme datant du 6 Mai 2008 :

image

Ce que je m'empresse de faire.

L'étape de vérification

Une fois le package téléchargé, je l'extrait dans un dossier temporaire afin de voir un peu ce qu'il me réserve et surtout si ma logique en a pris un coup ou non.

Ce qui me donne cette arborescence dans mon dossier temporaire :

image

Pas de trace de fichiers permettant d'installer mon pilote... Bon... Il faut savoir que Broadcom fourni un package d'installation (setup.exe) dans le dossier Driver_Management_Apps_Installer que l'on peut lui aussi extraire (en exécutant setup.exe /a) pour en découvrir le contenu (dans mon exemple, dans C:\Bcom_LAN_11.0_4.1_W2K864_A02\Drv).

Après quelques recherches, un dossier nouvellement extrait me parait contenir les fichiers nécessaires à l'installation de mon pilote : C:\Bcom_LAN_11.0_4.1_W2K864_A02\Drv\Program Files 64\Broadcom\BDRVINST.

Pourquoi ? parcequ'il contient un fichier .INF, un .CAT et un .SYS. Fichiers requis pour une installation de pilotes...

image

L'idée maintenant est d'éditer les fichiers .INF pour vérifier que le device ID que j'ai identifié plus haut fait bien parti de la liste des périphériques supportés par ce pilote :

Je vois tout d'abord que le système d'exploitation supporté est bien celui que je cible :

image

Et qu'ensuite le device ID de la carte identifiée est bien présent :

image

Bon, le device ID est partiellement présent... ce qui à priori n'est pas rédibitoire et devrait me laisser serein quand à la validité du pilote.

Une seconde vérification peut être effectuée en cherchant dans ce même fichier .INF la description associée à ce device ID afin de vérifier que cette description correspond à ce que mon script VBS à identifié.

Pour ce faire, je recherche la valeur BCM5750A1 depuis la fin du fichier et je trouve :

image

Ce qui correspond à ce que mon script a identifié.

Ultime vérification

Lorsque j'ai démarré ma machine sous WinPE, je dois avoir ce résultat lorsque j'exécute ipconfig :

image

L'idée maintenant est d'installer à chaud le driver que j'ai identifié dans mon instance WinPE pour vérifier que toute ma démarche est correcte.

Je copie donc le répertoire contenant les fichiers d'installation du pilote sur une clé USB que j'introduis dans ma machine (WinPE supportant le Plug and Play, ma clé sera automatiquement reconnue et accessible).

J'exécute alors la commande drvload.exe F:\b57nd60a.inf pour installer le driver dans mon instance WinPE :

image

Et exécute à nouveau la commande ipconfig.

Si cette fois je vois une connexion avec une adresse IP alors  le driver que j'ai identifié est donc le bon !

Je peux donc injecter ce driver dans le Deployment Workbench et faire en sorte qu'il soit intégré à l'image WinPE Lite Touch que je générerait à travers l'update du point de déploiement.

Note : dans le cas où vous ne disposez que du device ID pour identifier un périphérique, le site www.pcidatabase.com peut éventuellement (en fonction de la bonne volonté des personnes qui maintiennent ce site) vous donner quelques indications en ce qui concerne le périphérique lui-même ou son fabricant :

image

~ Guillaume

Veuillez noter que cette procédure est proposée "telle quelle" sans aucune garantie ni engagement de support. Elle n'engage Microsoft en aucun cas.
Si, cependant, vous considérez ce post flou, incomplet ou inadequat, n'hésitez pas à me le faire savoir !