I don't work with the Windows API much, but I've seen it used there as well as occasionally in a codebase here at work.
It's a naming convention that simply indicates the function is an extended version of an original.
It's usually done as a way of changing the parameters to a function in an API without breaking existing client code. Old code can continue to use the previous version, while new code can take advantage of the new features offered by the Ex version.
Yup, they wanted to improve (Extend) the API and keep a similar name so it was likely that the programmer would move to the new version.
Notable is GetVersionEx() to get the Windows version, pretty painful for a while with a nasty chicken-and-egg problem.
The record keeper is the National Language Support team who have several ExEx versions, like EnumCalendarInfoExEx. Unsurprising, culture moves even faster than software. No ExExEx as of yet.