2014年7月24日木曜日

ネット対戦に特化したネット環境作りとOSチューニング(OSチューニング編)

はじめに

今回はOSチューニングについて寄稿します。
プロバイダの品質が高く、ハードウェアのスペックも高いことが前提です。
最終的な詰めであるので連載の全てを読んだことを前提とします。
レジストリの編集がメインなので意味を深く理解してからチューニングしましょう。

対象とする読者

1.Windows7でとにかく最小遅延を目指す
2.1Gbps以上の回線を契約している
3.ルータやNICも問題がない
4.レジストリの編集に抵抗がなく、万一の際も自分で修復可能

TCP処理先をNICからCPUに変更する

XPまでのOSの場合、TCPに関する処理(例えば、パケットが届いた順番の管理や、正しいデータが届いたかのチェック)を全てCPUで行っていました。
一方、最近のOSとNICの組み合わせではこの処理をNIC側にさせることでCPU負荷を下げています。
しかし、通信量がNICの処理速度を超えるとNICが処理しきれずに遅延やパケットロスをする可能性が出てきます。
これに対処するために、TCP処理のオフロード無効化を施します。

※一部のIPやホスト名は*にマスクしています。
C:\Users\YukiKaki> reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /f /v DisableTaskOffload /t REG_DWORD /d 1

C:\Users\YukiKaki reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    ICSDomain    REG_SZ    mshome.net
    SyncDomainWithMembership    REG_DWORD    0x1
    NV Hostname    REG_SZ  
******** 
    DataBasePath    REG_EXPAND_SZ    %SystemRoot%\System32\drivers\etc
    NameServer    REG_SZ
    ForwardBroadcasts    REG_DWORD    0x0
    IPEnableRouter    REG_DWORD    0x0
    Domain    REG_SZ
    Hostname    REG_SZ    ********
    SearchList    REG_SZ
    UseDomainNameDevolution    REG_DWORD    0x1
    EnableICMPRedirect    REG_DWORD    0x1
    DeadGWDetectDefault    REG_DWORD    0x1
    DontAddDefaultGatewayDefault    REG_DWORD    0x0
    EnableWsd    REG_DWORD    0x1
    QualifyingDestinationThreshold    REG_DWORD    0x3
    MaxUserPort    REG_DWORD    0xfffe
    TcpTimedWaitDelay    REG_DWORD    0x1e
    StrictTimeWaitSeqCheck    REG_DWORD    0x1
    EnableIPAutoConfigurationLimits    REG_DWORD    0x1
    ReservedPorts    REG_MULTI_SZ    1433-1434
    DnsOutstandingQueriesCount    REG_DWORD    0x3e8
    EnableTCPA    REG_DWORD    0x0
    DisableTaskOffload    REG_DWORD    0x1
    Tcp1323Opts    REG_DWORD    0x0
    EnableDca    REG_DWORD    0x0
    DhcpNameServer    REG_SZ    ***.***.
***.***

 C:\Users\YukiKaki

うまくDisableTaskOffloadが追加できていれば、TCP処理のオフロード無効化が出来ています。


TCPパラメータをチューニング(ウインドウサイズの変更と余計な機能の無効化)

ウインドウサイズの変更とは、 一度に送受信するデータのサイズを変更することです。
ここではウインドウサイズを拡大し、その他余計な機能を全て無効にしています。

※一部のIPやホスト名は*にマスクしています。
C:\Users\YukiKaki> netsh interface tcp set global rss=disabled chimney=disabled autotuninglevel=highlyrestricted congestionprovider=none ecncapability=disabled timestamps=disabled netdma=disabled dca=disabled

C:\Users\YukiKaki netsh interface tcp show global
アクティブ状態を照会しています...

TCP グローバル パラメーター
----------------------------------------------
Receive-Side Scaling 状態              : disabled
Chimney オフロード状態                 : disabled
NetDMA 状態                            : disabled
Direct Cache Acess (DCA)               : disabled
受信ウィンドウ自動チューニング レベル  : highlyrestricted
アドオン輻輳制御プロバイダー           : none
ECN 機能                               : disabled
RFC 1323 タイムスタンプ                : disabled
** 上の autotuninglevel 設定は、少なくとも 1 つのプロファイルのローカル/ポリシー構成を
上書きするウィンドウ スケーリング ヒューリスティックの結果です。


 C:\Users\YukiKaki> 

