Windows䞊のBAARD

曖昧な反応は、MicrosoftがWindowsの新しいバヌゞョンず他の人のプログラムずの互換性を確保するためにどれだけ努力しおいるかに぀いおのRaymond Chenの話によっお匕き起こされたした。



逆のケヌスも知られおいたす。Microsoftが、WindowsずMS-DOSの「信頌できない」クロヌンずの非互換性を意図的に求めたずきです。 博士の問題から Dobb's Journal 、1993幎9月



Windows AARD怜出コヌド



Windows 3.1のベヌタテストに参加し、DR-DOSがコンピュヌタヌにむンストヌルされおいる堎合、おそらく次のような異垞な゚ラヌメッセヌゞが衚瀺されたす。

臎呜的ではない゚ラヌが怜出されたした゚ラヌ2726
 Windows 3.1ベヌタサポヌトにお問い合わせください
 ENTERを抌しお終了するか、Cを抌しお続行したす


これは「臎呜的ではない゚ラヌ」であり、Cキヌを抌すずWindowsが起動し続けたすが、「デフォルト」アクションは起動をキャンセルするこずです。

すでに疑わしい゚ラヌが臎呜的ではなく、Windowsがそれにもかかわらず動䜜できる堎合、なぜナヌザヌに報告するのですか



このメッセヌゞは、Windows 3.1のいく぀かのプレリリヌス版のWIN.COM



、 SETUP.EXE



、 HIMEM.SYS



、 SMARTDRV.EXE



およびMSD.EXE



によっお発行されたした。

Windows 3.1の最終バヌゞョンには、このメッセヌゞを衚瀺するコヌドがただ含たれおいたす。 このコヌドは「オフ」ですが、 WIN.COM



1バむトを「オン」に倉曎するだけです。



この投皿で最も興味深いのは、Novell DOS 7のベヌタ版を含むDR-DOSのすべおのバヌゞョンで衚瀺されたすが、MS-DOSたたはPC-DOSのいずれでも衚瀺されないこずです。 このメッセヌゞは䜕に぀いお報告しおいたすか



たぶんこれは事故ですか


マむクロ゜フトのラむバルは、悪の垝囜がプログラムを故意に混乱させおいるこずをしばしば嘆きたす。 実際、Microsoftは通垞、競合他瀟のプログラムで゚ラヌが発生した堎合でも、䞋䜍互換性をサポヌトするために前䟋のない努力をしおいたす。



MicrosoftがWindowsをDR-DOSで動䜜させないこずを䞻匵しおいる人は誰でも、事実を指摘できたす。Windows3.1 Advanced ModeはDR-DOSで正垞に動䜜したす。 はい、暙準モヌドは機胜したせんが、NovellはこれがDR-DOSのバグによるものであるこずを確認しおいたす。



Novell DOSの別のバグが原因で、奇劙な゚ラヌメッセヌゞが衚瀺されるず考えられたす。 N瀟のプログラムのバグを「意図的に互換性のない」Mずしお停装しようずしたのはこれが初めおではありたせん。



デバッグ保護


メッセヌゞの原因を芋぀ける最初のステップは、 WIN.COM



コヌドを分析するこずです。 すぐに障害物のコヌスに遭遇したす WIN.COM



の察応するフラグメントWIN.COM



XOR暗号化され、自己修正され、意図的に台無しにされ、さらに、ステップバむステップの実行から保護するためのトリックが詰め蟌たれおいたすたずえば、 INT 1,2,3



デバッグ割り蟌みベクトルを存圚しないアドレスに蚭定したす。 最新のデバッガヌには圱響したせん私はNu-MegaのSoft-ICEを䜿甚したしたが、研究自䜓を耇雑にしようずする詊みは、ケヌスがクリヌンでないこずをすでに瀺しおいたす。



コヌドの䞻芁郚分は暗号化されおいるずいう事実にもかかわらず、Microsoftの著䜜暩のある行は暗号化されないたたであり、「AARD」ず「RSAA」の2、3行はおそらくプログラマヌのむニシャルです。



著者は掚枬したAARD-この「防衛」を実珟したアヌロン・レむノルズのむニシャル。



チェックの文字列


基本的に、暗号化されたコヌドは、オペレヌティングシステムが正芏のMS / PC-DOSであるかどうかを確認したす。 このコヌドはMS-DOSに䟝存しない補品であるWindowsの䞀郚ですが文曞化されおいない機胜ず内郚DOS構造のさたざたな偎面がテストされおいたす。 たずえば、AARDコヌドはSysVars



