Video Screencast Help

How to Package a Signed Device Driver using Wise Package Studio

Created: 01 Feb 2007 • Updated: 09 May 2007 | 9 comments
Language Translations
Screenbert's picture
+6 6 Votes
Login to vote

Have you ever needed to deploy a device driver to your environment, but when you downloaded the driver package it was full of fluff that you didn't want installed? Then this is the article for you. We will go through a real-life example of downloading and repackaging a signed driver.

- Download the Driver
- Extract what you really need
- Create a new package
- Add a Driver Feature to your package
- Adding the DIFxApp merge module to your package
- Adding and the driver to the package and setting it to install
- Deploying your package

Download the Driver

We'll start by opening our Web browser to Dell's Web site and choosing "Support and Help" - > "Drivers and Downloads". For the computer model, we will choose OptiPlex GX260 and Windows XP.

For this demo we'll use the Network driver called "3Com 3C905C-TXM Ethernet Adaptor" as an example. We will use this one because network drivers tend to be good culprits for extra fluff during their installations. Who cares if we have Intel's gadget for allowing us display statistics or other information about the network card? We just want the NIC to do its job right? The file name we download is R49958.EXE.

Extract what you really need

Next we will execute the downloaded file and it will extract to the folder C:\Dell\Drivers\R49958. Then it automaticaly launches the setup. Instead of running the setup, we want to click cancel at this screen.

Next we want to explore the folder it created. Inside of the R49958 folder we see a version.txt file and a folder called Windows. Open the Windows folder. We are looking for the INF files for the driver. For this particular driver we find them in the C:\dell\drivers\R49958\Windows\Update\Source folder.

When looking at the .inf files that are located in that folder we see several. If you open the W9X90XBC.INF file and look all the way to the bottom of the file you'll see that it says it is the "Installation file for 90x - v5.4.67". This inf file also has sections for Win9x, Windows 2000, and all other Operating systems. This should work for us. Also, at the top we want to note that the catlog file is w9x90xbc.cat. In the inf file it lists el90xBC3.sys, el90xBC5.sys and netdi90x.dll under [SourceDisksFiles]. Using this information we can determine that we need the following files:

W9X90XBC.INF
w9x90xbc.cat
el90xBC3.sy_
el90xBC5.sy_
netdi90x.dl_

Let's copy them to a separate location. Then use the expand command to decompress el90xBC3.sy_ to el90xBC3.sys. Also, use the expand command to decompress netdi90x.dl_ to netdi90x.dll. Do the same for el90xBC5.sy_. You can now delete the files that end with the underscore. Now we have 480kb of files instead of 5MB+.

Create a new package

Next we want to create a project where we will house our driver installation. We will rely on some information already gathered to complete these steps. Refer to the version.txt file listed earlier to complete the version info below. Follow these steps to create your project.

  1. Open Wise Package Studio
  2. On the Menu bar Click File -> New project
  3. Project Name: Intel 3C905C-TXM Driver 4.31
    Product Vendor: Intel
    Application Name: Intel 3C905C-TXM Driver
    Package Name: Intel 3C905C-TXM Driver 4.31
    Process: Repackage for Windows Installer (or your preferred package)
  4. Click Close
  5. Click Yes for the warning about a blank Vendor Package.

Normally at this point you would capture your package and Edit the package. However, since we are not actually capturing the installation, we have to create our own wsi. In step 1 we do not have a wsi already created with the name of our package, so it will open the last wsi file we used. Follow these steps to create your own WSI file:

  1. Click on the tools tab and double click "Windows Installer Editor".
  2. On the Menu bar Click File -> New
  3. Under predefined templates choose "Device Driver"
  4. Make sure the "Create .WSI or .WSM project file that can be compiled into an .MSI or.MSM" radiobox is selected.
  5. Click OK.
  6. On the Menu bar Click File -> Save As
  7. Ensure that you are in the driver project folder and then name the WSI the same as your project name. In this case it is "Intel 3C905C-TXM Driver 4.31.wsi"

From now on when you "Edit package" from the Wise Wtudio project tab it should open directly into this WSI. If it doesn't then you probably didn't name your wsi the same as your package name. We now have our package ready to put our driver into.

Add a Driver Feature to your package

We've created a standard .wsi file that basically has nothing in it. So we need to create a feature that can be installed. If we wanted to get fancy, we could have all of our drivers in their own feature and the user could select which one to install. We're going to stick with a simple package that just installs the driver we downloaded from Dell's website.

  1. Choose the "Installation Expert" tab at the bottom of the Windows Installer Editor.
  2. Under the "Project Definition" Page View Choose "Features".
  3. Click The Complete Feature on the right.
  4. Click Add Fill in the feature details as follows:
    Name: Driver (This could be more descriptive if you were going include multiple drivers)
    Title: Driver
    Check the "Disable advertising if not supported by OS" checkbox.
  5. Click OK

You now have a feature called driver. However we will also need to add a condition to this feature that will only allow us to install a driver for Windows 2000 and above. Follow these steps to add a condition.

  1. Click on the driver feature that you just created.
  2. Click the "Add Condition" button.
  3. In the feature condition box enter "VersionNT >= 500" without the quotes.

Adding this condition will require Windows 2000 or newer to install this feature. We'll see the benefit of this in the next section.

Adding the DIFxApp merge module to your package

