windows-nt/Source/XPSP1/NT/windows/appcompat/doc/xml format.txt
2020-09-26 16:20:57 +08:00

245 lines
8.3 KiB
Plaintext

<?xml version="1.0"?>
<!--
the above tag must be at the beginning of the file for it to be recognized
as XML
-->
<!--
NT Application Compatibility Database
Created: 11/19/99 markder
-->
<!--
The database must be bracketed by <DATABASE> and </DATABASE> tags
-->
<DATABASE>
<!--
Within the database, the first section is the library, which specifies
the shim DLLs and the patch PATCH files. It must be bracketed with
<LIBRARY> and </LIBRARY>
-->
<LIBRARY>
<!--
Within the library can be any number of INCLUDE, EXCLUDE, DLL and PATCH entries
in any order. By convention we put all the INCLUDE and EXCLUDE entries, then the
DLL entries, then the PATCH entries
-->
<!--
An EXCLUDE or INCLUDE entry has one required attribute (MODULE).
MODULE specifies a module whose calls should be included
or excluded from shimming.
It is expected that the Global list will be only generic EXCLUDE entries, just for the
system DLLs. Later in the file one may encounter more specific, single-API excludes in the
<DLL> tags.
An <INCLUDE> or <EXCLUDE> tag should be terminated with />.
See below, in the <EXE> section for more about precedence of <EXCLUDE> and <INCLUDE> tags.
-->
<EXCLUDE MODULE="FOO.DLL"/>
<!--
The DLL tag has only one attribute, which is required, NAME. It specifies the
filename of the DLL. A DLL tag requires a terminating </DLL> tag
-->
<DLL NAME="MyShim.dll">
<!--
A DLL tag in the scope of the LIBRARY section just names a shim dll that should
be added to the database. It can contain an optional <DESCRIPTION> tag and
any number of optional <INCLUDE> or <EXCLUDE> tags
-->
<DESCRIPTION>
This is the description of the MyShim Dll
</DESCRIPTION>
<EXCLUDE MODULE="FOO.DLL"/>
<INCLUDE MODULE="BAR.DLL"/>
</DLL>
<!--
The PATCH tag has only one attribute, which is required, NAME. It specifies the
name of the PATCH (as it will be references outside the library).
A PATCH tag requires a terminating </PATCH> tag
-->
<PATCH NAME="MyPatch">
<DESCRIPTION>
This is the description of the MyPatch patch
</DESCRIPTION>
<!--
A patch is executed by matching bytes in memory (to ensure that what
resides in memory is what you expect) and overwriting them. Use the
MATCH_BYTES and WRITE_BYTES tags as shown below. All bytes must be
specified as two-digit hex. Offsets are relative to the base
address of the module specified by the MODULE attribute. Use %EXE%
as an alias for the main executable module.
-->
<MATCH_BYTES MODULE="%EXE%" OFFSET="0x00083FE2">6a 01 56</MATCH_BYTES>
<WRITE_BYTES MODULE="%EXE%" OFFSET="0x00083FE2">EB 07</WRITE_BYTES>
</PATCH>
</LIBRARY>
<!--
The <APP> tag is optional; an EXE tag can be placed within it or just placed under the
<DATABASE> tag. It's a handy way of tying together all the executables associated with
a specific Application, including perhaps the installer, the main application, and perhaps
various tools or subsidiary executables. An <APP> tag contains one or more <EXE> tags. The
<APP> tag requires a </APP> terminator
-->
<APP NAME="AppName" VENDOR="BigISV">
<!--
The <HISTORY> tag keeps a record of who created or modified this entry and what was done to
fix the application. From this description, a program manager should know exactly what the
application was doing wrong or what changed in the OS to cause the problem.
In cases where generic shims were applied (e.g. version lying, 2GB free space problem), it is
sufficient to simply list the problem and the reader can refer to the description of the shim
as it is found in the library.
-->
<HISTORY ALIAS="billg" DATE="01/02/2000">
<DESCRIPTION>
- Windows 95 version lying.
- 2GB disk free space problem.
- App was putting its start menu items in the user-specific folder, but uninstalling
them from the common folder. It was shimmed so that it installs its items to
the common folder.
</DESCRIPTION>
</HISTORY>
<HISTORY ALIAS="steveb" DATE="02/13/2000">
<DESCRIPTION>
- App wasn't getting focus in certain startup scenarios. Forced SetWindowForeground
to succeed.
</DESCRIPTION>
</HISTORY>
<!--
The <EXE> tag identifies a specific executable that needs to be shimmed or patched, and
specifies the shims or patches to apply to it. The <EXE> tag contains zero or more optional
<MATCHING_FILE> tags, zero or more <DLL> tags and zero or more <PATCH> tags.
The EXE tag has one required parameter, NAME, and three optional parameters, SIZE, CHECKSUM, and
TIME. The <EXE> tag requires a matching </EXE> terminator.
SIZE is the size of the executable in bytes
CHECKSUM is a checksum calculated with an algorithm borrowed from the AppsHelp code. See
dmunsil or markder for the code.
TIME is a human-readable creation time, in UTC (GMT), in the form MM/DD/YYYY HH:MM:SS
-->
<EXE NAME="AUTORUN.EXE" SIZE="12345" CHECKSUM="0xDEADBEEF" TIME="01/01/2001 01:01:01">
<!--
The <MATCHING_FILE> tag allows for checking other files near the executable, to ensure
a good match. The files are first checked relative to the executable's directory, and
then in the current working directory, which is the directory that the parent process
is in (if there is a parent process). For example, if the "SETUP.EXE" program on the CD-Rom
root directory E:\ unpacks an installer into C:\WINNT\TEMP\, then executes the installer,
the NESY matching system will check for matching files in (or relative to) both C:\WINNT\TEMP\
and E:\.
The matching file name can contain a relative path, but should not contain a drive designator,
as the target machine may have different letters for the various drives.
The <MATCHING_FILE> tag should be terminated with />
-->
<MATCHING_FILE NAME="..\WIN\MYMATCH.FOO" SIZE="2468" CHECKSUM="0xBEDEBEDE"/>
<!--
In the scope of an <EXE> tag, the <DLL> tag names a DLL that should be applied to
this EXE. The shim dll should have already been declared above in the <LIBRARY>
section. Optional <INCLUDE> and <EXCLUDE>
tags can be inserted between the <DLL> and </DLL> tags.
-->
<DLL NAME="MyShim.dll">
<!--
The order of precedence for INCLUDE and EXCLUDE tags is in reverse of their
appearance in the file. The shim system walks the list in reverse
order and the first INCLUDE or EXCLUDE that matches on all provided attributes
will take effect.
For this reason, it is important to put INCLUDES and EXCLUDES ordered from the
generic to the specific, as demonstrated below.
-->
<EXCLUDE MODULE="FOO.DLL"/>
<INCLUDE MODULE="FOO.DLL"/>
</DLL>
</EXE>
<EXE NAME="SETUP.EXE" SIZE="67890" CHECKSUM="0xFEEDBEAD" TIME="02/02/2002 02:02:02">
<!--
In the scope of an <EXE> tag, the <PATCH> tag names a patch file, which should have been
declared above in the <LIBRARY> section. The <PATCH> tag should be terminated with />
-->
<PATCH NAME="MyPatch"/>
<!--
<INCLUDE> and <EXCLUDE> tags are not valid for <PATCH> tags, as the PATCH gets applied
to the app once at load time, and can't be turned off and on.
-->
</EXE>
</APP>
</DATABASE>