
Why are all Windows drivers dated June 21, 2006? - ikeboy
https://blogs.msdn.microsoft.com/oldnewthing/20170208-00/?p=95395
======
dkonofalski
This also causes the most infuriating issue I've ever had with a controller
and Windows 10. The "official" driver from the manufacturer hasn't been
updated since a final revision in like Windows 7. Windows 10 offers a basic
driver, but it's totally broken and the Windows driver constantly updates and
overrides the old one. Anytime I want to play a game with this controller, I
have to uninstall from device manager and install the old driver but ignore
the restart. It works, for some reason, but as soon as the machine gets
restarted, the driver is replaced and I get the yellow exclamation point in
Device Manager again. Not a great workaround, but I'm glad it works for most
things.

~~~
justin66
> This also causes the most infuriating issue I've ever had with a controller
> and Windows 10.

According to the text, it's designed to prevent the problem you describe:

 _When the system looks for a driver to use for a particular piece of
hardware, it ranks them according to various criteria. If a driver provides a
perfect match to the hardware ID, then it becomes a top candidate. And if more
than one driver provides a perfect match, then the one with the most recent
timestamp is chosen. If there is still a tie, then the one with the highest
file version number is chosen._

I don't know where this is going wrong for you but both the file version and
the timestamp are things you can manipulate on that driver file. Might help,
although you're in trouble if the manufacturer's driver isn't a perfect match
to the hardware ID.

~~~
dkonofalski
It does, but I have to assume that the Windows version _also_ is a perfect
match for the hardware ID. Since the older driver from the manufacturer
supports all the features, but the date is before June 21, 2006, the MS driver
is used instead which is, essentially, neutered for some functions.

The text shows that the driver is working as intended. The newer driver is
being chosen automatically. The problem is that the newer driver is the
Microsoft one. The sad thing is that I don't even know the Manufacturer of the
driver anymore. It was painted on the controller and has since rubbed off and
the driver file itself just shows up as "Generic Joystick Driver" or something
like that. At one point, it got identified as an XBOX 360 controller. :(

~~~
syntheticnature
That driver must predate Windows 7, then, which was released in 2009. I've
found drivers from Vista or before don't want to work with Windows 10 in some
fashion anyhow (perhaps the 32-bit to 64-bit transition?).

~~~
dkonofalski
Possibly. I've had the thing for close to 20 years, I think. It came with a
bundle that had a sound card and a DVD (or maybe even CD) drive. It's USB,
though, so it can't be that old!

~~~
QSIITurbo
Just out of curiosity: Have you ever considered just buying a new controller?
Spending your time on troubleshooting drivers doesn't seem like a sensible
decision from the time=money point of view.

~~~
dkonofalski
Of course! I do own other controllers! There are just some games that don't
seem to recognize newer controllers the same way (the original Mortal Kombat
being one of them). I'm not saying that my issue is common and I realize that
I'm putting this issue on myself, I just mentioned it because it's a situation
that highlights why their "solution" to the problem they have is more of a
workaround rather than an actual fix. As others have pointed out, the correct
"solution" is to de-prioritize their own drivers. It's their driver and their
OS. They could even have a flag that's set in the driver for OS that also
affects priority.

~~~
richardboegli
To find the manufacturer:

1) Have you tried Googling the hardware ID

2) Take a photo and do a Google reverse image search

~~~
Flammy
> 2) Take a photo and do a Google reverse image search

Does this really work most of the time? I'm typically only doing this to find
the source(or more information) about an image I've found online.

------
RickHull
Using the date is obviously a kludge and does not match the semantics of the
desired mechanism (3rd party specific drivers overriding baseline system
drivers).

Nothing profound about this kludge IMHO.

~~~
ysavir
But there is something profound here: That MicroSoft is willing to take a
static informational figure (such as a date) and use it for other purposes
while doing a poor job of documenting it and handling edge cases. That
MicroSoft has let this system sit for 10 years is _incredibly_ profound, in my
opinion.

Just not in a positive way.

~~~
royjacobs
So how would you fix this, keeping in mind you are not allowed to touch the
vendor driver's binaries in any way?

~~~
RickHull
Drivers have a priority field 0-255. Vendor drivers can only use 128-255.
System drivers start at 255 baseline. Highest priority (0 is highest) always
wins, and ties are broken with version or date comparison or what-have-you.

 _Disclaimer: near zero forethought_

~~~
monochromatic
> keeping in mind you are not allowed to touch the vendor driver's binaries in
> any way

~~~
DashRattlesnake
Default to 192 if an explicit priority is not set.

~~~
krapp
What's certain to happen is all vendors setting all of their drivers to the
highest priority possible, all the time.

~~~
jessaustin
If a vendor were sure that _this_ version of a driver will be the last they
ever issue, they could do that. That seems a fairly rare circumstance.

------
BigChiefSmokem
"...if more than one driver provides a perfect match, then the one with the
most recent timestamp is chosen. If there is still a tie, then the one with
the highest file version number is chosen."

