It's actually 16TB (for anyone finding this in future). I just created a 6710886400 that's 6GB file using overlapped I/O - the following snippet shows how to work with the offsets
OVERLAPPED ol;
__int64 fileOffset;
ol.hEvent = CreateEvent(0, TRUE, FALSE, 0);
fileOffset = __int64(TEST_BUFFER_SIZE) * i;
ol.Offset = (DWORD)fileOffset;
ol.OffsetHigh = (DWORD)(fileOffset >> 32);
printf("[%d %I64d] ", i, fileOffset);
result = WriteFile(hFile, buffer, TEST_BUFFER_SIZE, &written, &ol);
to get the size I can perform...
DWORD dwHigh, dwLow =GetFileSize(hFile, &dwHigh);
__int64 FileSizeInBytes = __int64(dwHigh * (MAXDWORD + 1.0L)) + dwLow;
HINT: If you start getting "invalid parameter" return codes/error from an API, you are probably mucking the math and passing in negative offsets.
(some innocent variables and exception handler policing action was removed from this sample to protect basic byte rights)