News: 1758101412

  ARM Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life (Terry Pratchett, Jingo)

Why Microsoft has the name of an old mouse hidden in its Bluetooth drivers

(2025/09/17)


Lurking within the Windows Bluetooth stack is a hardcoded reference to the Microsoft Wireless Notebook Presenter Mouse 8000. Is this nostalgic favoritism from Microsoft? Or is it just somebody, somewhere, making a mistake that an engineer had to work around?

The 12 KB that Windows just can't seem to quit [1]READ MORE

You'll be unsurprised to know that, [2]according to veteran Microsoft engineer Raymond Chen, it's the latter.

"There is a lot of bad hardware out there," writes Chen, "and there are a lot of compatibility hacks to deal with it." There's hardware that spouts nonsense or does things that it says it absolutely won't (Chen cites the [3]example of a USB device that drew more power than it promised it would.) Still, the vast majority can be dealt with behind the scenes with code that can repair or ignore corrupted values.

However, sometimes something gets screwed up so badly while appearing deceptively innocuous that extreme measures are needed.

Enter 2006's [4]Microsoft Wireless Notebook Presenter Mouse 8000 . Released during the heyday of Windows XP, the Bluetooth device could function as a slide presenter, a laser pointer, and a media controller, as well as serving as a notebook mouse.

[5]

It even shipped with a carrying case.

[6]

[7]

However, it was also given a name that caused Windows to choke when trying to parse the text. The device local string is specified to be encoded in UTF-8. However, Chen explains, "the Microsoft Wireless Notebook Presenter Mouse 8000 reports its name as Microsoft⟪AE⟫ Wireless Notebook Presenter Mouse 8000, encoding the registered trademark symbol ® not as UTF-8 as required by the specification but in code page 1252.

"What's even worse is that a bare ⟪AE⟫ is not a legal UTF-8 sequence, so the string wouldn't even show up as corrupted; it would get rejected as invalid."

[8]

AE gives the location of the ® symbol in the legacy Windows 1252 code page, but UTF-8 is a rather different beast.

"Thanks, Legal Department, for sticking [an] ® in the descriptor and messing up the whole thing."

[9]Microsoft veteran's worst Windows bug was Pinball running at 5,000 FPS

[10]Microsoft eventually realized the world isn't just the Northern Hemisphere

[11]Windows reports two CPU speeds because one would be too simple

[12]The passive aggression of connecting USB to PS/2

But how could such a thing happen? Chen speculates, "Maybe Windows version N does not validate the string. Device ships with invalid string. Device works on Windows version N because there is no enforcement. Windows version N+1 adds string validation, say, to deal with a security issue. Now device is broken."

He adds: "Windows version N+1 needs to add compatibility workaround so that device continues to work on version N+1."

And this is why there is a table lurking within the Bluetooth drivers containing a list of devices that report their names wrong and the correct name to use. Connect a device from the list, and the correct name is used.

[13]

"That table," concludes Chen, "currently has only one entry." ®

Get our [14]Tech Resources



[1] https://www.theregister.com/2025/05/08/moricons_dll_raymond_chen/

[2] https://devblogs.microsoft.com/oldnewthing/20250915-00/?p=111599

[3] https://devblogs.microsoft.com/oldnewthing/20240521-00/?p=109786

[4] https://news.microsoft.com/source/2006/09/13/go-go-gadget-mouse-microsoft-unveils-innovative-four-in-one-device/

[5] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_software/oses&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=2&c=2aMqGt2SC8nNS-zrbv-YuwAAAAcE&t=ct%3Dns%26unitnum%3D2%26raptor%3Dcondor%26pos%3Dtop%26test%3D0

[6] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_software/oses&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=4&c=44aMqGt2SC8nNS-zrbv-YuwAAAAcE&t=ct%3Dns%26unitnum%3D4%26raptor%3Dfalcon%26pos%3Dmid%26test%3D0

[7] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_software/oses&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=3&c=33aMqGt2SC8nNS-zrbv-YuwAAAAcE&t=ct%3Dns%26unitnum%3D3%26raptor%3Deagle%26pos%3Dmid%26test%3D0

[8] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_software/oses&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=4&c=44aMqGt2SC8nNS-zrbv-YuwAAAAcE&t=ct%3Dns%26unitnum%3D4%26raptor%3Dfalcon%26pos%3Dmid%26test%3D0

[9] https://www.theregister.com/2025/09/09/dave_plummers_worst_windows_bug/

[10] https://www.theregister.com/2025/08/07/windows_naming_conventions/

[11] https://www.theregister.com/2025/05/21/chen_windows_cpu_speed/

[12] https://www.theregister.com/2025/03/27/raymond_chen_usb/

[13] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_software/oses&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=3&c=33aMqGt2SC8nNS-zrbv-YuwAAAAcE&t=ct%3Dns%26unitnum%3D3%26raptor%3Deagle%26pos%3Dmid%26test%3D0

[14] https://whitepapers.theregister.com/



Paul Herber

Of all the outfits in all the world why is it only Microsoft who are unable to read and follow specifications created by Microsoft?

Crud begets Crud

b0llchit

The first crud is not doing correct utf-8 validation. The second crud is to work around the first crud. Multiply this by and you get the current state (of much software).

This reminds of the mistake in "send conservatively, accept graciously" . If all send conservatively, then you don't need to be gracious in accepting stuff.

Anonymous Coward

Junior: I'm trying to fix a problem with the Bluetooth driver.

Senior: Ah yes, I had that problem back in the day, let me find the function that fixed it. You see the problem was...

Junior: Cool, cool...can you send me the function?

Senior: Here it is.

Junior: Sweet. I'll try it out. *ChatGPT can you make this function work with my code? && copy/paste && git add . && git commit -m "added function to fix ticket #2943234"*

I prefer rogues to imbeciles because they sometimes take a rest.
-- Alexandre Dumas, fils