We'll.... I found out how MultiByteToWideChar (MBTWC) is implemented, and
looks OK.
But then, there are following issues:
1 some functions (DefWindowProcA) call MBTWC, but with CP_ACP and HeapAlloc
ALWAYS (IMHO should be: CP_THREAD_ACP, use some local cache if the 8-bit
string is short enough, for performance)
2 some functions (GetMonitorInfoA) call MBTWC using CP_THREAD_ACP
3 yet other functions (RegisterClassExA) call
RtlCreateUnicodeStringFromAsciiz and and RtlFreeUnicodeString later (no TEB
cache, allocation ALWAYS)
4 and some other functions (CreateEventExA) call
RtlAnsiStringToUnicodeString and use cache from TEB
5 other functions use RtlAnsiStringToUnicodeString with allocation, and
RtlFreeUnicodeString later.
6 and some other functions (SetWindowTextA) call
RtlAnsiStringToUnicodeString and RtlFreeUnicodeString (allocation ALWAYS)
Is this inconsistent or what?!
Best regards
Daniel