Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

244 lines
8.3 KiB

  1. <?xml version="1.0"?>
  2. <!--
  3. the above tag must be at the beginning of the file for it to be recognized
  4. as XML
  5. -->
  6. <!--
  7. NT Application Compatibility Database
  8. Created: 11/19/99 markder
  9. -->
  10. <!--
  11. The database must be bracketed by <DATABASE> and </DATABASE> tags
  12. -->
  13. <DATABASE>
  14. <!--
  15. Within the database, the first section is the library, which specifies
  16. the shim DLLs and the patch PATCH files. It must be bracketed with
  17. <LIBRARY> and </LIBRARY>
  18. -->
  19. <LIBRARY>
  20. <!--
  21. Within the library can be any number of INCLUDE, EXCLUDE, DLL and PATCH entries
  22. in any order. By convention we put all the INCLUDE and EXCLUDE entries, then the
  23. DLL entries, then the PATCH entries
  24. -->
  25. <!--
  26. An EXCLUDE or INCLUDE entry has one required attribute (MODULE).
  27. MODULE specifies a module whose calls should be included
  28. or excluded from shimming.
  29. It is expected that the Global list will be only generic EXCLUDE entries, just for the
  30. system DLLs. Later in the file one may encounter more specific, single-API excludes in the
  31. <DLL> tags.
  32. An <INCLUDE> or <EXCLUDE> tag should be terminated with />.
  33. See below, in the <EXE> section for more about precedence of <EXCLUDE> and <INCLUDE> tags.
  34. -->
  35. <EXCLUDE MODULE="FOO.DLL"/>
  36. <!--
  37. The DLL tag has only one attribute, which is required, NAME. It specifies the
  38. filename of the DLL. A DLL tag requires a terminating </DLL> tag
  39. -->
  40. <DLL NAME="MyShim.dll">
  41. <!--
  42. A DLL tag in the scope of the LIBRARY section just names a shim dll that should
  43. be added to the database. It can contain an optional <DESCRIPTION> tag and
  44. any number of optional <INCLUDE> or <EXCLUDE> tags
  45. -->
  46. <DESCRIPTION>
  47. This is the description of the MyShim Dll
  48. </DESCRIPTION>
  49. <EXCLUDE MODULE="FOO.DLL"/>
  50. <INCLUDE MODULE="BAR.DLL"/>
  51. </DLL>
  52. <!--
  53. The PATCH tag has only one attribute, which is required, NAME. It specifies the
  54. name of the PATCH (as it will be references outside the library).
  55. A PATCH tag requires a terminating </PATCH> tag
  56. -->
  57. <PATCH NAME="MyPatch">
  58. <DESCRIPTION>
  59. This is the description of the MyPatch patch
  60. </DESCRIPTION>
  61. <!--
  62. A patch is executed by matching bytes in memory (to ensure that what
  63. resides in memory is what you expect) and overwriting them. Use the
  64. MATCH_BYTES and WRITE_BYTES tags as shown below. All bytes must be
  65. specified as two-digit hex. Offsets are relative to the base
  66. address of the module specified by the MODULE attribute. Use %EXE%
  67. as an alias for the main executable module.
  68. -->
  69. <MATCH_BYTES MODULE="%EXE%" OFFSET="0x00083FE2">6a 01 56</MATCH_BYTES>
  70. <WRITE_BYTES MODULE="%EXE%" OFFSET="0x00083FE2">EB 07</WRITE_BYTES>
  71. </PATCH>
  72. </LIBRARY>
  73. <!--
  74. The <APP> tag is optional; an EXE tag can be placed within it or just placed under the
  75. <DATABASE> tag. It's a handy way of tying together all the executables associated with
  76. a specific Application, including perhaps the installer, the main application, and perhaps
  77. various tools or subsidiary executables. An <APP> tag contains one or more <EXE> tags. The
  78. <APP> tag requires a </APP> terminator
  79. -->
  80. <APP NAME="AppName" VENDOR="BigISV">
  81. <!--
  82. The <HISTORY> tag keeps a record of who created or modified this entry and what was done to
  83. fix the application. From this description, a program manager should know exactly what the
  84. application was doing wrong or what changed in the OS to cause the problem.
  85. In cases where generic shims were applied (e.g. version lying, 2GB free space problem), it is
  86. sufficient to simply list the problem and the reader can refer to the description of the shim
  87. as it is found in the library.
  88. -->
  89. <HISTORY ALIAS="billg" DATE="01/02/2000">
  90. <DESCRIPTION>
  91. - Windows 95 version lying.
  92. - 2GB disk free space problem.
  93. - App was putting its start menu items in the user-specific folder, but uninstalling
  94. them from the common folder. It was shimmed so that it installs its items to
  95. the common folder.
  96. </DESCRIPTION>
  97. </HISTORY>
  98. <HISTORY ALIAS="steveb" DATE="02/13/2000">
  99. <DESCRIPTION>
  100. - App wasn't getting focus in certain startup scenarios. Forced SetWindowForeground
  101. to succeed.
  102. </DESCRIPTION>
  103. </HISTORY>
  104. <!--
  105. The <EXE> tag identifies a specific executable that needs to be shimmed or patched, and
  106. specifies the shims or patches to apply to it. The <EXE> tag contains zero or more optional
  107. <MATCHING_FILE> tags, zero or more <DLL> tags and zero or more <PATCH> tags.
  108. The EXE tag has one required parameter, NAME, and three optional parameters, SIZE, CHECKSUM, and
  109. TIME. The <EXE> tag requires a matching </EXE> terminator.
  110. SIZE is the size of the executable in bytes
  111. CHECKSUM is a checksum calculated with an algorithm borrowed from the AppsHelp code. See
  112. dmunsil or markder for the code.
  113. TIME is a human-readable creation time, in UTC (GMT), in the form MM/DD/YYYY HH:MM:SS
  114. -->
  115. <EXE NAME="AUTORUN.EXE" SIZE="12345" CHECKSUM="0xDEADBEEF" TIME="01/01/2001 01:01:01">
  116. <!--
  117. The <MATCHING_FILE> tag allows for checking other files near the executable, to ensure
  118. a good match. The files are first checked relative to the executable's directory, and
  119. then in the current working directory, which is the directory that the parent process
  120. is in (if there is a parent process). For example, if the "SETUP.EXE" program on the CD-Rom
  121. root directory E:\ unpacks an installer into C:\WINNT\TEMP\, then executes the installer,
  122. the NESY matching system will check for matching files in (or relative to) both C:\WINNT\TEMP\
  123. and E:\.
  124. The matching file name can contain a relative path, but should not contain a drive designator,
  125. as the target machine may have different letters for the various drives.
  126. The <MATCHING_FILE> tag should be terminated with />
  127. -->
  128. <MATCHING_FILE NAME="..\WIN\MYMATCH.FOO" SIZE="2468" CHECKSUM="0xBEDEBEDE"/>
  129. <!--
  130. In the scope of an <EXE> tag, the <DLL> tag names a DLL that should be applied to
  131. this EXE. The shim dll should have already been declared above in the <LIBRARY>
  132. section. Optional <INCLUDE> and <EXCLUDE>
  133. tags can be inserted between the <DLL> and </DLL> tags.
  134. -->
  135. <DLL NAME="MyShim.dll">
  136. <!--
  137. The order of precedence for INCLUDE and EXCLUDE tags is in reverse of their
  138. appearance in the file. The shim system walks the list in reverse
  139. order and the first INCLUDE or EXCLUDE that matches on all provided attributes
  140. will take effect.
  141. For this reason, it is important to put INCLUDES and EXCLUDES ordered from the
  142. generic to the specific, as demonstrated below.
  143. -->
  144. <EXCLUDE MODULE="FOO.DLL"/>
  145. <INCLUDE MODULE="FOO.DLL"/>
  146. </DLL>
  147. </EXE>
  148. <EXE NAME="SETUP.EXE" SIZE="67890" CHECKSUM="0xFEEDBEAD" TIME="02/02/2002 02:02:02">
  149. <!--
  150. In the scope of an <EXE> tag, the <PATCH> tag names a patch file, which should have been
  151. declared above in the <LIBRARY> section. The <PATCH> tag should be terminated with />
  152. -->
  153. <PATCH NAME="MyPatch"/>
  154. <!--
  155. <INCLUDE> and <EXCLUDE> tags are not valid for <PATCH> tags, as the PATCH gets applied
  156. to the app once at load time, and can't be turned off and on.
  157. -->
  158. </EXE>
  159. </APP>
  160. </DATABASE>