Windows 10で32ビットアプリがクラッシュするCreateWindowEx関数の問題とその対処法
Windows 10を新しいバージョンにアップグレードした後、一部の32ビットアプリケーションでウィンドウを作成する際に、msctf.dllから呼び出されるCreateWindowEx関数が原因でクラッシュやその他の問題が発生するケースがあります。この記事では、CreateWindowEx関数とは何かを解説し、この関数エラーの考えられる原因を探った上で、問題を軽減するための推奨ソリューションをご紹介します。
CreateWindowEx関数の仕組みを理解する

Windows FormsやWindows Presentation Foundation(WPF)を使用する.NETアプリケーションを含むWindowsアプリケーションは、CreateWindowExAまたはCreateWindowExW関数を呼び出すことでウィンドウを作成します。
どちらの関数も内部的には共通のUSER32関数を呼び出します。このUSER32側の処理では、呼び出し時に指定されたウィンドウスタイルやハンドルなどのパラメータ検証が行われ、WS_EX_MDICHILD拡張ウィンドウスタイルが指定されている場合はMDI子ウィンドウの作成が処理され、さらに呼び出しスレッドの現在のアクティベーションコンテキストが処理されます。CreateWindowEx呼び出しのUSER32側で問題がなければ、続いてカーネルモード(WIN32K)のCreateWindowEx実装が呼び出されます。
CreateWindowExは、新しいウィンドウオブジェクトを作成しようとする際に、以下のタスクを実行します。
- 新しいウィンドウオブジェクトのハンドル作成が、呼び出し元プロセスのユーザーハンドルクォータ制限を超えないかどうかを確認する
- デスクトップのヒープから、新しいウィンドウオブジェクト用のメモリを割り当てる
- 新しいウィンドウオブジェクト用のメモリを初期化する
- ユーザーハンドルテーブルに、新しいウィンドウオブジェクトのハンドルを作成する
CreateWindowExが失敗する主な原因
CreateWindowEx関数の問題を引き起こしうる条件としては、以下のようなものが挙げられます。
- 指定されたウィンドウクラスが存在しない
- 無効なウィンドウスタイルまたは拡張ウィンドウスタイルを使用している
- ウィンドウハンドルやメニューハンドルなど、無効なユーザーハンドルを使用している
- 親ウィンドウを指定せずに子ウィンドウを作成しようとしている
- 子ウィンドウまたは所有ウィンドウを作成しようとした際、指定された親/オーナーウィンドウが、呼び出しスレッドとは異なるデスクトップに属している
- 子ウィンドウや所有ウィンドウの作成により、ネストされたウィンドウの制限を超えている
- 新しいウィンドウオブジェクトの作成により、呼び出し元プロセスのハンドルクォータを超えている
- デスクトップのヒープに、新しいウィンドウオブジェクト用のメモリを割り当てるだけの十分な空きがない
- ユーザーハンドルテーブルに利用可能なエントリがない
Windows 10で32ビットアプリのCreateWindowEx関数の問題を修正する方法
Microsoftは、このCreateWindowEx関数の問題に対する回避策を提供しています。
この問題を回避するには、Windows 10のインストールを以前のバージョンへロールバックする必要があります。
Windows 10のロールバックオプションは、アップグレード後10日間(ほとんどの場合)利用可能です。
この操作では個人ファイルは保持されますが、アップグレード後にインストールしたアプリケーションやドライバーは削除され、設定に加えた変更も元に戻される点に注意してください。
ロールバックオプションが利用できない場合は、まず個人ファイルをバックアップした上で、ITサポート部門やヘルプデスク、あるいはMicrosoftサポートに連絡し、デバイスを以前のWindows 10バージョンに復元してもらいましょう。
以上で作業完了です!
補足:Microsoftは現在この問題の恒久的な解決策に取り組んでおり、Windows 10の今後のリリースで更新プログラムが提供される予定です。

-
Windows 10の「Webサイト用アプリ」とは?仕組みと使い方を徹底解説
最近Windows 10の設定アプリをじっくり眺めたことがある方なら、「Webサイト用アプリ(Apps for websites)」というカテゴリーに気づいたかもしれません。しかし、そこにはほとんど、あるいはまったくアプリが表示されておらず、この機能が実際に動作する場面を見たことがないという人も多いでしょう。実は「Webサイト用アプリ」は、Anniversary Update(周年アップデート)で導入された、便利でありながらあまり知られていないWindows 10の隠れた機能なのです。「Webサイト用アプリ」の基本的な仕組み設定ページでは、この機能について「一部のWebサイトはアプリまたはブラ
-
Windows 10のスナップ機能でアプリを画面に並べる方法|2分割・4分割レイアウトの使い方
Windowsの「スナップ(Snap)」機能を使えば、アプリのウィンドウを画面の端にドラッグするだけで、左右に並べて配置できます。2つのアプリを同時に使いたいとき、クリックとドラッグの操作だけで2分割レイアウトが完成するため、ウィンドウサイズを手作業で微調整する煩わしさから解放されます。 Windows 7から続く人気のウィンドウ管理機能 スナップはWindows 7で初めて搭載された機能です。それ以来、PCでのマルチタスクを快適にするウィンドウ管理機能として高い人気を誇ってきました。Windows 10ではスナップがさらに拡張され、複数の新オプションが追加されています。これにより、複数アプ