netsh interface tcp show global の結果が同じになっていればうまく反映されています。

ただし、これは一例です。
相手側の環境が最良でない場合はcongestionprovider=ctcpや、timestamps=enabledが好ましい場合もあります。
これらのパラメータを編集する際は マイクロソフトの公式情報 を参照して意味を理解しましょう。


TCPパラメータをチューニング(TcpAckFrequency)

通称TAFの名称で、ネトゲ界隈では有名なチューニングです。

余りに有名なのでゆとり溢れるツール出ていますが、本記事の読者はどこを編集するか知ることが目的の人が多いので、全ての編集はコマンドラインで行います。


①初めに、wmic nic getコマンドでインタフェースGUIDを確認します。(赤字部分)
※一部のIPやホスト名は*にマスクしています。
C:\Users\YukiKaki> wmic nic get  "GUID" , "NetConnectionID"

GUID                                                                        NetConnectionID
{46740908-ABB6-46D1-A48C-AA5A7E72E296}  ローカル エリア接続

{2D320EBC-8F7A-4ACE-9ADC-48E6AEC2FC97}  ワイヤレス ネットワーク接続

 C:\Users\YukiKaki> 




②レジストリエントリにTcpAckFrequencyを追加します。
  赤字部分は"対象のインタフェースGUID"を適宜書き換えましょう。

※一部のIPやホスト名は*にマスクしています。
C:\Users\YukiKaki> reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{46740908-ABB6-46D1-A48C-AA5A7E72E296} /f /v TcpAckFrequency /t REG_DWORD /d 1

C:\Users\YukiKaki reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{46740908-ABB6-46D1-A48C-AA5A7E72E296}
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{1379B417-12D1-465D-871B-D0590A15E452}
    UseZeroBroadcast    REG_DWORD    0x0
    EnableDeadGWDetect    REG_DWORD    0x1
    EnableDHCP    REG_DWORD    0x1

    NameServer    REG_SZ
    Domain    REG_SZ
    RegistrationEnabled    REG_DWORD    0x1
    RegisterAdapterName    REG_DWORD    0x0
    DhcpIPAddress    REG_SZ    ***.***.***.***
    DhcpSubnetMask    REG_SZ    255.255.0.0
    DhcpServer    REG_SZ   
***.***.***.***
    Lease    REG_DWORD    0x3840
    LeaseObtainedTime    REG_DWORD    0x508a6c0c
    T1    REG_DWORD    0x508a882c
    T2    REG_DWORD    0x508a9d44
    LeaseTerminatesTime    REG_DWORD    0x508aa44c
    AddressType    REG_DWORD    0x0
    IsServerNapAware    REG_DWORD    0x0
    DhcpConnForceBroadcastFlag    REG_DWORD    0x1
    TcpAckFrequency    REG_DWORD    0x1
    DhcpInterfaceOptions    REG_BINARY    FC000000000000000000000000000000196C8A503B0000000000000004000000000000004CA48A50000031383A0000000000000004000000000000004CA48A5000001C200600000000000000040000
00000000004CA48A50AC100001030000000000000004000000000000004CA48A50AC100001010000000000000004000000000000004CA48A50FFFF0000330000000000000004000000000000004CA48A5000003840360000000000000004000000000000
004CA48A50AC100001350000000000000001000000000000004CA48A5005000000
    DhcpGatewayHardware    REG_BINARY    AC10000106000000003A9DAFF77E
    DhcpGatewayHardwareCount    REG_DWORD    0x1
    DhcpNameServer    REG_SZ   
***.***.***.***
    DhcpDefaultGateway    REG_MULTI_SZ    ***.***.***.*** 
    DhcpSubnetMaskOpt    REG_MULTI_SZ    ***.***.***.***
 
 C:\Users\YukiKaki> 
reg queryの結果でTcpAckFrequency0x1で存在すればうまく反映されています。


ここまで進んだらレジストリの編集結果を反映するために再起動しましょう。



まとめ

本記事では、TCPのパラメータを変更して高速化を図っていますが、他にもTCPパラメータはたくさんあります。
http://www.microsoft.com/en-us/download/details.aspx?id=9152

