Реферат: Making Utilities For MSDOS Essay Research Paper
that had changed with DOS version 4.00. My first thought was that I can use this
flag in my utilities when I need to cope with different “styles” of DOS
internals. However, my next discovery really surprised me and gave me a real
understanding of what I’m doing when I mingle with DOS internals. MSCDEX version
2.21 refuses to run under DOS versions 6.00 and later. So much for the idea that
“Microsoft’s own utilities have never stopped working with a new DOS version.”
In fact, Geoff Chappell refers to this in DOS Internals (501).
The last utility I looked at was Microsoft SmartDrive version 4.00, which is
bundled with Microsoft Windows version 3.10. This utility also uses the DOS
internal structures, including the version-dependent ones. However, unlike
MSCDEX, SmartDrive doesn’t have a “top” DOS version number. It compares the DOS
version number with 4.00 and assumes that DOS similar to versions 3.10-3.30 if
it’s lower than 4.00 and to versions 4.00-5.00 if it’s 4.00 or higher.
SmartDrive assumes that all future DOS versions will be compatible with MS-DOS
version 5.00 at the level of the internal structures.
The lack of clear pattern in the usage of the undocumented DOS internal
structures by Microsoft’s own utilities made me think seriously about the
possibility of safe use of the DOS internals in the first place. Originally I
thought that Microsoft has some internal confidential document that explains how
to use the DOS internals safely, and that anyone having that magic document can
use the undocumented DOS internals as safely as normal documented INT 21h API.
However, the evidence I have obtained through reverse engineering of Microsoft’s
utilities puts the existence of that magic document under question. In
Undocumented DOS Andrew Schulman notes that it is possible that on some
occasions Microsoft’s programmers have found out about the MS-DOS internals not
from the source code or some other internal confidential documents, but from
general PC folklore, just like third-party software developers. For example, the
MWAVABSI.DLL file from the Microsoft Anti-Virus provides a function called AIO_
GetListofLists(). This function calls INT 21h/AH=52h to get the pointer to one