Just to answer my own question
, the problem lies with the definition of the FILETIME structure. The Win32 structure uses DWORD members, which are UNSIGNED, whereas the .NET Framework type uses SIGNED ints.
See this article for more information
I'm suprised no one has come across this problem before!