Web上では、ブログなどで「○○のレジストリが~」等の記事がよくあります。
しかし、よく分かっていない人が書いている記事が非常に多いです。
特に、XP用のレジストリをWindows7に適用している意味不明なものが多いです。

Windowsの仕様は、MSDNやTechnetでマイクロソフトが公開しています。
その裏付けを確認している人の記事を参考とするようにしましょう。

2014年7月13日日曜日

ネット対戦に特化したネット環境作りとOSチューニング(ルータ&NIC編)

はじめに

今回はネット環境に影響するルータやNICについて寄稿します。
前回の記事を読んでいることを前提とします。

対象とする読者

1.とにかく最小遅延を目指す人
2.1Gbps以上の回線を契約している人
3.新しくネットワーク機器の購入を検討している人

注意事項

1.googleへのpathpingの数値で10ms以上出ている人は、この記事で得られる効果は低いです。
  プロバイダ変更を検討しましょう。
2.アフィアレルギーのある人はそっ閉じしましょう。

ルータの選び方


ルータはインターネットと自宅のLANを結ぶ重要なデバイスです。
インターネットに繋ぐ時は毎回フレッツ接続ツール使っている
または、Pingの値はそこそこ良いのに何故かスピードテストが遅いという人は
買い換えるといいです。
1Gbps以上の回線を契約している状態で、性能の低いルータを使うことは無駄です。
ちゃんとした製品を選びましょう。

ルータ選ぶ際、基準とするべき値はPPPoEの性能です。
PPPoEとは、ルータとプロバイダ間で使用するプロトコルのことです。

どんなに環境のよいプロバイダの回線でも、この性能が低いとスピードテスト等で差が出たり、
FPSゲームしながらスカイプをする環境では体感できるレベルの差がでます。


一般的に、大型小売店舗で販売されている一般向け製品のうち
比較的にスペックが高いのはNEC製品です。

では、NEC製品で最も高い製品のスペックを見てみましょう。

メーカー  型番           PPPoE
NEC    WG1800HP       932Mbps
https://121ware.com/product/atermstation/product/warpstar/wg1800hp/

NEC製品の場合は、製品一覧ページにPPPoEのスピードが書いてあるので参考にしましょう。
https://121ware.com/product/atermstation/product/


また、家庭用のルータを出しているメーカーは
有名メーカーで言うと、BuffaloIO DATACoregaなどもありますが、
正直、あまりゲーマー向けとは言えません。


メーカー  型番           PPPoE                      
Buffalo    WZR-1750DHP2    916Mbps
IO DATA  WN-AC1600DGR2   563Mbps
Corega    CG-WGR1200      795Mbps


他のメーカーでは製品の個別ページで比較しないと
分からないように出来ています。

他の各メーカーの製品ページ
http://buffalo.jp/product/wireless-lan/ap/
http://www.iodata.jp/product/network/wnlan/
http://corega.jp/product/list/wireless/


値段だけで安易に選ぶと思わぬ遅延に悩まされることが多いので気をつけましょう。


NICの選び方

ゲームPCのパーツを選択する際、意外と安価なマザーボードとゲーマー向けマザーボードの
差が出ている箇所がNIC(Network Interface Card)です。

IntelやQualcomm、Atherosや、Broadcomを使っている場合は問題ありません。

しかし、Realtekを使っている場合は別です。これは、ゲーマー向けではありません。
とりあえず動くけど不安定かつ性能は良くないという製品です。

デスクトップPCに後からNICを取り付ける場合は、Intel一択です。
高い部品ではないので安定性向上のためにも買っておきましょう。

次回の記事は、OSチューニングを書きます。

2014年7月6日日曜日

ネット対戦に特化したネット環境作りとOSチューニング(pathping編)

はじめに

今回からネット環境作りとOSチューニングについて回数を分けて寄稿します。
最も影響の大きいインターネット回線の話から書きます。
OSチューニングする以前にインターネット回線の品質を確認してみましょう。

対象とする読者

1.自分の回線の品質を確認したい人
2.相手との回線の相性を確認したい人
3.この記事の専門用語やコマンドが分からなくても検索が出来る人

注意事項

1.ネットワークの品質は各業者が使用している機器構成と使用率によって変化します
2.例えば、利用中のプロバイダにユーザが集中してしまうと快適性は低下します
3.同じ回線にP2Pファイル共有等の帯域消費者がいると、他のユーザにも影響を受けます

