Microsoft Layer for Unicode
Windows APIでは、普通A (ANSI: ANSIコードページに基づくマルチバイト文字)版とW (ワイド文字)版の2つの関数が用意されている。Windows 9x系では、A版のみが実装され、W版を呼び出そうとすると、極一部を除いて実装されていない旨のエラーになる。一方Windows NT系では、A版とW版の両方が実装されている(ただし内部で直接実装されているのはW版であり、A版はW版の呼び出しへ変換するサンクとなっている)。
リンクの際、KERNEL32.LIBやADVAPI32.LIBなどWindows APIのライブラリよりも先にUNICOWS.LIBを指定すると、リンカはUNICOWS.LIBからシンボルを解決するようになる。
そして実行時、最初にワイド文字版の関数が呼ばれたとき、UNICOWS.LIB内へ実行が移る。このとき9x系のWindowsで実行していれば、UNICOWS.DLLを読み込みDLL内のサンクスタブへ実行を移す。このサンクスタブはワイド文字引数をANSI文字列へ変換してネイティブなA版APIを呼び出す役割を果たす。逆にW版APIを持つNT系のWindows上で実行していた場合、メモリ上に存在するインポートテーブルを書き換え、以後余分な負荷をかけずにW版の関数を呼び出せるようにする。
このようにするわけは、MSLUをリンクしたアプリケーションソフトウェアが、9x系のWindowsで実行したときのみUNICOWS.DLLを必要となるようにするためである。また、NT系で実行したときに、余分な手間がかかる機会を最初の1回の関数呼出のときだけに留める効果もある。