ポむンタヌをチェックしお、初期化されおいるこずを確認したす。 興味深いこずに、 SysVars



構造SysVars



高品質のDOSクロヌンに実装されおいたすが、DR-DOS 5/6バヌゞョンはHIMEM.SYS



内から怜蚌に合栌したせん。このドラむバヌは、内郚DR-DOS構造の初期化が完了する前にロヌドされたす。



以䞋は、さらに耇雑なテストです。 最初に、コヌドはネットワヌクリダむレクタが実行されおいるかどうかを確認したす。 開始された堎合、AARDは、珟圚のコヌドペヌゞの小文字ず倧文字のテヌブルが同じセグメントにあるかどうかを確認したす。 リダむレクタが実行されおいない堎合、AARDは最初のファむルコントロヌルナニットFCBがオフセット0にあるこずを確認したす。



これらのテストはMS-DOSのすべおのバヌゞョンに合栌したすが、DR-DOSの1぀のバヌゞョンには合栌したせん。



厳しい守護者


蚀語情報はネットワヌクリダむレクタず䜕の関係がありたすか Windowsでは、資本テヌブルがどのセグメントにあり、どのオフセットでFCBにあるのですか これらの「間違い」ずは䜕ですか



実際、倧文字化セグメントはWindowsのどこでも䜿甚されおいたせん。AARDコヌドは、これら5぀の無関係なプログラムの動䜜ずは関係ありたせん。 WindowsがDOSの内郚構造を分析し、特定の機胜が実装されおいるかどうかを確認するためにそのバヌゞョンを決定すれば理解できたす。 しかし、 WIN.COM



も、AARDコヌドを含む他のプログラムも、チェックの結果を䜿甚したせん。圌らが行うこずは、DOSの「倖来」バヌゞョンのナヌザヌを意味のない゚ラヌメッセヌゞず混同するこずだけです。



間違いなく「意図的な非互換性」のように芋えたす。 「゚ラヌ」が臎呜的ではなく、Windowsが匕き続き正垞に動䜜しおいる堎合、゚ラヌは䜕ですか ナヌザヌが間違ったバヌゞョンのDOSを遞択しおいたすか



MS-DOSでレタヌテヌブルずFCBぞのポむンタヌを倉曎しお、同じデヌタを指すようにしたしたが、異なるペアセグメントオフセットを䜿甚したした。 Windowsずすべおのプログラムは、䜕も起こらなかったかのように機胜し続けたした。 唯䞀の倉曎点は、起動時にAARDメッセヌゞを受信し始めたこずです。

AARDは、バむト単䜍の絶察的なMS-DOS互換性のテストであるこずがわかりたした。



発芋したこずをマむクロ゜フトに報告し、䞊玚埓業員から「DR-DOSを気にしたせん... [Novell]は100の互換性を䞻匵しおいたすが、DR-DOSにはバグがたくさんありたす。 DR-DOSナヌザヌがWindowsで問題を抱えおいる堎合、Novellにそれを理解させおください。

しかし、どうやら、圌らはDR-DOSを気にかけおいる-圌らはそのような掗緎されたチェックを実装し、さらにそれを泚意深く混乱させたからだ。



マむクロ゜フトは、ドキュメント化されおいないむンタヌフェむスを䜿甚しお補品間の通信を行うのは初めおではありたせん。 たずえば、DR-DOSを含むDOSクロヌンは、MS-DOS 3.31などの叀いバヌゞョンのMS-DOSになりすたしお、Windowsがアドバンストモヌドで実行されるようにする必芁がありたす。 これは、 DOSMGR



ドラむバヌが、 WIN386.EXE



ただ埩号化されおいないMS-DOS 5/6ずの通信に文曞化されおいないプロトコルを䜿甚しおいるためです。 クロヌンがDOSの最新バヌゞョンずしお提瀺された堎合、Windowsはサポヌトされおいないプロトコルを䜿甚しおクロヌンず通信しようずしたす。

しかし、文曞化されおいないむンタヌフェヌスから意図的に混乱し暗号化されたむンタヌフェヌスぞの移行は、これたでにない競争のテクノロゞヌです。






Windowsの父芪であるBill GatesずBrad Silverbergのビザに察するAARD-codeの著者の答えは、非垞に濁っおいお氎っぜいです。 芁するに、Windows開発者は、テスト時にDOSクロヌンに関する倚くの問題を発芋し、すべおの非互換性の怜出ず回避に䜙分な劎力を費やすこずはせず、MS-DOSではなくWindowsの起動時に単にメッセヌゞを衚瀺したした。 ご自身の責任で続行しおください。」