確認の方法

使用するコマンドはpathpingです。

pathpingとは宛先IPアドレスと中継機器全てにpingを行います。
対向側のping応答機能が有効である場合は統計して結果を表示します。

ここでは、"google.co.jp"と"yahoo.co.jp"を例に確認してみます。
ネット対戦が目的の人は、相手のIPアドレスを入力しましょう。
ネトゲが目的の人は、"ロビーサーバ"、"ロビーロードバランサ"等のIPを調べて入力しましょう。


※一部のIPやホスト名は*にマスクしてます。
C:\Users\YukiKaki> pathping google.co.jp
google.co.jp [173.194.117.152] へのルートをトレースしています
経由するホップ数は最大 30 です:
0 ********-**.*****-****.** [***.**.*.*]
1 ***.***** [***.**.*.*]
2 ******.*-*****.*****.**.** [***.***.***.***]
3 ***.***.***.***
4 ***.***.***.**
5 ***.***.***.***
6 **-*-*****-******.******.**.** [***.***.***.**]
7 ***.***.***.**
8
209.85.249.192
9 72.14.233.219 
10 nrt04s09-in-f24.1e100.net [173.194.117.152]
統計を 250 秒間計算しています...
ソースからここまで このノード/リンク
ホップ RTT 損失/送信 = Pct 損失/送信 = Pct アドレス
0                                                             ********-**.*****-****.** [***.**.*.*]
                                         0 / 100 =    0%   |
1 0ms     0 / 100 = 0%          0 / 100 =    0% ***.***** [***.**.*.*]
                                         0 / 100 =    0%   |
2 3ms     0 / 100 =    0%       0 / 100 =    0% ******.*-*****.*****.**.** [***.***.***.***]
                                         0 / 100 =    0%   |
3 3ms     0 / 100 =    0%      0 / 100 =    0% ***.***.***.***
                                         0 / 100 =    0%   |
4 4ms     0 / 100 =    0%       0 / 100 =    0% ***.***.***.**
                                         0 / 100 =    0%   |
5 ---  100 / 100 = 100%  100 / 100 = 100% ***.***.***.***
                                         0 / 100 =    0%   |
6 ---  100 / 100 = 100%  100 / 100 = 100% **-*-*****-******.******.**.** [***.***.***.**]
                                        0 / 100 =     0%   |
7 4ms    0 / 100 =      0%    0 / 100 =      0% ***.***.***.**
                                        0 / 100 =     0%   |
8 7ms     0/ 100 =      0%     0 / 100 =     0% 209.85.249.192
                                        0 / 100 =      0%  |
9 ---  100 / 100 =  100% 100 / 100 =  100% 72.14.233.219
                                        0 / 100 =      0%  |
10 4ms   0/ 100 =      0%    0 / 100 =      0% nrt04s09-in-f24.1e100.net [173.194.117.152]
トレースを完了しました。


C:\Users\YukiKaki> 



