When Explorer copies files around, it doesn’t really know what the maximum file size supported by any file system happens to be. (That information is not reported by
GetVolumeInformation.) So it guesses.
If the file system name is
"FAT32", then Explorer assumes that the maximum file size is 4GB − 1.
Also, if a file operation fails with the error
ERROR_, and Explorer can’t figure out why the parameter is invalid, it assumes that the reason is that the file has exceeded the maximum allowed file size.
Why does Explorer map “invalid parameter” to “file size too large”? Because some file systems use
ERROR_ to report that a file is too large instead of the somewhat more obvious
Therefore, if you’re implementing a file system, and you’re getting these spurious “File too large” errors, one thing to check is whether you are reporting “invalid parameter” for a case where all the parameters are actually valid, but something else prevents you from doing what you want. (Maybe “access denied” would be a better error code.)