Windows Vista shipped with around 6000 fixes for applications, ranging from "this is a game, add it to the Games Explorer", over "report the Windows version as XP because they broke their checks" to "let HeapAlloc allocate a few more bytes each time because they overrun a buffer at some point". The nice thing about those shims is that you don't have to sully your API design with individual hacks and fixes for dozens, hundreds or thousands of applications. You just enable certain behaviour externally which then replaces the API function by a wrapper (or another function entirely) for that process.
This list usually only grows longer (and includes older versions of MS' own software too). There's also plenty of software where the vendor isn't around anymore which is still widely used. You can't just tell them to fix their code because they don't exist anymore. Raymond Chen oftentimes has to argue that part and given that he worked on application compatibility on Windows for quite some time I'm inclined to believe him.
This list usually only grows longer (and includes older versions of MS' own software too). There's also plenty of software where the vendor isn't around anymore which is still widely used. You can't just tell them to fix their code because they don't exist anymore. Raymond Chen oftentimes has to argue that part and given that he worked on application compatibility on Windows for quite some time I'm inclined to believe him.