I've always thought that in Windows there are only Windows file handles (which are somewhat the counterpart of file descriptors in Linux), and that a FILE wraps a Windows file handle, but now I am reading about what are called CRT file descriptors, and that a FILE actually wraps a CRT file descriptor and in turn a CRT file descriptor maps to a Windows file handle.

There are a whole set of functions that work with CRT file descriptors, such as _open() and _close() (which seems like the POSIX open() and close()!).

To me this seems like a POSIX layer built on top of Win32 handles! Is my understanding on this issue correct? and why is this architecture used, why not just have a FILE wrap a Windows file handle directly?