Wrong. Windows uses UTF-16. It used to use UCS-2 a long time ago.
Doing a string validation check in every single API call would waste cycles for no good reason.
Interpreting a string as encoding text in particular character set is, as far as the kernel is concerned, a problem for userspace.
Windows does make claims of "supporting" UTF-16.
Windows supports UTF-16, it doesn't guarantee UTF-16 correctness. The native methods annotated with the W suffix all take UTF-16, so unless you want to render your own fonts, you're going to need to provide it with either that or ASCII.