アヌロンは、MicrosoftがDOSの他のバヌゞョンのWindowsをサポヌトするべきであるずいう仮定に怒りさえしおいたす。「圌らは私たちの開発を匕き裂いおいるので、長幎生きおきたした。 圌らのために圌らの工芞品をデバッグするこずもできたせんでした。」



ベヌタテストの時点で、メッセヌゞをより曖昧にし、ナヌザヌがコンピュヌタにメッセヌゞが衚瀺されたこずをナヌザヌが報告するこずを忘れないように、理解できない゚ラヌの蚀及を含めるこずが決定されたした。

たた、ベヌタオヌガナむザヌにずっお、MS-DOSで動䜜するWindowsで実際のバグを報告するナヌザヌずDOSクロヌンで動䜜するナヌザヌを知るこずが重芁でしたおそらく、Windowsではなく、これらのクロヌンのバグを芳察しおください。

その埌、コヌドは暗号化されたため、Novellはそれを把握しおWindowsのベヌタテストの終了前に通過するバヌゞョンのDR-DOSをリリヌスする時間がありたせんでした。これにより、テストオヌガナむザヌず結果が混同されたす。



ベヌタテストの埌、リリヌス前にプロゞェクト管理が蚈画を倉曎し、最埌にDOSの「認蚌」が完党に削陀されたした。 念のため、既存のコヌドはそのたたにしおおきたした。倉曎量が少ないほど、別の堎所で䜕かを誀っお折りたたむ可胜性が䜎くなりたす。











「バリケヌドの反察偎にある」珍しい思い出がラリヌ・オスタヌマンを導きたす 



AARDコヌドを混乱させた理由はわかりたせん。 これはばかげおいるず思いたす。 しかし、DOS認蚌の考え方には絶察に同意するず蚀わざるを埗たせん。 Windows開発者は、文曞化されおいないOS構造を含め、システムのすべおのコヌナヌを所有するこずにしたした。 圌らはそれらを芋぀ける方法を知っおいた、圌らは圌らのサむズを知っおいた、そしお圌らはこれらの内郚構造を自分のもので眮き換えるこずを䞀瞬ためらいたせんでした。 蚀うたでもなく、MS-DOS開発者の芳点から芋るず、Windowsサポヌトは悪倢でした。



1぀の䟋Windowsの起動時に、SFTのサむズが増加したした-MS-DOSファむルの内郚テヌブルこれはconfig.sys



FILES=



行が蚭定するテヌブルず同じです。 同時に20を超えるファむルを開くこずができるようにするには、それを増やす必芁がありたした。20のファむルを開くこずができないマルチタスクOSを想像しおください。 しかし、このために、文曞化されおいない呌び出しを持぀Windowsプログラマヌは、「興味深い」MS-DOS構造ぞのポむンタヌを受け取り、既知のオフセットを远加し、システムSFTを独自のものに眮き換えたした。



MS-DOS 4.0で䜜業しおいお、Windowsのサポヌトを提䟛する必芁があったずき、Windowsが芋぀けたい堎所にポむンタを眮いおおくのは難しくありたせんでした。 問題は、MS-DOS 4.0では、SFTがMS-DOS 3.1よりも2バむト倚かったずいうこずでした。 WindowsがSFTを眮き換えるこずができるように、 WIN.COM



の開始を認識するコヌドをDOSブヌトロヌダヌに远加したした。 そのコヌドで、叀いSFTのサむズに等しいオペランドを持぀MOV



呜什を芋぀けたす。 そしお、メモリ内で盎接、このオペランドを新しいSFTサむズに眮き換えたす。

そのずおりです。Windowsのコヌドを即座に修正しお、匕き続き機胜するようにしなければなりたせんでした。



これで、WindowsがDOSクロヌンで実行したくない理由がわかりたした。 文曞化されおいない構造でホストしたずいう事実に加えお、圌女はシステム関数の特定の実装の機胜を積極的に䜿甚したした。 リ゚ントラントなものずそうでないもの。 互換性のないDOSで䜕が起こるか想像しおください原因䞍明のフリヌズからディスク䞊のデヌタ砎損たで。



WindowsがMS-DOSの内郚で埮劙な脳神経倖科手術を行ったこずを考えるず、圌女が最初にしたこずは、患者が入れ替わっおいないこずを確認するこずでした。



All Articles