Adrian, your stat wrapping makes sense to me.
The explination behind this mess is fairly straight forward:
NT doesn't use the standard timezone handling library that everyone knows
and loves in Unix land. See KB article: Q115231 for details on what Win32
actually does.
Which is why FileTimeToLocalTime() can only use the current DST state, and
stat() uses FileTimeToLocalTime() due to various backwards compatibility
reasons. See the MS CRT source for the grungy details.
glibc appears to do the correct thing by searching through the timezone's
transition history and makes the appropriate adjustment. (including leap
seconds)
Bill