Canon EOS 500D: Using the wrong driver intentionally

This post was written by eli on July 28, 2009
Posted Under: Microsoft,Software

Foreword

Before I say a word, my children, I have to warn you: What I’m about to teach you here is basically how to mess up your computer. It’s how to make Windows install the wrong driver for a USB device (possibly PCI devices as well). Don’t complain about a headache when you want to switch to the correct driver (or just another one): Once Windows adopts a driver for a device, it develops certain sentiments for it, and will not give it up so easily.

Also, my children, I have to confess that I still use Windows 2000 these days. It’s about time I went on for at least XP, but I have too much installed software to carry with me (none of which will run, I fear, after an upgrade).

Having these issues out of the way, let’s get to business.

My motivation

I bought a brand new Canon EOS 500D, which came with a brand new EOS Digital Solution disk (v20.0, if we’re at it). It’s black, it’s pretty, it autoboots, but it tells me to go &@^%$ myself with my ancient operating system (Windows 2000, as mentioned). Canon’s “support” is more like a black hole, so I’m on my own. All I want is to download the pics to my computer. When I plug the camera in, I get “Found new hardware” but no driver to get it working with.

I was slightly more successful with Linux (Fedora 9, on my laptop). gphoto2 managed to download the images (using command line, which is cool) using PTP (Picture Transfer Protocol) but I want this working on my desktop.

Now here’s the problem in summary: The camera connects to the computer and says: “I was made by Canon (manufacturer number 0409) and I’m a 500D camera (product ID 31CF), and I support the standard interface 6.1.1, which means “Still Imaging”. An XP computer would say “Aha! A camera! Let’s try PTP, even though I’ve never heard about this device!” but a Windows 2000 won’t talk with strangers (if they are cameras, that is).

Drivers for this camera for Windows 2000 are not to be found. I tried to find a generic PTP driver for Windows, but couldn’t find one. There’s a generic interface (WIA), but no generic driver. Then I thought: Since any camera driver would talk PTP with any PTP camera, why not put just any Canon driver to talk with my camera? After all, the driver just transfers files. I hope.

Update (February 5th, 2010): I got the following laconic mail from Canon’s help desk today:

“Dear Customer,

The EOS 500D camera can only be connected to personal computers with either Windows Vista, Windows XP or Mac OS X operating systems. Unfortunately Windows 2000 is not supported”

Wow! That’s a piece of valuable information after having the camera for over six months!

The black magic

It just so happens, that the 400D has a PTP TWAIN driver for Windows 2000 (the installation file is k6906mux.exe). So I downloaded that one, and installed it as is. Which didn’t help much, of course. But it left me the INF file at the destination directory. That allowed me some wicked manipulations.

The trick is to bind the driver’s software to the specific hardware ID. So I opened the INF file, and found the part saying:

[Models]
%DSLRPTP.DeviceDesc%=DSLRPTP.Camera, USB\VID_04A9&PID_3110

That means, “if some device says it was made by 04A9 (Canon) and that its product ID is 3110 (EOS 400D, I suppose)”, use this driver.

Hey, this is an open invitation for intervention! I simply changed it to:

[Models]
%DSLRPTP.DeviceDesc%=DSLRPTP.Camera, USB\VID_04A9&PID_31CF

(actually, I did it on a copy of the file)

And then I went for all these places saying

[DSCamera.Addreg]
HKLM,"%DS_REG%\TWAIN\EOSPTP",DeviceDesc,,"EOS Kiss_X REBEL_XTi 400D"
HKLM,"%DS_REG%\TWAIN\EOSPTP",ModelName,,"EOS Kiss_X REBEL_XTi 400D"

and changed them to something saying it’s a 500D using 400D driver. Just free text so I know what I’m doing.

By the way, you may wonder where I had the 500D’s product ID from. The answer is Linux again. There’s a utility called lsusb, which supplies all that info. You can get it in Windows too, I suppose. I just don’t know how.

Putting it to work

At this point, I plugged in my camera, and powered it on. Windows told me it found new hardware, great, and then asked me to supply a driver (a couple of wizard windows ahead). It actually wants an INF file, so I gave it the one I cooked.

Since the VID/PID in the file match those given by the camera, Windows installed the drivers and associated them with the camera from now on. Mission accomplished.

Did it work?

The truth is that the result isn’t very impressive. Maybe because Canon’s own EOS utility failed to talk with the camera this way, and Picasa’s interface with the TWAIN driver is a bit uncomfortable. But the bottom line is that I can now download the images to my Windows 2000 computer.

On the other hand, maybe it’s this ugly with proper drivers as well. The most important thing is that it works, after all.

Reader Comments

Wow, I’m impressed, your some wizzard! Had the same problem with my 500D, found your comment through Google and can now download my pics to my own computer too!
Greetings from Brazil and thanks a million! Swenne

#1 
Written By Swenne Dragstra on February 15th, 2010 @ 14:59

Great info , thanks a lot.

#2 
Written By Time Articles on March 6th, 2010 @ 23:32

Hello,
The same problem at mine WIN2000. I purchased 500D (in fact – T1i, in US) and can’t make it comunicating with my desktop.
I did all described in the above post. No result.
Additionally, in WINNT\inf directory, I found the second copy of the EOSPTP.inf file.
I modified it also.
Result – negative.
Is it possible, that product ID (31CF) for 500D is different that for T1i?
rgds
Krzysztof

#3 
Written By Krzysztof on March 18th, 2010 @ 10:03

As far as I understand, T1i and 500D are just different names for the same piece of plastic.

I usually acquire the IDs by plugging the devices to a Linux machine and use the lsusb utility. I don’t know a convenient way to do it in Windows. You could download a USB sniffer such as SnoopyPro. It lists the devices on the bus when you press F2. Maybe that could help.

See http://sourceforge.net/projects/usbsnoop/

#4 
Written By eli on March 18th, 2010 @ 11:08

or, the 500D/T1i ID should be given not the HEX: 31CF, but DEC: 12751???? ( I found it somewhere on the net).
K.

#5 
Written By Krzysztof on March 18th, 2010 @ 11:09

Perhaps, the way you suggest will succeed. I’ll check it & try to fight again.
Thanks for advice.
rgds
Krzysztof

#6 
Written By Krzysztof on March 18th, 2010 @ 11:11

Uffffff.
Works!
Neded switching to another USB port.
Thanks a lot.
K.

#7 
Written By Krzysztof on March 19th, 2010 @ 20:52

I understand the logic but don’t have the skills to break into files and rewrite lines of instructions. Can i be cheeky and ask for a tutorial?

If not, wonderful solution and superb information!!!!!

Iain

#8 
Written By iain on January 26th, 2011 @ 23:06

There is nothing to break into here. All you need to do is to edit a text file. Which is, find the relevant file with Explorer, open Notepad, drag the file to Notepad, edit, and then save.

But if things go wrong, well, then things go wrong.

#9 
Written By eli on January 26th, 2011 @ 23:18

Trackbacks

Add a Comment

required, use real name
required, will not be published
optional, your blog address