Automation tails from the fox hole

With the release of Server 2012 R2, I decided to rebuild my test lab on the newest of the new. The ‘newy-new’ as we call it in the field.

The install of Server 2012 R2 was relatively uneventful. However, my Ethernet adapter was not detected. Thinking myself a wise man, I went to the Asus website to find the Ethernet software, however the installation failed with ‘OS version not supported’. Such is the life on the bleeding edge.

I then went to the Intel site to download the NIC directly, but this install failed with ‘Cannot Install Drivers. No Intel Adapters are present in this computer’. Huh? Well, being resourceful, I began Googling furiously. I found a number of threads of chatter around related issues for other components (all cited below), and after some experimentation, I got it all working.

This message was not enough to stop me. I know there is an Intel NIC inside!

The thing to note here is that the problem is cause when Intel’s software attempts to automate the device install, rather than letting Windows handle the installation. They go so far as to exclude certain device types from automated installation, as you’ll see under the [ControlFlags] section. Who knows why this was done, as there seems to be no ill effects from installing this on a Server 2012 R2 system. It is likely a troubleshooting minimization measure, to keep people from installing drivers for devices that won’t work on a particular setup.

We will not be so easily swayed. : ). Here is how to alter the .inf files for a device and then put Windows into a test mode which will allow us to force this modified driver into being installed. You will need:

The device drivers for your particular device.

Willingness to tamper with and seek a deeper understanding of your computer system.

To take ownership of the fact that things could go wrong in an unexpected manner, and it is not my fault or duty to help you fix it.

First, enable test mode and disable driver signing in order to install these hacked drivers. We’ll need to do this because Windows requires signed drivers and will note that our changes to the driver files that we are about to make.

From an Administrative Command prompt:

bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS

bcdedit -set TESTSIGNING ON

Now, restart the system. As you see, we are now ‘Flying Dirty’

This is Microsoft’s way of reminding you that you’re doing something that you shouldn’t be doing.

Open your driver download and extract it somewhere (in my case for an Asus p8z77-v with an Intel 82579V Gigabit NIC). I’ve placed my files at C:\temp\Intel_LAN_V17.1.50.0_Win8_Beta\PRO1000\Winx64\NDIS63. You’ll want to open the various .inf files until you find the one that contains your Hardware IDs.

If you’d like to automate tracking down the desired driver(wouldn’t you!), open up device manager and select the malfunctioning device. Go to the Details Pane and Select Hardware IDs.

Please ignore the fact that the name is detected successfully, I forgot to take a screen shot before I fixed the issue. If you’re reading this, your screen will generally look much more jacked up, with frowning device faces everywhere.

We’ll use ‘VEN_8086&DEV_1503’. This may likely be different on your system. Armed with our Vendor and device identifier, we will now browse to the directory in PowerShell where we placed the unzipped install files earlier. Use the following command.

So nicely sorted. Imagine if we didn’t know Powershell and had to manually do all of this *shudder*

This is giving us an output of every .inf file which mentions our device ID by name. This is very powerful and is saving us a ton of time finding the right file for our situation. The next few bits just depend on us knowing a thing or two about the system we’re using and a bit about Driver Specification history (everyone’s favorite topic!)

We’re using a 64-bit system, so lets narrow things down to the files made for our architecture, as seen in the third from the left column below.

Then the Network Driver Interface Specification (NDIS) that matches our OS, for reference:

Version

Desktop OS

Server OS

NDIS 6.0

Vista

*

NDIS 6.1

Vista SP 1

Server 2008

NDIS 6.2

Windows 7

Server 2008 R2

NDIS 6.3

Windows 8

Server 2012

NDIS 6.4

Windows 8.1

Server 2012 R2

Updated on 10/09/2015

This means we will use the NDIS63 version.

This has narrowed it down to only one file, the e1c63x64.inf file. If you’re a do-it-yourselfer, you can just paste my entry below, taking care to match the section heading. if you want to know more, check the links below for more detail as to why this works. The mile-high view is that we’re removing the exclusions for our device from Windows Auto Detection, and then copying some bits around. Or something like that. Seriously check the links if you have a burning curiosity.

Now, go back to device manager, select the errant device and Update Driver, pointing it to the directory that contains our modified driver. If all went well, you should see the device begin to install automatically!

Yay, Happy Device Manager. ‘Whats up with that missing ‘e-home transceiver?’ Um…this is more of a do as I say, not as I do situation.

Don’t forget to disable test mode when you’re finished, with this command.

Like this:

Related

91 thoughts on “Hacking an Intel network card to work on Server 2012 R2”

KiranMay 24, 2017 / 11:16 am

I just wanted to thank you for this info. Trying to run Windows Server 2012 or 2016 on an AsRock Z270M Pro4 motherboard with the I219-V and no driver would install. Followed your instructions and it worked perfectly!

Absolutely, when you add new drivers, Windows scans through the inf files to see if the driver says it supports that OS version. Normally, there is little distinction between a desktop or a server OS so our steps here assume it will work, and we simply add a new entry for our OS. There is no reason it would not work for you

I’ve been so frustrated unable to see the “Cannot install..” error while installing Intel I219-V onto a Prime H270M-Plus motherboard running Windows Server 2016 Standard in Core mode. Just read your article and hopefully will be able to “hack” it to work. Will keep you posted, many thanks.