Wednesday, 25 November 2009

HP printers, XP, a laptop, and 100% CPU!

Let's talk about the symptoms first. You're using your PC (in my case, always a laptop), running Windows XP, and the CPU fan speeds up...and up...and up...and stays like that, screaming at top speed.

Usually, you expect that the fan will run down again when the processor's finished an unusually tough job, like some poxy website's unnecessary Flash animation. But no. Not this time.

When you come to hit CTRL-ALT-DEL to run the Task Mangler, sorry--Manager, you find that SVCHOST.EXE is maxing out one CPU.

Sound familiar?

I'm betting you're set up to use an HP printer, and that printer has a network port (whether or not you use it). Right? Thought so. Read on.

The cause is actually HP's network printer drivers, in particular a service called "HP Network Device Support".

If you want to know the in-depth technical reasons for the problem, "zairon", in an excellent blog post drills down to the individual lines of assembler code containing the bug. It's a salutory lesson in how to look foolish in front of your customers.

The solution is delightfully simple.

First, hold down the Windows key on your keyboard, using it like a SHIFT key, and press the R key, then let go of both. You should get a "Run" dialog popping up. (If you don't have a Windows key, click on Start, then the "Run..." entry at the bottom-right of the pop-up.)

Type "services.msc" into the box, and hit ENTER. You should now get the Services application popping up.

Now scroll down the list until you find an entry named "HP Network Devices Support". Double-click on the name, and it should bring up a dialog describing that service.

Before you do anything else, hit the Stop button in that dialog. Aaaaand...relax.

Now find the "Startup type" drop-down list.

What you do now depends on how you connect to the printer. Either way, hit the "Stop" button now

If you only use it through USB, or if the printer uses a static (unchanging) IP address, rather than being given one dynamically using DHCP, you can select "Disabled". Then hit the "Stop" button in the dialog, and listen to the fan spin down.

If the printer uses a dynamic IP address (DCHP), select "Manual" instead. Then hit the "Stop" button. If the printer changes its IP address, you may have to start the service briefly, so that it can be rediscovered. Or beat up your sysadmin until s/he gives the printer the static IP address it's always longed for and deserved.

I find it astonishing and (vicariously) embarrassing that HP can leave this bug festering in its drivers for several years, despite many, many users reporting it. I know they have--enough of them have blogged enough about it, and their problems getting HP to understand it, that HP has no excuse!

Anyway, if this helps to add a little more momentum behind the movement to get HP to fix the bloody drivers, or saves one other person the same troubles, so much the better.

No comments:

Post a Comment