So check the manufacturer of the driver, and if it's Microsoft then assign the
lowest priority.

Am I missing something here?

~~~
fpgaminer
Microsoft, as a company, has issues with inter-team communication. So I'm
guessing the bug of Windows drivers taking priority was discovered by the
build team, and rather than talk to the relevant team about the problem, they
decided to just fix it themselves with this hack.

The adage "If it's stupid but it works, it isn't stupid" may apply here... or
this may be the perfect counterexample.

EDIT: It's also possible that this is the "simpler" solution. The behavior of
the driver selector probably went through a litany of testing before this
problem was discovered. Changing the driver ranking algorithm is a major
modification that would warrant another litany of testing. Given budgets and
deadlines, I can see someone implementing this hack as a clever way to avoid
re-testing a major component.

Technical debt is common for the same reasons monetary debt is common.

~~~
jaclaz
>Technical debt is common for the same reasons monetary debt is common.

Basically people lacking the knowledge or proper capabilities in managing the
_whatever_ they are supposed to manage? ;)

~~~
concerned_user
Simply put technical debt is a measure of how much it will cost you to modify
your software while maintaining acceptable level of quality. Since with every
change codebase gets bigger your debt increases. You can't just "manage" it
away.

------
oblio
To all you nay-sayers, this is Raymon Chen's blog. He has nothing to do with
Microsoft's marketing machine and is probably a better engineer than most of
us.

He's not promoting anything, he's just writing about a tidbit people would be
interested in.

If you don't believe me, go through his blog archives. You'll most likely
learn a thing or a dozen.

~~~
andreareina
I love this blog. Anytime I see a submission on HN that points to
microsoft.com I check to see if it's oldnewthing and if so click through, it's
always been an interesting and rewarding read.

------
spencerhakim
But why June 21, 2006, _specifically_? According to Wikipedia, there was a
circulated Pre-RC1 Vista build (but only the first of 3) that was built on
June 20th, and June 21st was the first day of summer that year, but neither of
those seem like good reasons to pick this date in particular.

~~~
mnarayan01
Vista represented a big (for Microsoft anyway) hit to the backward
compatibility of drivers (for DRM-CreateProcess related reasons IIRC).

~~~
Sanddancer
Much more than that. For example, both audio and video drivers had massive
rewrites and rebuilds. Video drivers received a lot of tweaks for DirectX 10.
More importantly, MS pushed the entire audio stack to use the User-Mode Driver
Framework [1], which resulted in a lot of changes in how audio drivers access
the underlying hardware.

[1] [https://en.wikipedia.org/wiki/User-
Mode_Driver_Framework](https://en.wikipedia.org/wiki/User-
Mode_Driver_Framework)

------
40acres
My first thought was 'how ridiculous', but then I started to think of all the
times I've utilized 'hacks' like these to get projects working and it's
humbling to see that even at the highest level sometimes we are in 'just make
it work' mode.

~~~
thehardsphere
Even at the highest level, they put their pants on one leg at a time.

~~~
jessaustin
...and sometimes backwards.

------
mattnewton
Wow, this is a quick hack around not giving space to metadata about the driver
preference and trying to communicate it out of band, and they are passing it
off as something to be emulated.

------
mrweasel
>And if more than one driver provides a perfect match, then the one with the
most recent timestamp is chosen. If there is still a tie, then the one with
the highest file version number is chosen.

I sort of get WHY they don't priorities highest file version above timestamp,
but it also seems to indicate that they have an issue with managing drivers.
I'm sure it's more complicated than I imaging, but shouldn't there by a way to
tell Windows that you installed a driver and you want to use that one and not
the bundled/updated driver from Microsoft... Well I suppose there is, give it
a newer timestamp.

~~~
hashhar
But then any Windows Update would wipe out that driver.

------
virtualized
A typical Microsoft / cowboy programmer "solution". Ever wonder why Microsoft
products are so buggy and unrealiable in every possible way? That's because
they are built from hacks upon hacks just like this one with no regard for the
user experience.

~~~
vortico
In the Linux world, instead of a proud "excuse" on a blog, a problem like this
would kindle a discussion for a few days on the newslists, and a solution
would be proposed and implemented in the following two months, to be accepted
in the mainline a week afterwards. In macOS, this problem might stick around
for a while, but Apple is forward-thinking enough to find better solutions
eventually for problems that aren't necessarily vital but still should be
corrected. For Windows, I doubt this will ever be fixed unless they do away
with drivers as we know them entirely.

~~~
nxc18
That's true, but then of course you would end up breaking compatibility with
lots of things.

Linux has their drivers in the kernel tree for the most part, with no promise
of backwards compatibility whatsoever. macOS is fine overall, but I've never
had a major update _not_ trash major parts of the OS, whether that's the build
environment, some subset of GUI apps, or general hardware support.

