Even when you look at syscalls themselves there is difference: Linux kernel deals with mostly opague strings of bytes (that are today by user-space side convention mostly utf-8) while NT kernel deals mostly with UCS-2 unicode codepoint strings (that are sometimes UTF-16 and this way madness ensues).
Again, you are confused with user mode API (Win32/64) and kernel mode service API. Windows does have kernel mode service API. Just it's not well known since most people don't need to deal with them.