Microsoft has released a Driver Installation Framework that allows you to install signed drivers on Windows 2000 and newer operating systems. It is called DIFxApp. This Framework is available as a merge module from Wise. When we create our package we chose the "Device Driver" template so it should have loaded the DIFxApp merge module, but currently Wise forgot to do this for the "Device Driver" Template. It's easy enough to add it ourselves.

  1. Choose the "Installation Expert" tab at the bottom of the Windows Installer Editor.
  2. Under the "Feature Details" Page View Choose "Merge Modules".
  3. Change your "Current feature" to "Driver"
  4. Click Add
    If you see the DIFxApp module in the list skip to step 10 other wise continue to steps 5-9
  5. Click Download
  6. Choose WISE Web site and Click Next
  7. Find the DIFxApp and click the checkbox next to it.
  8. Click next to accept the default target location.
  9. Click Finish
  10. Check the DIFxApp checkbox and click next
  11. Click Next and then Click Finish.

We now have the merge module loaded. This will give us a new details tab called Driver when we add the files in our next section. If we did not have the merge module loaded we would not have this tab.

Adding and the driver to the package and setting it to install

Now we need to add the driver files that we saved earlier. The order of adding these files is very important. The .inf file should always be added first and by itself. After we add the .inf file we can add the rest of the files as a group.

First we need to add the location we want to install the driver files to and then add the driver files.

  1. Choose the "Installation Expert" tab at the bottom of the Windows Installer Editor.
  2. Under the "Feature Details" page view, choose "Files".
  3. Change your "Current Feature" to VersioNT >= 500
  4. Click "Program Files" in the bottom left windows
  5. Click New and enter Driver for the folder name. It will automatically become your installation directory.
  6. Find the folder your copied the driver files to in the top left window and click on it.
  7. On the right side, click the W9X90XBC.INF file and then click "Add File"
  8. Add the remaining files.

We now have the files in our package, however we need to set the driver to install using the DIFxApp merge module we downloaded earlier

.

  1. Right click on the W9X90XBC.INF file in the bottom right window and choose details.
  2. Click the driver tab. If it is missing you probably didn't load the merge module correctly.
  3. Click the "Use DIFxApp to install this driver file" checkbox.
  4. If you do not want your package to prompt if the hardware is not there, uncheck the "Prompt for missing device" checkbox.
  5. Click OK.

All we have left to do is compile our our wsi file and proceed with any other packaging procedures that you would normally follow.

Deploying your package

Next you can run your package manually and click through each screen. If you had multiple drivers that you want to select you could create custom dialogs. If you want to deploy this package silently you could do that by using the /qn switch when you execute the msi.

As long as the driver program is installed, you will have a folder called Driver in your Program Files directory that includes the files from the package. You may or may not want to clean them up. More than likely you would want to point the installation to the Windows\system32\drivers\mydrivers folder instead so that you will always keep them on your PC.

It is also interesting to note that in the add/remove programs you will actually see 2 new items. You will see a program called Driver, and you will also see a program called "Windows Driver Package" that has the details on the driver you installed. Removing the driver program will remove both.

Hopefully most drivers you want to install will be signed drivers. If not, look for a future article on Repackaging an Unsigned Driver using Devcon utility.

Microsoft DIFx information:
msdn2.microsoft.com/en-us/library/ms790264.aspx

Comments 9 CommentsJump to latest comment

jjesse's picture

to see articles like this in its own section that I have missed.

Great article.

Did you write a follow-up article about Repackaging an Unsigned Driver that I haven't found yet?

Great job.....

Jonathan

Jonathan Jesse Practice Principal ITS Partners

0
Login to vote
AngelD's picture

Hi Jonathan,

In the bellow AppDeploy thread you can find the whole driver packaging process and how to sign an unsigned driver.

Hope it helps in any way.
www.appdeploy.com/messageboards/tm.asp?m=20873

0
Login to vote
piyushnasa's picture

 Thanks AngelD, this is really helpful and handy. Many times we face this situation of unsigned drivers and then we have to sign them so that we can install them through our MSI. 

Piyush Nasa Altiris Certified Professional (ACP)

http://msiworld.blogspot.com/

+1
Login to vote
trb48's picture

You can actually disable the driver sign check in Windows XP. That way you don't have to worry about the package installing, it always will!

We did that on our computers without any problems. If you don't have Wise Package Studio, or you are creating a new image, I suggest that you just disable that feature. It will reduce your workload and your headaches.

-trb48

0
Login to vote
AngelD's picture

I might be out on a limb here but I presume your users are local admins?

If I recall correct drivers added by the DIFxApp merge module to the "%WINDIR%\system32\DRVSTORE" folder must be signed for the Hardware Wizard to install from the above location for regular users not having local administrative privileges.

0
Login to vote
philbenson's picture

you are quite right, even though "forcing" the driver to be installed to the driver store (assuming PnP) if a non admin plugs in the hardware, the driver will not be loaded due to insufficient permissions. Also setting the Flag column to "31" you can also force the installtion of non signed drivers using the DifX merge module, but will recive an ICE error in doing so.

Cheers
Phil

+1
Login to vote
CableGuy41's picture

very good article

Thanks,

CableGuy
Do not forget to mark a SOLUTION

0
Login to vote
piyushnasa's picture

It is very simple and easy to do this in Installshield Admin Studio. Since the product will eventually go to Flexera, you can have a look at here on doing this with Admin Studio Installshield.

http://msiworld.blogspot.com.au/2012/07/creating-device-driver-based-package-in.html

 

Cheers,

Piyush

Piyush Nasa Altiris Certified Professional (ACP)

http://msiworld.blogspot.com/

+1
Login to vote