C:\Users\YukiKaki> pathping yahoo.co.jp
 yahoo.co.jp [182.22.59.229] へのルートをトレースしています
 経由するホップ数は最大 30 です:
 0 ********-**.*****-****.** [***.**.*.*]
 1 ***.***** [***.**.*.*]
 2 ******.*-*****.*****.**.** [***.***.***.***]
 3 ***.***.***.***
 4 ***.***.***.**
 5 ***.***.***.***
 6 **-*-*****-******.******.**.** [***.***.***.***]
 7 210.150.215.82
 8 203.141.47.225
 9 118.151.224.242
 10 182.22.34.50
 11 f1.top.vip.ssk.yahoo.co.jp [182.22.59.229]
 統計を 275 秒間計算しています...
 ソースからここまで このノード/リンク
 ホップ RTT 損失/送信 = Pct 損失/送信 = Pct アドレス
 0                                                      ********-**.*****-****.** [***.**.*.*]
                                       0 / 100 = 0% |
 1 0ms    0 / 100 = 0%       0 / 100 = 0% ***.***** [***.**.*.*]
                                       0 / 100 = 0% |
 2 3ms    0 / 100 = 0%       0 / 100 = 0% ******.*-*****.*****.**.** [***.***.***.***]
                                      0 / 100 = 0%  |
 3 3ms    0 / 100 = 0%       0/ 100 = 0% ***.***.***.***
                                      0 / 100 = 0%  |
 4 4ms    0 / 100 = 0%       0 / 100 = 0% ***.***.***.**
                                       0 / 100 = 0% |
 5 --- 100 / 100 =100% 100 / 100 =100% ***.***.***.***
                                      0 / 100 = 0%  |
 6 --- 100 / 100 =100% 100 / 100 =100% **-*-*****-******.******.**.** [***.***.***.***]  
                                      0 / 100 = 0%  |
 7 5ms    0/ 100 = 0%       0 / 100 = 0% 210.150.215.82
                                      0 / 100 = 0%  |
 8 4ms    0/ 100 = 0%       0 / 100 = 0% 203.141.47.225
                                      0 / 100 = 0%  |
 9 7ms 0/ 100 = 0%          0 / 100 = 0% 118.151.224.242
                        0 / 100 = 0%  |
 10 7ms 0/ 100 = 0%         0 / 100 = 0% 182.22.34.50
                                      0 / 100 = 0%  |
 11 7ms 0/ 100 = 0%        0 / 100 = 0% f1.top.vip.ssk.yahoo.co.jp [182.22.59.229]
 トレースを完了しました。 

C:\Users\YukiKaki>


この結果でGoogleの応答(4ms)は、Yahooの応答(7ms)より速い
という結果が出ました。

ここまでの話であれば、適当に検索したら日本語で出てきます。
でも本ブログは最上位ゲーマー向けなのでもっと深堀りします。




どこで遅延しているのか

まずは、改めてYahooにpathpingした結果を確認してみましょう。

  7 5ms    0/ 100 = 0%       0 / 100 = 0% 210.150.215.82
                                       0 / 100 = 0%  |
  8 4ms    0/ 100 = 0%       0 / 100 = 0% 203.141.47.225
                                      0 / 100 = 0%   |
  9 7ms 0/ 100 = 0%          0 / 100 = 0% 118.151.224.242
                        0 / 100 = 0%   |
 10 7ms 0/ 100 = 0%         0 / 100 = 0% 182.22.34.50
                                      0 / 100 = 0%   |
 11 7ms 0/ 100 = 0%        0 / 100 = 0% f1.top.vip.ssk.yahoo.co.jp [182.22.59.229]

"8"[203.141.47.225]まで4msだったところが、"9"[118.151.224.242]以降全て7msに変わっています。
このことから、8と9の間で問題がある可能性が考えられます。

ここから、それぞれのIPが誰の持ち物であるのか調べます。
IP情報検索サイト[link]があるのでこれを使います。(※ページ右上にIP入力)

210.150.215.82    InfoSphere (NTT PC Communications, Inc.)
203.141.47.225    Yahoo Japan Corp.
118.151.224.242    Yahoo Japan Corp.
182.22.34.50          Yahoo
182.22.59.229        Yahoo

筆者が使っているNTT系の回線からYahooのサーバまでに3台中継機器があります。

そして、NTT系の中継機器までは4msを維持していた所が、Yahooの中継機器を経由して以降
3msの追加遅延が発生し、7msになっています。

これによって、GoogleよりYahooが遅い理由として
NTTの回線やYahooのサーバ自体に問題はない。
Yahooのネットワーク機器が原因で3msの遅延が発生した。
という詳細な切り分けをすることが出来ます。 

まとめ

ここまで記載した情報を元に、ゲーマー同士がインターネット環境の情報交換を行うと
ゲーマーにとって優秀なプロバイダとそうでないプロバイダを分類することが出来ます。
プロバイダ毎の相性確認することが出来ます。

その他備考

一部の結果で中継元の機器より中継先の機器の方が速い逆転が発生してるよね?
と気づいた人が居るかもしれません。
これは、Ping処理そのものの遅延です。

ネットワーク機器は、必ずしもPing応答を最優先としているとは限りません。
回線が混んでいると、他の通信の中継してから応答するので前後することがあります。
ですが、目安になるという点では変わりません。

2014年7月3日木曜日

なぜ、古いPCゲームをVista以降のOSで遊ぶと反応が悪く感じるのか

はじめに 