Windows has a driver model. While not a promise, third parties can typically
expect drivers to keep on working. I've never experienced an OS other than
Windows with such broad hardware compatibility and such broad binary
compatibility. Except in rare instances, just about every piece of non-driver
software from the Windows 95 era works unmodified on modern 64-bit Windows.
AMD64 did not exist when Windows 95 was released. Drivers also typically work
unmodified, the major exception being a pretty significant change around the
time of Windows Vista.

~~~
ThisIs_MyName
>just about every piece of non-driver software from the Windows 95 era works
unmodified on modern 64-bit Windows

Yep, see Linus Torvalds's rant about this:
[https://www.youtube.com/watch?v=1Mg5_gxNXTo&t=6m37s](https://www.youtube.com/watch?v=1Mg5_gxNXTo&t=6m37s)
(skip to 6:37 and keep watching).

------
jmiserez
This reads like they are actually proud of this...!

~~~
astrodust
See also: "Why does Windows have so many different system directories?" and
"Why are companies still shipping 32-bit-only software?"

------
cyberferret
Ah, brings me back to decades ago when we sold and supported custom DOS apps -
we would force the installers to change the time of the .EXE file to match the
installed version number, e.g. 01:00 am for version 1.0, 01:13am for version
1.13 etc.

That way we thought we could tell which version the user was using over the
phone by asking them to do a DIR (useful if they couldn't start the
application to see the version number in there).

Of course, this system rapidly broke down because users would copy the files
across to different floppies or hard drives, causing the file dates to be
reset to whatever it was at the time!

------
cprecioso
Wouldn't it be better if the system knew to assign less priority to Microsoft-
signed drivers?

~~~
Someone
No. I need some cases, the MS provided driver must take precedence over the
vendor one. As a comment to this article says:

 _" I have a USB 3.0 controller in my system where Microsoft took over control
of the driver, probably due to the hardware manufacturer going under. Anyway,
the driver Microsoft provide is signed by the same certificate as they use to
sign other drivers for Windows. But in this case, you would want the Microsoft
provided driver to win out over any manufacturer provided driver because they
are all broken in some way."_

Of course they could have separate signing certificates for 'overriding'
drivers, but that would be just as much a hack as using the time stamp.

~~~
Alupis
Maybe I'm missing something, but wouldn't you just choose not to install the
vendor driver in this case?

It's your system, and if you chose to install the vendor driver (even if it's
broken/old), it should use it... no?

~~~
bitJericho
There's very few drivers that need to be manually installed anymore. Even
fewer that require the absolute deletion of the previous version by the user.
It's all automated now.

~~~
thehardsphere
"Very few" can still be hundreds of devices that people still have to use.

~~~
bitJericho
Even those few almost always use an installer. Nobody's manually installing
drivers except the hardcore enthusiast, whom this hardly affects.

~~~
thehardsphere
Tell that to my Fortune 500 client who has to support hardware devices that
were discontinued 11 years ago For regulatory compliance reasons.

------
russellbeattie
Every Windows box is different from every other one. Some Windows drivers are
way more stable, less-bloated or functional than the OEM's drivers (personal
example: Realtek audio) on certain hardware, other times (as seen in this
thread) it's the exact opposite. Managing and selecting which driver works
well on your particular combo of hardware, and preventing auto-updates from
overriding your choices should be a top priority for Microsoft. They
desperately want Windows to be as user-friendly as macOS in this area, but the
reality is that Windows runs on heterogeneous hardware and in practical terms,
it just doesn't work. Right now forcing one particular driver over another is
an exercise in pain and uncertainty. You never know if tomorrow you'll wake up
to your microphone not working (again) because of an overnight update. It's
silly. Just give end users a friendly interface and stop the nightmares.

------
diogenescynic
Issues like these are why I hate dealing with Windows anymore. OSX has its
flaws too, but I never have to wrry about drivers at least.

------
discreditable
Sometimes the Windows driver is actually better than the vendor driver. I've
seen several chipset/SATA drivers (such as Marvell, and AMD) that break TRIM
support on SSDs. To get TRIM working I had to revert to the regular Windows
driver.

------
cadecairos
Something about this must be broken on my Windows 10 partition, because it
keeps trying to overwrite my updated Intel Graphics card driver via Windows
Update. I ended up having to blacklist the update to stop it from bugging me.

------
wyqydsyq
> Zac told me, "It's an awesome example of something that seems stupid and
> insignificant turning out to have a profound purpose."

So according to MSoft developers, a property being unused and redundant = a
profound purpose?

Why not just remove the date criteria completely if you want to ignore it
rather than trying to work around it by mutating the data?

~~~
hoppa_liza
Removing the date criteria is significant change to the codebase and will
eventually require more testing. This might not work well with budget and
deadlines.

------
huangc10
What is the significance of June 21, 2006? Why was this date chosen
specifically?

------
clhodapp
The worst thing to me is that they seem to think it's OK to do something like
this and then not do something in the UI to make the blessedness of the
specific date they choose clear.

------
roesel
Considering how this is a workaround not properly implementing the needed
functionality, I think it's not safe to ask questions like

> Are you just a bunch of slackers?

since the first answer that comes to mind is "Yes, it would seem so".

