By default, any network device driver on Windows installs with Auto-negotiation settings. The traditional approach to change the network speed setting is to have a checklist and use driver’s advanced feature tab to set the network speed and duplex setting to 100 Mbit/s Full-Duplex, for example. This article discuss how the settings can be done through a complete re-installation of the device driver, using a customized .inf file. The approach is particular interesting for automated installation methods, such as IBM Tivoli Provisioning Manager for OS Deployment (TPMfOSd).
Go to the manufacturer’s site and obtain the latest network device driver for the model you are working with. Unwind the installation directory, but do not attempt to actually install the device driver yet. In our case, the device driver files were installed on
C:\dell\drivers\R161008\Win2K_XP
You should be able to spot the driver installation’s configuration file with its *.inf extension. In our case the file was
C:\dell\drivers\R161008\Win2K_XP\b57win32.inf
Open the file and start looking for a section that talks about the network speed settings. In our case it is simple, here’s the original section:
[ParamsC] HKR, Ndi\Params\RequestedMediaType, ParamDesc, , %Speed_Duplex% HKR, Ndi\Params\RequestedMediaType, default, , "0" HKR, Ndi\Params\RequestedMediaType, type, , "enum" HKR, Ndi\Params\RequestedMediaType\enum, 0, , %Speed_Duplex_Auto% HKR, Ndi\Params\RequestedMediaType\enum, 3, , %Speed_Duplex_10Mb_Hd% HKR, Ndi\Params\RequestedMediaType\enum, 4, , %Speed_Duplex_10Mb_Fd% HKR, Ndi\Params\RequestedMediaType\enum, 5, , %Speed_Duplex_100Mb_Hd% HKR, Ndi\Params\RequestedMediaType\enum, 6, , %Speed_Duplex_100Mb_Fd%
It is obviously enough to change the default Speed_Duplex_Auto (0) setting to Speed_Duplex_100Mb_Fd (6). I spotted an other identical section in the configuration file so I changed that as well, to be on the safe side. If you now try to install the device driver, your modification will not be taken into account, of course. You have to completely (and that is completely) remove the original device driver before you can replace the it with your own device driver which has the same version number.
Right click on My computer icon, select Manage, on the window that opens, click on Device Manager.
Click on the plus sign next to the Network Adapters, (in our case) we see Broadcom NetXtreme 57xx Gigabit Controller.
Right click on the network adapter, select Properties. Cllick on Driver Details. You will see at least one file that we need to kill, the actual device driver (but that is not enough, you have been warned). In our case, the list of Driver files contains but a single file:
C:\WINDOWS\System32\DRIVERS\b57xp32.sys
Back to Driver Properties dialog, click on Uninstall. Yes, you are sure that you want to remove it. But the driver is not gone completely. You can test this easily: back to the Computer Management window, on Device Manager, right click on the uppermost line of the device list (usually states the computer name) and select Scan for hardware changes. In a normal system, the missing PnP network device is not only detected but also its device driver gets reinstalled automagically. This is not what we want. We want to be asked questions.
Now, let’s use Start -> Search -> For files and folders (with the stupid puppy, you remember?). Select “…search for?” All files and folders. Search for device driver *.sys file(s), in our example b57win32.sys. Look in: Local Hard Drives (C:). Click on More advanced options. Select Search system folders and Search hidden files and folders.
You will get a quite a few locations for device drivers, some of them in driver.cab files. Remember that our objective is to make Windows ask us questions where to find the device driver upon the re-installation, not to remove every single copy of the original device driver file. In fact, we just want to inject our own *.inf file into the installation process. This is how to reach that goal.
On the Search Result window, select the following files (in our example) and delete them.
C:\WINDOWS\System32\DRIVERS\b57xp32.sys
Hardly surprising, we saw that file already in the Device Manager, right? But that is not enough, we need to get our own *.inf file taken into account. Ask the puppy in the Search Results window to some more work for you. Select Start a new search. Part of the file name: *.inf, a word or phrase in the file: b57xp32. In our example, there are three obvious canditates for deletetion:
C:\WINDOWS\inf\oem1.inf C:\WINDOWS\inf\oem11.inf C:\WINDOWS\inf\b57win32.inf
Before deleteing the above files directly from the Search Results window you may want to double click on them to make sure that they are, in fact exactly the same files that we have edited above. Go ahead, kill’em!
You should remove also the following directory (see David Remy’s blog post about this)
C:\WINDOWS\system32\ReinstallBackups
Back to Device Manager, right click on the uppermost line of the device list (usually states the computer name) and select Scan for hardware changes. The PnP network card is well detected and the installation of the device driver starts. But the automagical installation fails this time.
You would call this a problem but I would call it as success!
The main point is that you will be given an opportunity to give your own driver directory for the installation, with modified *.inf file. And this way we got that 100 Mbit/s Full-Duplex setting right from the beginning of the device driver installation.
Now when you have the network back up again, you can remake the device driver packaging for your OS deployment system. Read the corresponding documentation. In our case, http://www.ibm.com/redbooks Deployment Guide Series: Tivoli Provisioning Manager for OS Deployment V5.1, chapter 7 Common deployment features, section 7.4 Device driver injection.
Once you are done with the device driver packaging, remove the device driver again, following the entire procedure again, make sure that the device driver does not install automatically after a PnP scan. Remove the device.
Seal the system with command
sysprep -quiet -mini -forceshutdown -activated -reseal
In your OS deployment scheme, the packaged device driver will be deployed automatically while the OS is installed if you are using IBM TPMfOSd. The deployed host got the package automatically binded within the deployment scheme because of the PCI-bus hardware inventory indicating the compatible network card.
In your OS profile configuration settings you need to set up a customized sysprep.inf file that would force the rescan and installation of all PnP devices. The following example is for a Dell Optiplex 745. You will notice that we ask Sysprep to install device drivers even if they are not signed (no, Dell/Broadcom device driver is not digitally signed for Windows XP).
[Unattended] OemPnPDriversPath="drivers\audio\r132379;drivers\network\R132254; ... " UpdateInstalledDrivers=Yes DriverSigningPolicy=Ignore NonDriverSigningPolicy=Ignore
How to construct the OemPnPDriversPath ? It is best done with the UtilitySpotlight05.exe’s PNPPath.vbs. It can be obtained through Michael Murgolo’s article “Automated Device Driver Integration“, Microsoft TechNet Magazine, May 2006. Although – after seeing the result – it is not too hard to guess what the path is, since it contains all the paths in \Drivers directory.