Diagnosing network card issue leads to VirtualPC

Some may have read Mark Russinovich's blog before.  If  you have not, he likes to post about ways to use tools, esp. SysInternals, to diagnose strange problems in Windows.  This inspired me to try my hand at diagnosing a weird issue with my home computer.  A few months before my motherboard died and since it was under warranty and they no longer made that model, Asus sent me a slightly different but better replacement.  One major change from the board was that the original had two NICs and the new one had one.  That didn't matter to me as I was on a home network anyway but it did cause me some problems.

I tried to avoid restarting this machine because sometimes the network card would decide not to connect to my network.  The device manager shows the network card as working properly, but it just doesn't see my home network.  A few restarts later and it will magically start working again.  At first I thought it was just an old driver.  But when I install a new driver, the network card refuses to work and I end up having to rollback.

One of the things I've tried in the past was to disable and re-enable the network card in device manager. But something weird happens when I do this. When I disable it, the CPU usage goes up to about 50% (it's a dual core, so one proc is loaded) and after a few minutes the computer will just completely hang. The mouse cursor doesn’t move and I don’t even get the courtesy of a blue screen.

After reading Mark Russinovich's blog and attending a few of his talks, I decided to give the SysInternals diagnostic tools a try. I restarted my PC one day and the network card wouldn't connect. So I went into device manager and disabled the network card. Sure enough, the processor usage went up and the device manager application hung. So I pulled up the task manager to see which process was using the CPU:

Weirdly enough, it was the System task. I started Process Monitor to see what it was doing taking up all this CPU. Since this is the system task, I had to enable advanced output. From a quick glance, it looked like a lot of reads were going to a particular registry key. So I did a count on the path to see if that was really the case. It turned out to be true:

I opened regedit and went to the registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VPCNetS2\Parameters\Adapters\{7AB7D079-AA34-45DF-AB39-C1ED1DE74C84}

This has a value named UpperBindings set to: \Device\{F134ED2C-D7B7-4562-890A-D5746C8C058B}

It's not a whole lot of information to work with. But I thought maybe if I track down the GUID in the registry, I can find more. So I searched in HKLM\SYSTEM and found a registry key at:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0011

This looks like a driver to me because it has a value named DriverDesc set to: Virtual Machine Network Services Driver

After some digging on the internet, I found that the Virtual Machine Network Services Driver belongs to VirtualPC 2007, which is a product I use heavily. I then stumbled upon Virtual PC Guy's WebLog. He has a link to a hotfix for VPC 2007. I figured I'd give it a try but found out that this patch does not apply to my version. I always thought I had the latest version of VirtualPC 2007, but it appears I didn't. So I downloaded SP1 from here.

Installing SP1 did the trick! My network card stopped giving me problems from then on.