Do they not realise that I might just want to write the information to a logfile, without actually directly acting on it in my program???
This was/is my main concern and question. The documentation implies that they assume people only use these functions for compatibility reasons as far as I read, and not at all for purely informational purposes.
Windows 10 can be detected as long as we can GUARANTEE to know what the major and minor versions are. You can use the VerSetConditionMask, and VerifyVersionInfo functions. The problem is that it's not as easy to guess anything else other than the major and minor version to test what OS the user is running, and there are other parts to a build number/string other than just the major and minor versions. That's where I haven't quite figured out how to get such information reliably.
The kernel32.dll method as I've proved myself is ONLY accurate for getting the major and minor version numbers too, so even though I've found a 'hack', I still can't get the last of the build information for the OS because the rest of the numbers are specific to the file.