Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Windows の互換機能 - 古いプログラムはなぜ動作できるのか

Windows の互換機能 - 古いプログラムはなぜ動作できるのか

「.NETラボ 勉強会 2026年8月」で実施したセッション「Windows の互換機能 - 古いプログラムはなぜ動作できるのか」のスライドです。
Windows ではカーネルの更新やセキュリティ モデルの強化などプログラムの動作に影響を与える変更がたびたび行われています。 またコンピューターのアーキテクチャも Intel 16bitから Intel 32bit、AMD 64bit、さらに ARM アーキテクチャに追加のように大きな変更があります。 それにもかかわらず、過去の Windows を対象として開発されたプログラムも新しい Windows で動作させることが可能な場合が多いのは、Windows の後方互換のためのさまざまな機能が用意されているからです。 このセッションではこうした後方互換機能にどのようなものがあり、どのように機能しているのかを解説しています。

Avatar for Murachi Akira

Murachi Akira PRO

August 22, 2026

More Decks by Murachi Akira

Other Decks in Technology

Transcript

  1. https://www.linkedin.com/in/akiramurachi/ https://www.facebook.com/amurachi/ https://x.com/hebikuzure About me • Murachi Akira aka hebikuzure

    ( 村地 彰 ) • 株式会社エクシードワン 技術フェロー • 株式会社シーピーエス 技術教育スペシャリスト • 専門学校東京テクニカルカレッジ非常勤講師 • Microsoft MVP (Most Valuable Professional) • Since Apr. 2011 ( 16 Years! ) • Award Category: Windows and Devices - Windows Cloud and Datacenter Management – Windows Server • Expertise • Windows client / user management and security • Microsoft 365, Active Directory, Microsoft Endpoint Manager 2026/08/22 Murachi Akira aka Hebikuzure 2
  2. 目次 • アプリケーションの互換性 • Windows の互換機能の種類 • Shim • 互換設定の追加

    • まとめ 注 記載の情報は 2026 年 8 月 22 日現在の公開情報を スライド製作者が確認したものです。 2026/08/22 Murachi Akira aka Hebikuzure 3
  3. 互換性が必要となる理由 • System of Record のアプリケーションは • 品質重視 • 動作の一貫性が必要

    • ダウンタイムが許容されにくい • 結果としてリリース間隔が長くなる 2026/08/22 Murachi Akira aka Hebikuzure 10
  4. 互換性が必要となる理由 • System of Record のアプリケーションは • 品質重視 • 動作の一貫性が必要

    • ダウンタイムが許容されにくい • 結果としてリリース間隔が長くなる • 同じアプリを改修なく長期間利用したい 2026/08/22 Murachi Akira aka Hebikuzure 11
  5. 互換性が重視される理由 • System of Record のアプリケーションは • 品質重視 • 動作の一貫性が必要

    プラットフォームのライフサイクルより • ダウンタイムが許容されにくい アプリケーションのライフサイクルの方が • 結果としてリリース間隔が長くなる 長くなる • 同じアプリを改修なく長期間利用したい 2026/08/22 Murachi Akira aka Hebikuzure 12
  6. なぜ動かなくなるのか • アーキテクチャの違い(x86 ⇒ AMD64、IA ⇒ ARM など) • API(システムコール)の変更

    • セキュリティ要件(UAC、アクセス権の変更など) 2026/08/22 Murachi Akira aka Hebikuzure 13
  7. 互換機能の種類 • エミュレーション レイヤー プログラム改修 • Shim • 仮想化 エミュレーション

    Shim サーバー仮想化 クライアント仮想化 2026/08/22 Murachi Akira aka Hebikuzure 16
  8. Windows on Windows(WOW) • 32 bit Windows で 16 bit

    アプリケーションを実行する WOW32 • 64 bit Windows で 32 bit アプリケーションを実行する WOW64 2026/08/22 Murachi Akira aka Hebikuzure 19
  9. WOW64 • Win32 API を Win64 API に呼び変えるエミュレーション層 • オペレーティングシステム側で必要な

    32 bit バイナリは %systemroot% ¥SysWOW64 に格納 • レジストリ(HKLM¥SOFTWARE ¥ と HKCR ¥)に Wow6432Node を用意 • 32 bit プログラムからのアクセスは SysWOW64 や Wow6432Node にリダイレクト 2026/08/22 Murachi Akira aka Hebikuzure 20
  10. WOW64 の実体 • %systemroot%¥System32 にある DLL 群 wow64.dll wow64Win.dll wow64base.dll

    wow64cpu.dll (x86 programs on x64) * wow64con.dll * ARM64 アーキテクチャの場合は wowarmhw.dll (ARM32 programs on ARM64) xtajit.dll (x86 programs on ARM64) 2026/08/22 Murachi Akira aka Hebikuzure 23
  11. Shim • アプリケーションの API 呼び出しをフックして動作するスタブ • 引数の変更・呼び出しのリダイレクト・操作の実行を行う • アプリケーションが古い API

    呼び出しをしている場合、新しい API 呼び 出しに変換して実行 • Windows の「アプリの互換性」で利用されるテクノロジー 2026/08/22 Murachi Akira aka Hebikuzure 28
  12. Shim の動作例 アプリ実行 Shim 適用 フックする APIの取得 • Windows によるアプリの

    • 起動したアプリに対する • Shim の内容からフックす 起動(ロード) Shim の適用 フックの設置 Shim の実行 • メモリ上にフックを設置 • フックされた API を変換し る API を特定 て実行 2026/08/22 Murachi Akira aka Hebikuzure 32
  13. Shim の例 • Win2k3SP1VersionLie • GetVersion API と GetVersionEx API

    をフックして、Windows 2003 SP1 バージョン情報を返します。 • RunAsAdmin • アプリケーションを、正常な実行のためには管理者権限が必要とマークします。 • EmulateSortingWindows61 • CompareString、LCMapString、FindNLSString、 IsNLSDefinedString、GetNLSVersion の各 API で Windows 7 およ び Server 2008 R2 の並べ替え動作が有効になります。 2026/08/22 Murachi Akira aka Hebikuzure 34
  14. 既知の互換性 • Windows には広範に利用されているアプリケーションに対する互換性 データベースがあらかじめ用意されている • 更新プログラムで互換性情報が追加される場合もある • Windows 7

    および Windows Server 2008 R2 のアプリケーション互換 性に関する更新プログラム - Microsoft サポート • Windows 8.1 および Windows Server 2012 R2 用の互換性に関する 更新プログラム - Microsoft サポート 2026/08/22 Murachi Akira aka Hebikuzure 36
  15. .sdb の更新の例 • Windows 8.1 および Windows Server 2012 R2

    用の互換性 に関する更新プログラム - Microsoft サポート 2026/08/22 Murachi Akira aka Hebikuzure 37
  16. 互換性データベースで提供する機能 • Appfix • Shim により API をフックしてスタブを呼び出す • スタブはアプリに対して古い

    API のように振る舞う • スタブが必要に応じて新しい API を呼び出す 2026/08/22 Murachi Akira aka Hebikuzure 38
  17. 互換性データベースで提供する機能 • Appfix • API をフックしてスタブを呼び出す • スタブはアプリに対して古い API のように振る舞う

    • スタブが必要に応じて新しい API を呼び出す • Apphelp • アプリ起動時に自動的にメッセージを表示 • 適切な起動方法などのガイダンスを提供 • アプリが正常に動作するかは保証しない 2026/08/22 Murachi Akira aka Hebikuzure 39
  18. 互換設定の追加 • Shim(実際に API をフックする仕組みやスタブ)をユーザーが追加す ることはできない • Windows に用意されている Shim

    を組み合わせて、特定のアプリの 互換設定を互換設定データベースに追加することができる 2026/08/22 Murachi Akira aka Hebikuzure 43
  19. Compatibility Administrator • Windows Assessment and Deployment Kit (Windows ADK)

    に含まれるツール • 「Windows ADK をダウンロードしてインストールする | Microsoft Learn」からダウンロードできる https://learn.microsoft.com/ja-jp/windows-hardware/get-started/adk-install • Compatibility Administrator User‘s Guide は「Windows 10」となってるが、Windows 11 もサポートされている 2026/08/22 Murachi Akira aka Hebikuzure 48
  20. 注意点 • Shim ですべてのアプリが完全に動作するとは限らない • Shim は Windows によって提供されているものしか利用できない •

    セキュリティ機能を無効にする Shim もあるので要注意 • ex. DisableWindowsDefender 2026/08/22 Murachi Akira aka Hebikuzure 60
  21. 参考情報 • アプリケーション互換性データベース - Win32 apps | Microsoft Learn •

    Known Compatibility Fixes, Compatibility Modes, and AppHelp Messages | Microsoft Learn • Compatibility Administrator User's Guide (Windows 10) - Windows 10 | Microsoft Learn • SHIM Me What You Got: Manipulating Shim and Office for Code Injection 2026/08/22 Murachi Akira aka Hebikuzure 63