jwapatchwiz.pas 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. {******************************************************************************}
  2. { }
  3. { MSI Patch Wizard API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: patchwiz.h, released August 2001. The original Pascal }
  9. { code is: PatchWiz.pas, released December 2001. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. // $Id: JwaPatchWiz.pas,v 1.12 2007/09/05 11:58:51 dezipaitor Exp $
  43. {$IFNDEF JWA_OMIT_SECTIONS}
  44. unit JwaPatchWiz;
  45. {$WEAKPACKAGEUNIT}
  46. {$ENDIF JWA_OMIT_SECTIONS}
  47. {$HPPEMIT ''}
  48. {$HPPEMIT '#include "PatchWiz.h"'}
  49. {$HPPEMIT ''}
  50. {$IFNDEF JWA_OMIT_SECTIONS}
  51. {$I jediapilib.inc}
  52. interface
  53. uses
  54. JwaWinType;
  55. {$ENDIF JWA_OMIT_SECTIONS}
  56. {$IFNDEF JWA_IMPLEMENTATIONSECTION}
  57. (* PATCHWIZ.H - public header file for PATCHWIZ.DLL *)
  58. (*
  59. ** UINT WINAPI UiCreatePatchPackage ( LPTSTR szPcpPath,
  60. ** LPTSTR szPatchPath, LPTSTR szLogPath, HWND hwndStatus,
  61. ** LPTSTR szTempFolder, BOOL fRemoveTempFolderIfPresent );
  62. **
  63. ** Arguments:
  64. ** szPcpPath - full absolute path to Windows Installer database
  65. ** (PCP file) that contains appropriate tables of input-data for
  66. ** Patch creation process such as Properties and TargetImages.
  67. ** szPatchPath - optional, full absolute path to Patching Package
  68. ** file (MSP file) to create and stuff with output. If this
  69. ** NULL or an empty string, the api will try to use
  70. ** Properties.Value where Properties.Name = PatchOutputPath
  71. ** from the PCP file.
  72. ** szLogPath - optional, full absolute path to text log file to
  73. ** append to. Caller should truncate file if wanted.
  74. ** hwndStatus - optional, window handle to display status text.
  75. ** More details to come later.
  76. ** szTempFolder - optional location to use for temp files.
  77. ** Default is %TEMP%\~pcw_tmp.tmp\.
  78. ** fRemoveTempFolderIfPresent - remove temp folder (and all its
  79. ** contents) if present. If FALSE and folder is present, api
  80. ** will fail.
  81. **
  82. ** Return Values: ERROR_SUCCESS, plus ERROR_PCW_* that follow.
  83. *)
  84. const
  85. ERROR_PCW_BASE = DWORD($C00E5101);
  86. {$EXTERNALSYM ERROR_PCW_BASE}
  87. ERROR_PCW_PCP_DOESNT_EXIST = ERROR_PCW_BASE + $00;
  88. {$EXTERNALSYM ERROR_PCW_PCP_DOESNT_EXIST}
  89. ERROR_PCW_PCP_BAD_FORMAT = ERROR_PCW_BASE + $01;
  90. {$EXTERNALSYM ERROR_PCW_PCP_BAD_FORMAT}
  91. ERROR_PCW_CANT_CREATE_TEMP_FOLDER = ERROR_PCW_BASE + $02;
  92. {$EXTERNALSYM ERROR_PCW_CANT_CREATE_TEMP_FOLDER}
  93. ERROR_PCW_MISSING_PATCH_PATH = ERROR_PCW_BASE + $03;
  94. {$EXTERNALSYM ERROR_PCW_MISSING_PATCH_PATH}
  95. ERROR_PCW_CANT_OVERWRITE_PATCH = ERROR_PCW_BASE + $04;
  96. {$EXTERNALSYM ERROR_PCW_CANT_OVERWRITE_PATCH}
  97. ERROR_PCW_CANT_CREATE_PATCH_FILE = ERROR_PCW_BASE + $05;
  98. {$EXTERNALSYM ERROR_PCW_CANT_CREATE_PATCH_FILE}
  99. ERROR_PCW_MISSING_PATCH_GUID = ERROR_PCW_BASE + $06;
  100. {$EXTERNALSYM ERROR_PCW_MISSING_PATCH_GUID}
  101. ERROR_PCW_BAD_PATCH_GUID = ERROR_PCW_BASE + $07;
  102. {$EXTERNALSYM ERROR_PCW_BAD_PATCH_GUID}
  103. ERROR_PCW_BAD_GUIDS_TO_REPLACE = ERROR_PCW_BASE + $08;
  104. {$EXTERNALSYM ERROR_PCW_BAD_GUIDS_TO_REPLACE}
  105. ERROR_PCW_BAD_TARGET_PRODUCT_CODE_LIST = ERROR_PCW_BASE + $09;
  106. {$EXTERNALSYM ERROR_PCW_BAD_TARGET_PRODUCT_CODE_LIST}
  107. ERROR_PCW_NO_UPGRADED_IMAGES_TO_PATCH = ERROR_PCW_BASE + $0a;
  108. {$EXTERNALSYM ERROR_PCW_NO_UPGRADED_IMAGES_TO_PATCH}
  109. //#define ERROR_PCW_BAD_API_PATCHING_OPTION_FLAGS (ERROR_PCW_BASE + 0x0b) -- obsolete
  110. ERROR_PCW_BAD_API_PATCHING_SYMBOL_FLAGS = ERROR_PCW_BASE + $0c;
  111. {$EXTERNALSYM ERROR_PCW_BAD_API_PATCHING_SYMBOL_FLAGS}
  112. ERROR_PCW_OODS_COPYING_MSI = ERROR_PCW_BASE + $0d;
  113. {$EXTERNALSYM ERROR_PCW_OODS_COPYING_MSI}
  114. ERROR_PCW_UPGRADED_IMAGE_NAME_TOO_LONG = ERROR_PCW_BASE + $0e;
  115. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_NAME_TOO_LONG}
  116. ERROR_PCW_BAD_UPGRADED_IMAGE_NAME = ERROR_PCW_BASE + $0f;
  117. {$EXTERNALSYM ERROR_PCW_BAD_UPGRADED_IMAGE_NAME}
  118. ERROR_PCW_DUP_UPGRADED_IMAGE_NAME = ERROR_PCW_BASE + $10;
  119. {$EXTERNALSYM ERROR_PCW_DUP_UPGRADED_IMAGE_NAME}
  120. ERROR_PCW_UPGRADED_IMAGE_PATH_TOO_LONG = ERROR_PCW_BASE + $11;
  121. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_PATH_TOO_LONG}
  122. ERROR_PCW_UPGRADED_IMAGE_PATH_EMPTY = ERROR_PCW_BASE + $12;
  123. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_PATH_EMPTY}
  124. ERROR_PCW_UPGRADED_IMAGE_PATH_NOT_EXIST = ERROR_PCW_BASE + $13;
  125. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_PATH_NOT_EXIST}
  126. ERROR_PCW_UPGRADED_IMAGE_PATH_NOT_MSI = ERROR_PCW_BASE + $14;
  127. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_PATH_NOT_MSI}
  128. ERROR_PCW_UPGRADED_IMAGE_COMPRESSED = ERROR_PCW_BASE + $15;
  129. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_COMPRESSED}
  130. ERROR_PCW_TARGET_IMAGE_NAME_TOO_LONG = ERROR_PCW_BASE + $16;
  131. {$EXTERNALSYM ERROR_PCW_TARGET_IMAGE_NAME_TOO_LONG}
  132. ERROR_PCW_BAD_TARGET_IMAGE_NAME = ERROR_PCW_BASE + $17;
  133. {$EXTERNALSYM ERROR_PCW_BAD_TARGET_IMAGE_NAME}
  134. ERROR_PCW_DUP_TARGET_IMAGE_NAME = ERROR_PCW_BASE + $18;
  135. {$EXTERNALSYM ERROR_PCW_DUP_TARGET_IMAGE_NAME}
  136. ERROR_PCW_TARGET_IMAGE_PATH_TOO_LONG = ERROR_PCW_BASE + $19;
  137. {$EXTERNALSYM ERROR_PCW_TARGET_IMAGE_PATH_TOO_LONG}
  138. ERROR_PCW_TARGET_IMAGE_PATH_EMPTY = ERROR_PCW_BASE + $1a;
  139. {$EXTERNALSYM ERROR_PCW_TARGET_IMAGE_PATH_EMPTY}
  140. ERROR_PCW_TARGET_IMAGE_PATH_NOT_EXIST = ERROR_PCW_BASE + $1b;
  141. {$EXTERNALSYM ERROR_PCW_TARGET_IMAGE_PATH_NOT_EXIST}
  142. ERROR_PCW_TARGET_IMAGE_PATH_NOT_MSI = ERROR_PCW_BASE + $1c;
  143. {$EXTERNALSYM ERROR_PCW_TARGET_IMAGE_PATH_NOT_MSI}
  144. ERROR_PCW_TARGET_IMAGE_COMPRESSED = ERROR_PCW_BASE + $1d;
  145. {$EXTERNALSYM ERROR_PCW_TARGET_IMAGE_COMPRESSED}
  146. ERROR_PCW_TARGET_BAD_PROD_VALIDATE = ERROR_PCW_BASE + $1e;
  147. {$EXTERNALSYM ERROR_PCW_TARGET_BAD_PROD_VALIDATE}
  148. ERROR_PCW_TARGET_BAD_PROD_CODE_VAL = ERROR_PCW_BASE + $1f;
  149. {$EXTERNALSYM ERROR_PCW_TARGET_BAD_PROD_CODE_VAL}
  150. ERROR_PCW_UPGRADED_MISSING_SRC_FILES = ERROR_PCW_BASE + $20;
  151. {$EXTERNALSYM ERROR_PCW_UPGRADED_MISSING_SRC_FILES}
  152. ERROR_PCW_TARGET_MISSING_SRC_FILES = ERROR_PCW_BASE + $21;
  153. {$EXTERNALSYM ERROR_PCW_TARGET_MISSING_SRC_FILES}
  154. ERROR_PCW_IMAGE_FAMILY_NAME_TOO_LONG = ERROR_PCW_BASE + $22;
  155. {$EXTERNALSYM ERROR_PCW_IMAGE_FAMILY_NAME_TOO_LONG}
  156. ERROR_PCW_BAD_IMAGE_FAMILY_NAME = ERROR_PCW_BASE + $23;
  157. {$EXTERNALSYM ERROR_PCW_BAD_IMAGE_FAMILY_NAME}
  158. ERROR_PCW_DUP_IMAGE_FAMILY_NAME = ERROR_PCW_BASE + $24;
  159. {$EXTERNALSYM ERROR_PCW_DUP_IMAGE_FAMILY_NAME}
  160. ERROR_PCW_BAD_IMAGE_FAMILY_SRC_PROP = ERROR_PCW_BASE + $25;
  161. {$EXTERNALSYM ERROR_PCW_BAD_IMAGE_FAMILY_SRC_PROP}
  162. ERROR_PCW_UFILEDATA_LONG_FILE_TABLE_KEY = ERROR_PCW_BASE + $26;
  163. {$EXTERNALSYM ERROR_PCW_UFILEDATA_LONG_FILE_TABLE_KEY}
  164. ERROR_PCW_UFILEDATA_BLANK_FILE_TABLE_KEY = ERROR_PCW_BASE + $27;
  165. {$EXTERNALSYM ERROR_PCW_UFILEDATA_BLANK_FILE_TABLE_KEY}
  166. ERROR_PCW_UFILEDATA_MISSING_FILE_TABLE_KEY = ERROR_PCW_BASE + $28;
  167. {$EXTERNALSYM ERROR_PCW_UFILEDATA_MISSING_FILE_TABLE_KEY}
  168. ERROR_PCW_EXTFILE_LONG_FILE_TABLE_KEY = ERROR_PCW_BASE + $29;
  169. {$EXTERNALSYM ERROR_PCW_EXTFILE_LONG_FILE_TABLE_KEY}
  170. ERROR_PCW_EXTFILE_BLANK_FILE_TABLE_KEY = ERROR_PCW_BASE + $2a;
  171. {$EXTERNALSYM ERROR_PCW_EXTFILE_BLANK_FILE_TABLE_KEY}
  172. ERROR_PCW_EXTFILE_BAD_FAMILY_FIELD = ERROR_PCW_BASE + $2b;
  173. {$EXTERNALSYM ERROR_PCW_EXTFILE_BAD_FAMILY_FIELD}
  174. ERROR_PCW_EXTFILE_LONG_PATH_TO_FILE = ERROR_PCW_BASE + $2c;
  175. {$EXTERNALSYM ERROR_PCW_EXTFILE_LONG_PATH_TO_FILE}
  176. ERROR_PCW_EXTFILE_BLANK_PATH_TO_FILE = ERROR_PCW_BASE + $2d;
  177. {$EXTERNALSYM ERROR_PCW_EXTFILE_BLANK_PATH_TO_FILE}
  178. ERROR_PCW_EXTFILE_MISSING_FILE = ERROR_PCW_BASE + $2e;
  179. {$EXTERNALSYM ERROR_PCW_EXTFILE_MISSING_FILE}
  180. //#define ERROR_PCW_FILERANGE_LONG_FILE_TABLE_KEY (ERROR_PCW_BASE + 0x2f) -- obsolete
  181. //#define ERROR_PCW_FILERANGE_BLANK_FILE_TABLE_KEY (ERROR_PCW_BASE + 0x30) -- obsolete
  182. //#define ERROR_PCW_FILERANGE_MISSING_FILE_TABLE_KEY (ERROR_PCW_BASE + 0x31) -- obsolete
  183. //#define ERROR_PCW_FILERANGE_LONG_PATH_TO_FILE (ERROR_PCW_BASE + 0x32) -- obsolete
  184. //#define ERROR_PCW_FILERANGE_MISSING_FILE (ERROR_PCW_BASE + 0x33) -- obsolete
  185. //#define ERROR_PCW_FILERANGE_INVALID_OFFSET (ERROR_PCW_BASE + 0x34) -- obsolete
  186. //#define ERROR_PCW_FILERANGE_INVALID_SIZE (ERROR_PCW_BASE + 0x35) -- obsolete
  187. //#define ERROR_PCW_FILERANGE_INVALID_RETAIN (ERROR_PCW_BASE + 0x36) -- obsolete
  188. //#define ERROR_PCW_BAD_MEDIA_SRC_PROP_NAME (ERROR_PCW_BASE + 0x37) -- obsolete
  189. //#define ERROR_PCW_BAD_MEDIA_DISK_ID (ERROR_PCW_BASE + 0x38) -- obsolete
  190. ERROR_PCW_BAD_FILE_SEQUENCE_START = ERROR_PCW_BASE + $39;
  191. {$EXTERNALSYM ERROR_PCW_BAD_FILE_SEQUENCE_START}
  192. ERROR_PCW_CANT_COPY_FILE_TO_TEMP_FOLDER = ERROR_PCW_BASE + $3a;
  193. {$EXTERNALSYM ERROR_PCW_CANT_COPY_FILE_TO_TEMP_FOLDER}
  194. ERROR_PCW_CANT_CREATE_ONE_PATCH_FILE = ERROR_PCW_BASE + $3b;
  195. {$EXTERNALSYM ERROR_PCW_CANT_CREATE_ONE_PATCH_FILE}
  196. ERROR_PCW_BAD_IMAGE_FAMILY_DISKID = ERROR_PCW_BASE + $3c;
  197. {$EXTERNALSYM ERROR_PCW_BAD_IMAGE_FAMILY_DISKID}
  198. ERROR_PCW_BAD_IMAGE_FAMILY_FILESEQSTART = ERROR_PCW_BASE + $3d;
  199. {$EXTERNALSYM ERROR_PCW_BAD_IMAGE_FAMILY_FILESEQSTART}
  200. ERROR_PCW_BAD_UPGRADED_IMAGE_FAMILY = ERROR_PCW_BASE + $3e;
  201. {$EXTERNALSYM ERROR_PCW_BAD_UPGRADED_IMAGE_FAMILY}
  202. ERROR_PCW_BAD_TARGET_IMAGE_UPGRADED = ERROR_PCW_BASE + $3f;
  203. {$EXTERNALSYM ERROR_PCW_BAD_TARGET_IMAGE_UPGRADED}
  204. ERROR_PCW_DUP_TARGET_IMAGE_PACKCODE = ERROR_PCW_BASE + $40;
  205. {$EXTERNALSYM ERROR_PCW_DUP_TARGET_IMAGE_PACKCODE}
  206. ERROR_PCW_UFILEDATA_BAD_UPGRADED_FIELD = ERROR_PCW_BASE + $41;
  207. {$EXTERNALSYM ERROR_PCW_UFILEDATA_BAD_UPGRADED_FIELD}
  208. ERROR_PCW_MISMATCHED_PRODUCT_CODES = ERROR_PCW_BASE + $42;
  209. {$EXTERNALSYM ERROR_PCW_MISMATCHED_PRODUCT_CODES}
  210. ERROR_PCW_MISMATCHED_PRODUCT_VERSIONS = ERROR_PCW_BASE + $43;
  211. {$EXTERNALSYM ERROR_PCW_MISMATCHED_PRODUCT_VERSIONS}
  212. ERROR_PCW_CANNOT_WRITE_DDF = ERROR_PCW_BASE + $44;
  213. {$EXTERNALSYM ERROR_PCW_CANNOT_WRITE_DDF}
  214. ERROR_PCW_CANNOT_RUN_MAKECAB = ERROR_PCW_BASE + $45;
  215. {$EXTERNALSYM ERROR_PCW_CANNOT_RUN_MAKECAB}
  216. //#define ERROR_PCW_CANNOT_CREATE_STORAGE (ERROR_PCW_BASE + 0x46) -- obsolete
  217. //#define ERROR_PCW_CANNOT_CREATE_STREAM (ERROR_PCW_BASE + 0x47) -- obsolete
  218. //#define ERROR_PCW_CANNOT_WRITE_STREAM (ERROR_PCW_BASE + 0x48) -- obsolete
  219. //#define ERROR_PCW_CANNOT_READ_CABINET (ERROR_PCW_BASE + 0x49) -- obsolete
  220. ERROR_PCW_WRITE_SUMMARY_PROPERTIES = ERROR_PCW_BASE + $4a;
  221. {$EXTERNALSYM ERROR_PCW_WRITE_SUMMARY_PROPERTIES}
  222. ERROR_PCW_TFILEDATA_LONG_FILE_TABLE_KEY = ERROR_PCW_BASE + $4b;
  223. {$EXTERNALSYM ERROR_PCW_TFILEDATA_LONG_FILE_TABLE_KEY}
  224. ERROR_PCW_TFILEDATA_BLANK_FILE_TABLE_KEY = ERROR_PCW_BASE + $4c;
  225. {$EXTERNALSYM ERROR_PCW_TFILEDATA_BLANK_FILE_TABLE_KEY}
  226. ERROR_PCW_TFILEDATA_MISSING_FILE_TABLE_KEY = ERROR_PCW_BASE + $4d;
  227. {$EXTERNALSYM ERROR_PCW_TFILEDATA_MISSING_FILE_TABLE_KEY}
  228. ERROR_PCW_TFILEDATA_BAD_TARGET_FIELD = ERROR_PCW_BASE + $4e;
  229. {$EXTERNALSYM ERROR_PCW_TFILEDATA_BAD_TARGET_FIELD}
  230. ERROR_PCW_UPGRADED_IMAGE_PATCH_PATH_TOO_LONG = ERROR_PCW_BASE + $4f;
  231. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_PATCH_PATH_TOO_LONG}
  232. ERROR_PCW_UPGRADED_IMAGE_PATCH_PATH_NOT_EXIST = ERROR_PCW_BASE + $50;
  233. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_PATCH_PATH_NOT_EXIST}
  234. ERROR_PCW_UPGRADED_IMAGE_PATCH_PATH_NOT_MSI = ERROR_PCW_BASE + $51;
  235. {$EXTERNALSYM ERROR_PCW_UPGRADED_IMAGE_PATCH_PATH_NOT_MSI}
  236. ERROR_PCW_DUP_UPGRADED_IMAGE_PACKCODE = ERROR_PCW_BASE + $52;
  237. {$EXTERNALSYM ERROR_PCW_DUP_UPGRADED_IMAGE_PACKCODE}
  238. ERROR_PCW_UFILEIGNORE_BAD_UPGRADED_FIELD = ERROR_PCW_BASE + $53;
  239. {$EXTERNALSYM ERROR_PCW_UFILEIGNORE_BAD_UPGRADED_FIELD}
  240. ERROR_PCW_UFILEIGNORE_LONG_FILE_TABLE_KEY = ERROR_PCW_BASE + $54;
  241. {$EXTERNALSYM ERROR_PCW_UFILEIGNORE_LONG_FILE_TABLE_KEY}
  242. ERROR_PCW_UFILEIGNORE_BLANK_FILE_TABLE_KEY = ERROR_PCW_BASE + $55;
  243. {$EXTERNALSYM ERROR_PCW_UFILEIGNORE_BLANK_FILE_TABLE_KEY}
  244. ERROR_PCW_UFILEIGNORE_BAD_FILE_TABLE_KEY = ERROR_PCW_BASE + $56;
  245. {$EXTERNALSYM ERROR_PCW_UFILEIGNORE_BAD_FILE_TABLE_KEY}
  246. ERROR_PCW_FAMILY_RANGE_NAME_TOO_LONG = ERROR_PCW_BASE + $57;
  247. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_NAME_TOO_LONG}
  248. ERROR_PCW_BAD_FAMILY_RANGE_NAME = ERROR_PCW_BASE + $58;
  249. {$EXTERNALSYM ERROR_PCW_BAD_FAMILY_RANGE_NAME}
  250. ERROR_PCW_FAMILY_RANGE_LONG_FILE_TABLE_KEY = ERROR_PCW_BASE + $59;
  251. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_LONG_FILE_TABLE_KEY}
  252. ERROR_PCW_FAMILY_RANGE_BLANK_FILE_TABLE_KEY = ERROR_PCW_BASE + $5a;
  253. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_BLANK_FILE_TABLE_KEY}
  254. ERROR_PCW_FAMILY_RANGE_LONG_RETAIN_OFFSETS = ERROR_PCW_BASE + $5b;
  255. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_LONG_RETAIN_OFFSETS}
  256. ERROR_PCW_FAMILY_RANGE_BLANK_RETAIN_OFFSETS = ERROR_PCW_BASE + $5c;
  257. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_BLANK_RETAIN_OFFSETS}
  258. ERROR_PCW_FAMILY_RANGE_BAD_RETAIN_OFFSETS = ERROR_PCW_BASE + $5d;
  259. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_BAD_RETAIN_OFFSETS}
  260. ERROR_PCW_FAMILY_RANGE_LONG_RETAIN_LENGTHS = ERROR_PCW_BASE + $5e;
  261. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_LONG_RETAIN_LENGTHS}
  262. ERROR_PCW_FAMILY_RANGE_BLANK_RETAIN_LENGTHS = ERROR_PCW_BASE + $5f;
  263. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_BLANK_RETAIN_LENGTHS}
  264. ERROR_PCW_FAMILY_RANGE_BAD_RETAIN_LENGTHS = ERROR_PCW_BASE + $60;
  265. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_BAD_RETAIN_LENGTHS}
  266. ERROR_PCW_FAMILY_RANGE_COUNT_MISMATCH = ERROR_PCW_BASE + $61;
  267. {$EXTERNALSYM ERROR_PCW_FAMILY_RANGE_COUNT_MISMATCH}
  268. ERROR_PCW_EXTFILE_LONG_IGNORE_OFFSETS = ERROR_PCW_BASE + $62;
  269. {$EXTERNALSYM ERROR_PCW_EXTFILE_LONG_IGNORE_OFFSETS}
  270. ERROR_PCW_EXTFILE_BAD_IGNORE_OFFSETS = ERROR_PCW_BASE + $63;
  271. {$EXTERNALSYM ERROR_PCW_EXTFILE_BAD_IGNORE_OFFSETS}
  272. ERROR_PCW_EXTFILE_LONG_IGNORE_LENGTHS = ERROR_PCW_BASE + $64;
  273. {$EXTERNALSYM ERROR_PCW_EXTFILE_LONG_IGNORE_LENGTHS}
  274. ERROR_PCW_EXTFILE_BAD_IGNORE_LENGTHS = ERROR_PCW_BASE + $65;
  275. {$EXTERNALSYM ERROR_PCW_EXTFILE_BAD_IGNORE_LENGTHS}
  276. ERROR_PCW_EXTFILE_IGNORE_COUNT_MISMATCH = ERROR_PCW_BASE + $66;
  277. {$EXTERNALSYM ERROR_PCW_EXTFILE_IGNORE_COUNT_MISMATCH}
  278. ERROR_PCW_EXTFILE_LONG_RETAIN_OFFSETS = ERROR_PCW_BASE + $67;
  279. {$EXTERNALSYM ERROR_PCW_EXTFILE_LONG_RETAIN_OFFSETS}
  280. ERROR_PCW_EXTFILE_BAD_RETAIN_OFFSETS = ERROR_PCW_BASE + $68;
  281. {$EXTERNALSYM ERROR_PCW_EXTFILE_BAD_RETAIN_OFFSETS}
  282. //#define ERROR_PCW_EXTFILE_RETAIN_COUNT_MISMATCH (ERROR_PCW_BASE + 0x69) -- obsolete
  283. ERROR_PCW_TFILEDATA_LONG_IGNORE_OFFSETS = ERROR_PCW_BASE + $6a;
  284. {$EXTERNALSYM ERROR_PCW_TFILEDATA_LONG_IGNORE_OFFSETS}
  285. ERROR_PCW_TFILEDATA_BAD_IGNORE_OFFSETS = ERROR_PCW_BASE + $6b;
  286. {$EXTERNALSYM ERROR_PCW_TFILEDATA_BAD_IGNORE_OFFSETS}
  287. ERROR_PCW_TFILEDATA_LONG_IGNORE_LENGTHS = ERROR_PCW_BASE + $6c;
  288. {$EXTERNALSYM ERROR_PCW_TFILEDATA_LONG_IGNORE_LENGTHS}
  289. ERROR_PCW_TFILEDATA_BAD_IGNORE_LENGTHS = ERROR_PCW_BASE + $6d;
  290. {$EXTERNALSYM ERROR_PCW_TFILEDATA_BAD_IGNORE_LENGTHS}
  291. ERROR_PCW_TFILEDATA_IGNORE_COUNT_MISMATCH = ERROR_PCW_BASE + $6e;
  292. {$EXTERNALSYM ERROR_PCW_TFILEDATA_IGNORE_COUNT_MISMATCH}
  293. ERROR_PCW_TFILEDATA_LONG_RETAIN_OFFSETS = ERROR_PCW_BASE + $6f;
  294. {$EXTERNALSYM ERROR_PCW_TFILEDATA_LONG_RETAIN_OFFSETS}
  295. ERROR_PCW_TFILEDATA_BAD_RETAIN_OFFSETS = ERROR_PCW_BASE + $70;
  296. {$EXTERNALSYM ERROR_PCW_TFILEDATA_BAD_RETAIN_OFFSETS}
  297. //#define ERROR_PCW_TFILEDATA_RETAIN_COUNT_MISMATCH (ERROR_PCW_BASE + 0x71) -- obsolete
  298. ERROR_PCW_CANT_GENERATE_TRANSFORM = ERROR_PCW_BASE + $72;
  299. {$EXTERNALSYM ERROR_PCW_CANT_GENERATE_TRANSFORM}
  300. ERROR_PCW_CANT_CREATE_SUMMARY_INFO = ERROR_PCW_BASE + $73;
  301. {$EXTERNALSYM ERROR_PCW_CANT_CREATE_SUMMARY_INFO}
  302. ERROR_PCW_CANT_GENERATE_TRANSFORM_POUND = ERROR_PCW_BASE + $74;
  303. {$EXTERNALSYM ERROR_PCW_CANT_GENERATE_TRANSFORM_POUND}
  304. ERROR_PCW_CANT_CREATE_SUMMARY_INFO_POUND = ERROR_PCW_BASE + $75;
  305. {$EXTERNALSYM ERROR_PCW_CANT_CREATE_SUMMARY_INFO_POUND}
  306. ERROR_PCW_BAD_UPGRADED_IMAGE_PRODUCT_CODE = ERROR_PCW_BASE + $76;
  307. {$EXTERNALSYM ERROR_PCW_BAD_UPGRADED_IMAGE_PRODUCT_CODE}
  308. ERROR_PCW_BAD_UPGRADED_IMAGE_PRODUCT_VERSION = ERROR_PCW_BASE + $77;
  309. {$EXTERNALSYM ERROR_PCW_BAD_UPGRADED_IMAGE_PRODUCT_VERSION}
  310. ERROR_PCW_BAD_UPGRADED_IMAGE_UPGRADE_CODE = ERROR_PCW_BASE + $78;
  311. {$EXTERNALSYM ERROR_PCW_BAD_UPGRADED_IMAGE_UPGRADE_CODE}
  312. ERROR_PCW_BAD_TARGET_IMAGE_PRODUCT_CODE = ERROR_PCW_BASE + $79;
  313. {$EXTERNALSYM ERROR_PCW_BAD_TARGET_IMAGE_PRODUCT_CODE}
  314. ERROR_PCW_BAD_TARGET_IMAGE_PRODUCT_VERSION = ERROR_PCW_BASE + $7a;
  315. {$EXTERNALSYM ERROR_PCW_BAD_TARGET_IMAGE_PRODUCT_VERSION}
  316. ERROR_PCW_BAD_TARGET_IMAGE_UPGRADE_CODE = ERROR_PCW_BASE + $7b;
  317. {$EXTERNALSYM ERROR_PCW_BAD_TARGET_IMAGE_UPGRADE_CODE}
  318. ERROR_PCW_MATCHED_PRODUCT_VERSIONS = ERROR_PCW_BASE + $7c;
  319. {$EXTERNALSYM ERROR_PCW_MATCHED_PRODUCT_VERSIONS}
  320. ERROR_PCW_NEXTxd = ERROR_PCW_BASE + $7d;
  321. {$EXTERNALSYM ERROR_PCW_NEXTxd}
  322. ERROR_PCW_NEXTxe = ERROR_PCW_BASE + $7e;
  323. {$EXTERNALSYM ERROR_PCW_NEXTxe}
  324. ERROR_PCW_NEXTxf = ERROR_PCW_BASE + $7f;
  325. {$EXTERNALSYM ERROR_PCW_NEXTxf}
  326. (*
  327. #define ERROR_PCW_NEXTx0 (ERROR_PCW_BASE + 0x80)
  328. #define ERROR_PCW_NEXTx1 (ERROR_PCW_BASE + 0x81)
  329. #define ERROR_PCW_NEXTx2 (ERROR_PCW_BASE + 0x82)
  330. #define ERROR_PCW_NEXTx3 (ERROR_PCW_BASE + 0x83)
  331. #define ERROR_PCW_NEXTx4 (ERROR_PCW_BASE + 0x84)
  332. #define ERROR_PCW_NEXTx5 (ERROR_PCW_BASE + 0x85)
  333. #define ERROR_PCW_NEXTx6 (ERROR_PCW_BASE + 0x86)
  334. #define ERROR_PCW_NEXTx7 (ERROR_PCW_BASE + 0x87)
  335. #define ERROR_PCW_NEXTx8 (ERROR_PCW_BASE + 0x88)
  336. #define ERROR_PCW_NEXTx9 (ERROR_PCW_BASE + 0x89)
  337. #define ERROR_PCW_NEXTxa (ERROR_PCW_BASE + 0x8a)
  338. #define ERROR_PCW_NEXTxb (ERROR_PCW_BASE + 0x8b)
  339. #define ERROR_PCW_NEXTxc (ERROR_PCW_BASE + 0x8c)
  340. #define ERROR_PCW_NEXTxd (ERROR_PCW_BASE + 0x8d)
  341. #define ERROR_PCW_NEXTxe (ERROR_PCW_BASE + 0x8e)
  342. #define ERROR_PCW_NEXTxf (ERROR_PCW_BASE + 0x8f)
  343. *)
  344. // Control IDs for hwndStatus child Text controls; title is required
  345. IDC_STATUS_TITLE = $1cf0;
  346. {$EXTERNALSYM IDC_STATUS_TITLE}
  347. IDC_STATUS_DATA1 = $1cf1;
  348. {$EXTERNALSYM IDC_STATUS_DATA1}
  349. IDC_STATUS_DATA2 = $1cf2;
  350. {$EXTERNALSYM IDC_STATUS_DATA2}
  351. function UiCreatePatchPackageA(szaPcpPath, szaPatchPath, szaLogPath: LPSTR; hwndStatus: HWND; szaTempFolder: LPSTR; fRemoveTempFolderIfPresent: BOOL): UINT; stdcall;
  352. {$EXTERNALSYM UiCreatePatchPackageA}
  353. function UiCreatePatchPackageW(szwPcpPath, szwPatchPath, szwLogPath: LPWSTR; hwndStatus: HWND; szwTempFolder: LPWSTR; fRemoveTempFolderIfPresent: BOOL): UINT; stdcall;
  354. {$EXTERNALSYM UiCreatePatchPackageW}
  355. function UiCreatePatchPackage(szwPcpPath, szwPatchPath, szwLogPath: LPTSTR; hwndStatus: HWND; szwTempFolder: LPTSTR; fRemoveTempFolderIfPresent: BOOL): UINT; stdcall;
  356. {$EXTERNALSYM UiCreatePatchPackage}
  357. {$ENDIF JWA_IMPLEMENTATIONSECTION}
  358. {$IFNDEF JWA_OMIT_SECTIONS}
  359. implementation
  360. //uses ...
  361. {$ENDIF JWA_OMIT_SECTIONS}
  362. {$IFNDEF JWA_INTERFACESECTION}
  363. {$IFNDEF JWA_INCLUDEMODE}
  364. const
  365. patchwiz = 'patchwiz.dll'; // mvb Installed in Samples\SysMgmt\Msi\Patching
  366. {$IFDEF UNICODE}
  367. AWSuffix = 'W';
  368. {$ELSE}
  369. AWSuffix = 'A';
  370. {$ENDIF UNICODE}
  371. {$ENDIF JWA_INCLUDEMODE}
  372. {$IFDEF DYNAMIC_LINK}
  373. var
  374. _UiCreatePatchPackageA: Pointer;
  375. function UiCreatePatchPackageA;
  376. begin
  377. GetProcedureAddress(_UiCreatePatchPackageA, patchwiz, 'UiCreatePatchPackageA');
  378. asm
  379. MOV ESP, EBP
  380. POP EBP
  381. JMP [_UiCreatePatchPackageA]
  382. end;
  383. end;
  384. var
  385. _UiCreatePatchPackageW: Pointer;
  386. function UiCreatePatchPackageW;
  387. begin
  388. GetProcedureAddress(_UiCreatePatchPackageW, patchwiz, 'UiCreatePatchPackageW');
  389. asm
  390. MOV ESP, EBP
  391. POP EBP
  392. JMP [_UiCreatePatchPackageW]
  393. end;
  394. end;
  395. var
  396. _UiCreatePatchPackage: Pointer;
  397. function UiCreatePatchPackage;
  398. begin
  399. GetProcedureAddress(_UiCreatePatchPackage, patchwiz, 'UiCreatePatchPackage' + AWSuffix);
  400. asm
  401. MOV ESP, EBP
  402. POP EBP
  403. JMP [_UiCreatePatchPackage]
  404. end;
  405. end;
  406. {$ELSE}
  407. function UiCreatePatchPackageA; external patchwiz name 'UiCreatePatchPackageA';
  408. function UiCreatePatchPackageW; external patchwiz name 'UiCreatePatchPackageW';
  409. function UiCreatePatchPackage; external patchwiz name 'UiCreatePatchPackage' + AWSuffix;
  410. {$ENDIF DYNAMIC_LINK}
  411. {$ENDIF JWA_INTERFACESECTION}
  412. {$IFNDEF JWA_OMIT_SECTIONS}
  413. end.
  414. {$ENDIF JWA_OMIT_SECTIONS}