スキップしてメイン コンテンツへ

 none
Windows 10 バージョン 1809 で ANSI 版の IMM32 関数を使用すると、期待する文字列が取得できない RRS feed

  • 全般的な情報交換

  • こんにちは、Platform SDK (Windows SDK) サポートチームです。

    今回は、IMM32関数を使用してフォント名などの文字列を取得した場合に、期待する文字列が正しく取得されない現象をご案内します。

    現象

    以下の IMM32 関数を用いて IME の情報を取得した場合に、結果として期待する文字列が正しく取得されない現象が発生します。

      ImmGetDescriptionA

      ImmGetIMEFileNameA

      ImmGetCompositionFontA

    例として、ImmGetCompositionFontA 関数を用いてフォントの情報を取得すると、LOGFONT.lfFaceName "MS ゴシ・” が返されます。

    このため、ImmGetCompositionFontA 関数の結果を基に、文字列の描画を行うようなアプリケーションにおいては、誤動作を引き起こす可能性があります。

    発生条件

    IMM32 関数には ANSI 版と UNICODE 版、2つの関数が用意されていますが、本現象は、ANSI版を利用した場合のみに発生します。

    また、Windows 10 バージョン 1809 以降ならびに Windows Server 2019 Windows 10 2019 LTSC でも発生します。

    発生原因

    本現象は、Windows 10 バージョン 1809 IMM32 関数の不具合が原因で発生しています。

    Windows 10 バージョン 1809 では、IMM32 関数の内部実装が変更されました。

    ところがこの変更において、文字列の文字数を計算するロジックに不具合があったため、誤った位置に終端の NULL 文字列が追加されるようになった結果、期待する文字列が正しく取得されない現象が発生していました。

    状況

    マイクロソフトではこの現象について調査中です。

    2019年7月25日 6:28
    所有者