しらいとブログ

ネットで検索してもなかなか出てこないIT情報を独自にまとめています

Windows 10 Fall Creators Update (非公式)バグ修正パッチ

新しいバージョンが出ました。Fall Creators Update (1709, RS3)でも使えます。
Windows 10 April 2018 Update (非公式)バグ修正パッチ

2018/02/26追記
このパッチを適用すると、Microsoft Excelで全角入力時に「å」が追加される不具合があることがわかりました。
別の方が作られたバグ対策ソフトではそういった不具合が発生しないようなので、そちらをオススメします。
Tablacus Windows 10 Fall Creators Update(RS3) のバグ対策

2017/12/18追記
セキュアブートが有効だとパッチが効かないことが分かりました。
セキュアブートを無効にするかMicrosoftの修正を待ってください。

Windows 10の大型アップデートであるFall Creators Updateが2017年10月17日に配信され、既に多数の不具合が見つかり、ある程度は修正されていますが、まだまだ不具合が残っているようです。

そんな中で私が見つけた不具合について自分で解析してみたところ、原因と解決方法が分かったので自力で修正パッチを作ってみました。

一言で説明するとスクロールバーが表示されたリスト内でマウスをドラッグするとマウスカーソルが画面端に飛んでいく不具合が修正されます。

不具合の再現方法

この不具合はSysListView32というタイプのリストで発生します。
レジストリエディターの右側のリストがSysListView32だったのでこれを使います。

  1. "ファイル名を指定して実行"から"regedit"と入力しレジストリエディターを開く
  2. アドレスバーに"コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"と入力する(右側のリストにスクロールバーが表示されればどこでもいい)
  3. 右側のリストにスクロールバーが表示されていなければウィンドウを小さくしてスクロールバーを表示させる
  4. 右側のリストを真ん中までスクロールする
  5. マウスで選択できない部分(名前以外の部分)をマウスでドラッグするとマウスカーソルが画面端に飛ぶ

ドラッグ中のスクリーンショット

不具合の原因は未初期化の変数を参照するバグ

この不具合を自分で解析してみたところ、SysListView32の処理を行うcomctl32.dllに未初期化の変数を参照するバグがあることが分かりました。
具体的にはドラッグ中にウィンドウメッセージが空だと、ウィンドウメッセージを書き込む変数が初期化されないまま使われます。
この初期化されていない変数からマウスカーソルの座標を取得しているので、不正な値を取得してしまい、その不正な値を使ってマウスカーソルの座標が更新されます。

バグ自体は昔からあった

comctl32.dllにバグがあることがわかったので、古いWindowsのDLLと置き換えてみたところ、同じ不具合が発生することがわかりました。
逆にRS3(Fall Creators Update)のDLLを古いWindowsに持って行っても今回の不具合は発生しませんでした。
おそらく、未初期化の変数を参照するバグ自体は昔からあったもので、今までは未初期化の部分に前のデータが残っていたため不具合は発生しなかったが、Fall Creators Updateの仕様変更で前のデータが別のデータで上書きされるようになり、不具合が発生するようになったのでしょう。

このバグが修正されない理由

今回の不具合はFall Creators Updateで発生するようになりましたが、バグ自体は昔からあったものです。
そのため、Fall Creators Updateで変更した部分を調査してもバグは見つかりません。
ユーザーが「Fall Creators Updateでマウスカーソルが画面端に飛ぶようになった。Fall Creators Updateにバグがあるに違いない。」と主張すればするほどバグ発見から遠のくことになります。

パッチがやっていること

前のデータをコピーしておき、未初期化の変数に書き込んでいます。
これで今までの仕様を再現できているはずです。
ちなみに、試しに前のデータではなく、最新のマウス座標を書き込んだところ、挙動が今までとは変わりました。
リスト内でマウスのドラッグを開始し、そのままリスト外までドラッグしようとすると、リスト外にはみ出ないようにカーソルが戻されます。
たぶんこっちの仕様の方がMicrosoftが本来やりたかった仕様のような気がします。
ただ、こっちの仕様も完璧ではなく、少しずつリスト外にマウスカーソルがはみ出します。

既知の問題

このパッチはオンラインゲームのチート検知ツールに引っかかる可能性があります。
少なくともXIGNCODEには引っかかります。
バグのある場所がマウス処理などで使われるため、そこを修正するとチート扱いになるようです。
この問題を回避するにはゲームを起動する前にパッチを無効化してください。PCの再起動は不要です。

2018/02/26追記
このパッチを適用すると、Microsoft Excelで全角入力時に「å」が追加される不具合があることがわかりました。

2017/12/18追記
セキュアブートが有効だとパッチが効かないことが分かりました。
セキュアブートを無効にするかMicrosoftの修正を待ってください。

ダウンロード

2017/12/17 win10fixPatch_1.00.zip

上記パッチは不具合があるため別の方が作られた下記のバグ対策ソフトの方を作者はオススメします。

Tablacus Windows 10 Fall Creators Update(RS3) のバグ対策

使い方

win10fixPatch.exeを実行してパッチをインストールしてください。
PCを再起動しなくてもパッチ適用後に起動したソフトにはパッチが適用されます。
既に起動中のソフトにパッチを適用したい場合は、そのソフトを再起動するかPCを再起動してください。
インストール後にもう一度win10fixPatch.exeを起動するとパッチの無効化やアンインストールができます。
パッチの無効化やアンインストールをしても、既に起動中のソフトはパッチが適用されたままになります。

強制アンインストール

何らかのトラブルでwin10fixPatch.exeからアンインストールできないときは、
C:\Windows\System32に入っているwin10fix.dllを削除してください。
(64bit版ではC:\Windows\SysWOW64にも入っているのでそちらも削除してください。)

免責

このパッチはMicrosoftとは無関係の個人が作成した非公式のものです。
いかなる問題が発生したとしても作者は責任を負いません。
心配な人はMicrosoftのバグ修正を待ってください。

使用ライブラリ

このパッチにはMITライセンスのEasyHookが使われています。