この手の記事、ゲーマー向けに色々あるけど
日本語サイトで正確かつ一定の網羅性のある情報を誰も書いてねぇ!!!!!
と思ったので書きます。仕方ないね。



対象とする読者

1.一定のPC/AT互換アーキテクチャに関する知識を持つ人
2.DirectXとは何かをある程度理解している人
3.この記事の専門用語が分からなくても検索が出来る人
4.Eternalなんとかという14年前のゲームに異常な拘りを持つ人


でも、分からないなら結論だけ読めばOK!



結論

WindowsXP及び、それ以前のOS向けに作られたPCゲームをWindows7で実行すると
必ず遅延します。
仕様なので軽減することは出来ても完全回避することは不可能です。
古いPCゲーム最小遅延で遊びたいならXPを用意しましょう。

というか、今更古いゲームするのはやめましょう。
XPなんてサポートの切れたOSとか危ない。







・・・と結論から書きましたが、これから詳しく説明します。


注意事項

Vista/Windows7/Windows8で各々仕様の違いが若干あります。
本稿では、執筆時点(2014年7月現在)で最も普及している 
Windows7(64bit)のDirectX仕様を前提に説明します。



何が原因で遅延するのか。

 大きな観点で言うと、以下の問題があります。

 ①WDDM/DWM問題

 ②WOW問題

 ③FPS誤差問題

 ④互換API問題


① WDDM/DWM問題とは

 WDDM及びDWMとは、Vista以降のOSで採用されているドライバモデル及び描画システムです。

 XPまでのOSは、フルスクリーン時にアプリケーションがGPUを殆ど直接に近い状態で
 シングルタスク描画していました。このモデルをXPDMといいます。

 XPDMは貧弱な描画性能でも最大限にリソースを活用するという観点では優れたモデルでした。


 ただし、2つの大きな欠点がありました。
  ・ XPDMはアプリケーションのバグでOSクラッシュしやすい
  ・ 年々向上しているGPU性能(特に3D関連)を有効活用しにくい

マイクロソフトはアプリケーションのバグでOSクラッシュをするリスクを低減するために、
GPUを仮想化してOSや他のアプリケーションに影響が出ない方式を採用しました。

それがWDDM(Windows Display Driver Model)及びDWM(Desktop Window Manager)です。

 ・ GPUを仮想化が原因で、アプリケーションが描画したい情報を直接的に反映されなく
  なりました。
 ・ 古い2DのDirectXアプリケーションの場合、DWMがDirect3Dに変換します。
 ・ 各々のアプリケーションが描画した情報とウインドウの前後関係を判別して合成後
  DWMが描画します。この描画ではDirect3Dに統一されます。
 ・ 一部のブログなどで『Win7でXPDMドライバ動かしました』とか『DWMを無効化しました
  とか書いてあったりしますが、中間処理の一部が"欠損"するだけです。
  XPと同等のレスポンスにはなりません。


 これらの遅延が積み重なることによって僅かな影響は出てきます。
 しかし、極々一部の最上位ゲーマー同士の戦いだけです。
 常人には全く影響ありません。


② WOW問題

 WOWとはWindows on Windowsの略称で、64bitのWindowsで32bitアプリケーションを
 実行する為のエミュレータです。

 64bitCPUでありながらソフトウェア処理32bitCPUの挙動をアプリケーション見せることで
 32bitアプリケーションを実行することができます。

 しかし、このエミュレータの処理によって僅かな遅延が発生します。
 ですが、現在のCPU性能を考えると人間には判別不可能なレベルと思われます。


③ FPS誤差問題

 一部のゲームで、XPでは64FPSVista以降では63FPSかそれ以下で動いてしまう問題です。
 これは解決方法があるのですが、英文などの文献にも全く情報がない中、
 筆者が相当の苦労して調べた情報なので相応のお金を貰わない限り公開しません


④ 互換API問題

 古い2DのDirectXアプリケーションは、Direct3Dに変換されるという話はDWMの話で書きましたが、
 最近のDirectXの2D機能で作られたアプリケーションなら変換処理されずに描画されます。
 古い2DとはDirectDrawによる描画処理です。最近の2DとはDirect2Dです。
 Direct2Dとは、Direct3Dの一部機能を使って2Dを描画する方式です。
 そのため中身はDirect3Dであり、変換処理がされないのです。