~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/dlls/msi/tests/install.c

Version: ~ [ wine-1.1.40 ] ~ [ wine-1.1.39 ] ~ [ wine-1.1.38 ] ~ [ wine-1.1.37 ] ~ [ wine-1.1.36 ] ~ [ wine-1.1.35 ] ~ [ wine-1.1.34 ] ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * Copyright (C) 2006 James Hawkins
  3  *
  4  * A test program for installing MSI products.
  5  *
  6  * This library is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU Lesser General Public
  8  * License as published by the Free Software Foundation; either
  9  * version 2.1 of the License, or (at your option) any later version.
 10  *
 11  * This library is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14  * Lesser General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU Lesser General Public
 17  * License along with this library; if not, write to the Free Software
 18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 19  */
 20 
 21 #define _WIN32_MSI 300
 22 #define COBJMACROS
 23 
 24 #include <stdio.h>
 25 
 26 #include <windows.h>
 27 #include <msiquery.h>
 28 #include <msidefs.h>
 29 #include <msi.h>
 30 #include <fci.h>
 31 #include <objidl.h>
 32 #include <srrestoreptapi.h>
 33 
 34 #include "wine/test.h"
 35 
 36 static UINT (WINAPI *pMsiQueryComponentStateA)
 37     (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE*);
 38 static UINT (WINAPI *pMsiSetExternalUIRecord)
 39     (INSTALLUI_HANDLER_RECORD, DWORD, LPVOID, PINSTALLUI_HANDLER_RECORD);
 40 static UINT (WINAPI *pMsiSourceListEnumSourcesA)
 41     (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPSTR, LPDWORD);
 42 static UINT (WINAPI *pMsiSourceListGetInfoA)
 43     (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD);
 44 
 45 static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
 46 
 47 static HMODULE hsrclient = 0;
 48 static BOOL (WINAPI *pSRRemoveRestorePoint)(DWORD);
 49 static BOOL (WINAPI *pSRSetRestorePointA)(RESTOREPOINTINFOA*, STATEMGRSTATUS*);
 50 
 51 static BOOL on_win9x = FALSE;
 52 
 53 static const char *msifile = "msitest.msi";
 54 static const char *msifile2 = "winetest2.msi";
 55 static const char *mstfile = "winetest.mst";
 56 static CHAR CURR_DIR[MAX_PATH];
 57 static CHAR PROG_FILES_DIR[MAX_PATH];
 58 static CHAR COMMON_FILES_DIR[MAX_PATH];
 59 
 60 /* msi database data */
 61 
 62 static const CHAR component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
 63                                     "s72\tS38\ts72\ti2\tS255\tS72\n"
 64                                     "Component\tComponent\n"
 65                                     "Five\t{8CC92E9D-14B2-4CA4-B2AA-B11D02078087}\tNEWDIR\t2\t\tfive.txt\n"
 66                                     "Four\t{FD37B4EA-7209-45C0-8917-535F35A2F080}\tCABOUTDIR\t2\t\tfour.txt\n"
 67                                     "One\t{783B242E-E185-4A56-AF86-C09815EC053C}\tMSITESTDIR\t2\tNOT REINSTALL\tone.txt\n"
 68                                     "Three\t{010B6ADD-B27D-4EDD-9B3D-34C4F7D61684}\tCHANGEDDIR\t2\t\tthree.txt\n"
 69                                     "Two\t{BF03D1A6-20DA-4A65-82F3-6CAC995915CE}\tFIRSTDIR\t2\t\ttwo.txt\n"
 70                                     "dangler\t{6091DF25-EF96-45F1-B8E9-A9B1420C7A3C}\tTARGETDIR\t4\t\tregdata\n"
 71                                     "component\t\tMSITESTDIR\t\t1\tfile\n"
 72                                     "service_comp\t\tMSITESTDIR\t\t1\tservice_file";
 73 
 74 static const CHAR directory_dat[] = "Directory\tDirectory_Parent\tDefaultDir\n"
 75                                     "s72\tS72\tl255\n"
 76                                     "Directory\tDirectory\n"
 77                                     "CABOUTDIR\tMSITESTDIR\tcabout\n"
 78                                     "CHANGEDDIR\tMSITESTDIR\tchanged:second\n"
 79                                     "FIRSTDIR\tMSITESTDIR\tfirst\n"
 80                                     "MSITESTDIR\tProgramFilesFolder\tmsitest\n"
 81                                     "NEWDIR\tCABOUTDIR\tnew\n"
 82                                     "ProgramFilesFolder\tTARGETDIR\t.\n"
 83                                     "TARGETDIR\t\tSourceDir";
 84 
 85 static const CHAR feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
 86                                   "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
 87                                   "Feature\tFeature\n"
 88                                   "Five\t\tFive\tThe Five Feature\t5\t3\tNEWDIR\t\n"
 89                                   "Four\t\tFour\tThe Four Feature\t4\t3\tCABOUTDIR\t\n"
 90                                   "One\t\tOne\tThe One Feature\t1\t3\tMSITESTDIR\t\n"
 91                                   "Three\t\tThree\tThe Three Feature\t3\t3\tCHANGEDDIR\t\n"
 92                                   "Two\t\tTwo\tThe Two Feature\t2\t3\tFIRSTDIR\t\n"
 93                                   "feature\t\t\t\t2\t1\tTARGETDIR\t\n"
 94                                   "service_feature\t\t\t\t2\t1\tTARGETDIR\t";
 95 
 96 static const CHAR feature_comp_dat[] = "Feature_\tComponent_\n"
 97                                        "s38\ts72\n"
 98                                        "FeatureComponents\tFeature_\tComponent_\n"
 99                                        "Five\tFive\n"
100                                        "Four\tFour\n"
101                                        "One\tOne\n"
102                                        "Three\tThree\n"
103                                        "Two\tTwo\n"
104                                        "feature\tcomponent\n"
105                                        "service_feature\tservice_comp\n";
106 
107 static const CHAR file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
108                                "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
109                                "File\tFile\n"
110                                "five.txt\tFive\tfive.txt\t1000\t\t\t16384\t5\n"
111                                "four.txt\tFour\tfour.txt\t1000\t\t\t16384\t4\n"
112                                "one.txt\tOne\tone.txt\t1000\t\t\t\t1\n"
113                                "three.txt\tThree\tthree.txt\t1000\t\t\t\t3\n"
114                                "two.txt\tTwo\ttwo.txt\t1000\t\t\t\t2\n"
115                                "file\tcomponent\tfilename\t100\t\t\t8192\t1\n"
116                                "service_file\tservice_comp\tservice.exe\t100\t\t\t8192\t1";
117 
118 static const CHAR install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
119                                            "s72\tS255\tI2\n"
120                                            "InstallExecuteSequence\tAction\n"
121                                            "AllocateRegistrySpace\tNOT Installed\t1550\n"
122                                            "CostFinalize\t\t1000\n"
123                                            "CostInitialize\t\t800\n"
124                                            "FileCost\t\t900\n"
125                                            "ResolveSource\t\t950\n"
126                                            "MoveFiles\t\t1700\n"
127                                            "InstallFiles\t\t4000\n"
128                                            "DuplicateFiles\t\t4500\n"
129                                            "WriteEnvironmentStrings\t\t4550\n"
130                                            "CreateShortcuts\t\t4600\n"
131                                            "InstallServices\t\t5000\n"
132                                            "InstallFinalize\t\t6600\n"
133                                            "InstallInitialize\t\t1500\n"
134                                            "InstallValidate\t\t1400\n"
135                                            "LaunchConditions\t\t100\n"
136                                            "WriteRegistryValues\tSourceDir And SOURCEDIR\t5000";
137 
138 static const CHAR media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
139                                 "i2\ti4\tL64\tS255\tS32\tS72\n"
140                                 "Media\tDiskId\n"
141                                 "1\t3\t\t\tDISK1\t\n"
142                                 "2\t5\t\tmsitest.cab\tDISK2\t\n";
143 
144 static const CHAR property_dat[] = "Property\tValue\n"
145                                    "s72\tl0\n"
146                                    "Property\tProperty\n"
147                                    "DefaultUIFont\tDlgFont8\n"
148                                    "HASUIRUN\t\n"
149                                    "INSTALLLEVEL\t3\n"
150                                    "InstallMode\tTypical\n"
151                                    "Manufacturer\tWine\n"
152                                    "PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
153                                    "ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
154                                    "ProductID\tnone\n"
155                                    "ProductLanguage\t1033\n"
156                                    "ProductName\tMSITEST\n"
157                                    "ProductVersion\t1.1.1\n"
158                                    "PROMPTROLLBACKCOST\tP\n"
159                                    "Setup\tSetup\n"
160                                    "UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
161                                    "AdminProperties\tPOSTADMIN\n"
162                                    "ROOTDRIVE\tC:\\\n"
163                                    "SERVNAME\tTestService\n"
164                                    "SERVDISP\tTestServiceDisp\n";
165 
166 static const CHAR aup_property_dat[] = "Property\tValue\n"
167                                        "s72\tl0\n"
168                                        "Property\tProperty\n"
169                                        "DefaultUIFont\tDlgFont8\n"
170                                        "HASUIRUN\t\n"
171                                        "ALLUSERS\t1\n"
172                                        "INSTALLLEVEL\t3\n"
173                                        "InstallMode\tTypical\n"
174                                        "Manufacturer\tWine\n"
175                                        "PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
176                                        "ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
177                                        "ProductID\tnone\n"
178                                        "ProductLanguage\t1033\n"
179                                        "ProductName\tMSITEST\n"
180                                        "ProductVersion\t1.1.1\n"
181                                        "PROMPTROLLBACKCOST\tP\n"
182                                        "Setup\tSetup\n"
183                                        "UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
184                                        "AdminProperties\tPOSTADMIN\n"
185                                        "ROOTDRIVE\tC:\\\n"
186                                        "SERVNAME\tTestService\n"
187                                        "SERVDISP\tTestServiceDisp\n";
188 
189 static const CHAR aup2_property_dat[] = "Property\tValue\n"
190                                         "s72\tl0\n"
191                                         "Property\tProperty\n"
192                                         "DefaultUIFont\tDlgFont8\n"
193                                         "HASUIRUN\t\n"
194                                         "ALLUSERS\t2\n"
195                                         "INSTALLLEVEL\t3\n"
196                                         "InstallMode\tTypical\n"
197                                         "Manufacturer\tWine\n"
198                                         "PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
199                                         "ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
200                                         "ProductID\tnone\n"
201                                         "ProductLanguage\t1033\n"
202                                         "ProductName\tMSITEST\n"
203                                         "ProductVersion\t1.1.1\n"
204                                         "PROMPTROLLBACKCOST\tP\n"
205                                         "Setup\tSetup\n"
206                                         "UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
207                                         "AdminProperties\tPOSTADMIN\n"
208                                         "ROOTDRIVE\tC:\\\n"
209                                         "SERVNAME\tTestService\n"
210                                         "SERVDISP\tTestServiceDisp\n";
211 
212 static const CHAR shortcut_dat[] = "Shortcut\tDirectory_\tName\tComponent_\tTarget\tArguments\tDescription\tHotkey\tIcon_\tIconIndex\tShowCmd\tWkDir\n"
213                                    "s72\ts72\tl128\ts72\ts72\tS255\tL255\tI2\tS72\tI2\tI2\tS72\n"
214                                    "Shortcut\tShortcut\n"
215                                    "Shortcut\tMSITESTDIR\tShortcut\tcomponent\tShortcut\t\tShortcut\t\t\t\t\t\n";
216 
217 static const CHAR environment_dat[] = "Environment\tName\tValue\tComponent_\n"
218                                       "s72\tl255\tL255\ts72\n"
219                                       "Environment\tEnvironment\n"
220                                       "Var1\t=-MSITESTVAR1\t1\tOne\n"
221                                       "Var2\tMSITESTVAR2\t1\tOne\n"
222                                       "Var3\t=-MSITESTVAR3\t1\tOne\n"
223                                       "Var4\tMSITESTVAR4\t1\tOne\n"
224                                       "Var5\t-MSITESTVAR5\t\tOne\n"
225                                       "Var6\tMSITESTVAR6\t\tOne\n"
226                                       "Var7\t!-MSITESTVAR7\t\tOne\n"
227                                       "Var8\t!-*MSITESTVAR8\t\tOne\n"
228                                       "Var9\t=-MSITESTVAR9\t\tOne\n"
229                                       "Var10\t=MSITESTVAR10\t\tOne\n"
230                                       "Var11\t+-MSITESTVAR11\t[~];1\tOne\n"
231                                       "Var12\t+-MSITESTVAR11\t[~];2\tOne\n"
232                                       "Var13\t+-MSITESTVAR12\t[~];1\tOne\n"
233                                       "Var14\t=MSITESTVAR13\t[~];1\tOne\n"
234                                       "Var15\t=MSITESTVAR13\t[~];2\tOne\n"
235                                       "Var16\t=MSITESTVAR14\t;1;\tOne\n"
236                                       "Var17\t=MSITESTVAR15\t;;1;;\tOne\n"
237                                       "Var18\t=MSITESTVAR16\t 1 \tOne\n"
238                                       "Var19\t+-MSITESTVAR17\t1\tOne\n"
239                                       "Var20\t+-MSITESTVAR17\t;;2;;[~]\tOne\n"
240                                       "Var21\t+-MSITESTVAR18\t1\tOne\n"
241                                       "Var22\t+-MSITESTVAR18\t[~];;2;;\tOne\n"
242                                       "Var23\t+-MSITESTVAR19\t1\tOne\n"
243                                       "Var24\t+-MSITESTVAR19\t[~]2\tOne\n"
244                                       "Var25\t+-MSITESTVAR20\t1\tOne\n"
245                                       "Var26\t+-MSITESTVAR20\t2[~]\tOne\n";
246 
247 /* Expected results, starting from MSITESTVAR11 onwards */
248 static const CHAR *environment_dat_results[] = {"1;2",    /*MSITESTVAR11*/
249                                                 "1",      /*MSITESTVAR12*/
250                                                 "1;2",    /*MSITESTVAR13*/
251                                                 ";1;",    /*MSITESTVAR14*/
252                                                 ";;1;;",  /*MSITESTVAR15*/
253                                                 " 1 ",    /*MSITESTVAR16*/
254                                                 ";;2;;1", /*MSITESTVAR17*/
255                                                 "1;;2;;", /*MSITESTVAR18*/
256                                                 "1",      /*MSITESTVAR19*/
257                                                 "1",      /*MSITESTVAR20*/
258                                                 NULL};
259 
260 static const CHAR condition_dat[] = "Feature_\tLevel\tCondition\n"
261                                     "s38\ti2\tS255\n"
262                                     "Condition\tFeature_\tLevel\n"
263                                     "One\t4\t1\n";
264 
265 static const CHAR up_property_dat[] = "Property\tValue\n"
266                                       "s72\tl0\n"
267                                       "Property\tProperty\n"
268                                       "DefaultUIFont\tDlgFont8\n"
269                                       "HASUIRUN\t\n"
270                                       "INSTALLLEVEL\t3\n"
271                                       "InstallMode\tTypical\n"
272                                       "Manufacturer\tWine\n"
273                                       "PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
274                                       "ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
275                                       "ProductID\tnone\n"
276                                       "ProductLanguage\t1033\n"
277                                       "ProductName\tMSITEST\n"
278                                       "ProductVersion\t1.1.1\n"
279                                       "PROMPTROLLBACKCOST\tP\n"
280                                       "Setup\tSetup\n"
281                                       "UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
282                                       "AdminProperties\tPOSTADMIN\n"
283                                       "ROOTDRIVE\tC:\\\n"
284                                       "SERVNAME\tTestService\n"
285                                       "SERVDISP\tTestServiceDisp\n"
286                                       "RemovePreviousVersions\t1\n";
287 
288 static const CHAR up2_property_dat[] = "Property\tValue\n"
289                                        "s72\tl0\n"
290                                        "Property\tProperty\n"
291                                        "DefaultUIFont\tDlgFont8\n"
292                                        "HASUIRUN\t\n"
293                                        "INSTALLLEVEL\t3\n"
294                                        "InstallMode\tTypical\n"
295                                        "Manufacturer\tWine\n"
296                                        "PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
297                                        "ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
298                                        "ProductID\tnone\n"
299                                        "ProductLanguage\t1033\n"
300                                        "ProductName\tMSITEST\n"
301                                        "ProductVersion\t1.1.2\n"
302                                        "PROMPTROLLBACKCOST\tP\n"
303                                        "Setup\tSetup\n"
304                                        "UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
305                                        "AdminProperties\tPOSTADMIN\n"
306                                        "ROOTDRIVE\tC:\\\n"
307                                        "SERVNAME\tTestService\n"
308                                        "SERVDISP\tTestServiceDisp\n";
309 
310 static const CHAR up3_property_dat[] = "Property\tValue\n"
311                                        "s72\tl0\n"
312                                        "Property\tProperty\n"
313                                        "DefaultUIFont\tDlgFont8\n"
314                                        "HASUIRUN\t\n"
315                                        "INSTALLLEVEL\t3\n"
316                                        "InstallMode\tTypical\n"
317                                        "Manufacturer\tWine\n"
318                                        "PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
319                                        "ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
320                                        "ProductID\tnone\n"
321                                        "ProductLanguage\t1033\n"
322                                        "ProductName\tMSITEST\n"
323                                        "ProductVersion\t1.1.2\n"
324                                        "PROMPTROLLBACKCOST\tP\n"
325                                        "Setup\tSetup\n"
326                                        "UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
327                                        "AdminProperties\tPOSTADMIN\n"
328                                        "ROOTDRIVE\tC:\\\n"
329                                        "SERVNAME\tTestService\n"
330                                        "SERVDISP\tTestServiceDisp\n"
331                                        "RemovePreviousVersions\t1\n";
332 
333 static const CHAR registry_dat[] = "Registry\tRoot\tKey\tName\tValue\tComponent_\n"
334                                    "s72\ti2\tl255\tL255\tL0\ts72\n"
335                                    "Registry\tRegistry\n"
336                                    "Apples\t2\tSOFTWARE\\Wine\\msitest\tName\timaname\tOne\n"
337                                    "Oranges\t2\tSOFTWARE\\Wine\\msitest\tnumber\t#314\tTwo\n"
338                                    "regdata\t2\tSOFTWARE\\Wine\\msitest\tblah\tbad\tdangler\n"
339                                    "OrderTest\t2\tSOFTWARE\\Wine\\msitest\tOrderTestName\tOrderTestValue\tcomponent";
340 
341 static const CHAR service_install_dat[] = "ServiceInstall\tName\tDisplayName\tServiceType\tStartType\tErrorControl\t"
342                                           "LoadOrderGroup\tDependencies\tStartName\tPassword\tArguments\tComponent_\tDescription\n"
343                                           "s72\ts255\tL255\ti4\ti4\ti4\tS255\tS255\tS255\tS255\tS255\ts72\tL255\n"
344                                           "ServiceInstall\tServiceInstall\n"
345                                           "TestService\t[SERVNAME]\t[SERVDISP]\t2\t3\t\t\t\tTestService\t\t\tservice_comp\t\t";
346 
347 static const CHAR service_control_dat[] = "ServiceControl\tName\tEvent\tArguments\tWait\tComponent_\n"
348                                           "s72\tl255\ti2\tL255\tI2\ts72\n"
349                                           "ServiceControl\tServiceControl\n"
350                                           "ServiceControl\tTestService\t8\t\t\tservice_comp";
351 
352 static const CHAR sss_service_control_dat[] = "ServiceControl\tName\tEvent\tArguments\tWait\tComponent_\n"
353                                               "s72\tl255\ti2\tL255\tI2\ts72\n"
354                                               "ServiceControl\tServiceControl\n"
355                                               "ServiceControl\tSpooler\t1\t\t\tservice_comp";
356 
357 static const CHAR sss_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
358                                                "s72\tS255\tI2\n"
359                                                "InstallExecuteSequence\tAction\n"
360                                                "CostFinalize\t\t1000\n"
361                                                "CostInitialize\t\t800\n"
362                                                "FileCost\t\t900\n"
363                                                "ResolveSource\t\t950\n"
364                                                "MoveFiles\t\t1700\n"
365                                                "InstallFiles\t\t4000\n"
366                                                "DuplicateFiles\t\t4500\n"
367                                                "WriteEnvironmentStrings\t\t4550\n"
368                                                "CreateShortcuts\t\t4600\n"
369                                                "StartServices\t\t5000\n"
370                                                "DeleteServices\t\t5500\n"
371                                                "InstallFinalize\t\t6600\n"
372                                                "InstallInitialize\t\t1500\n"
373                                                "InstallValidate\t\t1400\n"
374                                                "LaunchConditions\t\t100\n";
375 
376 /* tables for test_continuouscabs */
377 static const CHAR cc_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
378                                        "s72\tS38\ts72\ti2\tS255\tS72\n"
379                                        "Component\tComponent\n"
380                                        "maximus\t\tMSITESTDIR\t\t1\tmaximus\n"
381                                        "augustus\t\tMSITESTDIR\t\t1\taugustus\n"
382                                        "caesar\t\tMSITESTDIR\t\t1\tcaesar\n";
383 
384 static const CHAR cc2_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
385                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
386                                         "Component\tComponent\n"
387                                         "maximus\t\tMSITESTDIR\t\t1\tmaximus\n"
388                                         "augustus\t\tMSITESTDIR\t\t\taugustus\n"
389                                         "caesar\t\tMSITESTDIR\t\t1\tcaesar\n";
390 
391 static const CHAR cc_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
392                                      "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
393                                      "Feature\tFeature\n"
394                                      "feature\t\t\t\t2\t1\tTARGETDIR\t";
395 
396 static const CHAR cc_feature_comp_dat[] = "Feature_\tComponent_\n"
397                                           "s38\ts72\n"
398                                           "FeatureComponents\tFeature_\tComponent_\n"
399                                           "feature\tmaximus\n"
400                                           "feature\taugustus\n"
401                                           "feature\tcaesar";
402 
403 static const CHAR cc_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
404                                   "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
405                                   "File\tFile\n"
406                                   "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
407                                   "augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n"
408                                   "caesar\tcaesar\tcaesar\t500\t\t\t16384\t12";
409 
410 static const CHAR cc2_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
411                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
412                                    "File\tFile\n"
413                                    "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
414                                    "augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n"
415                                    "tiberius\tmaximus\ttiberius\t500\t\t\t16384\t3\n"
416                                    "caesar\tcaesar\tcaesar\t500\t\t\t16384\t12";
417 
418 static const CHAR cc_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
419                                    "i2\ti4\tL64\tS255\tS32\tS72\n"
420                                    "Media\tDiskId\n"
421                                    "1\t10\t\ttest1.cab\tDISK1\t\n"
422                                    "2\t2\t\ttest2.cab\tDISK2\t\n"
423                                    "3\t12\t\ttest3.cab\tDISK3\t\n";
424 
425 static const CHAR co_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
426                                   "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
427                                   "File\tFile\n"
428                                   "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
429                                   "augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n"
430                                   "caesar\tcaesar\tcaesar\t500\t\t\t16384\t3";
431 
432 static const CHAR co_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
433                                    "i2\ti4\tL64\tS255\tS32\tS72\n"
434                                    "Media\tDiskId\n"
435                                    "1\t10\t\ttest1.cab\tDISK1\t\n"
436                                    "2\t2\t\ttest2.cab\tDISK2\t\n"
437                                    "3\t3\t\ttest3.cab\tDISK3\t\n";
438 
439 static const CHAR co2_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
440                                     "i2\ti4\tL64\tS255\tS32\tS72\n"
441                                     "Media\tDiskId\n"
442                                     "1\t10\t\ttest1.cab\tDISK1\t\n"
443                                     "2\t12\t\ttest3.cab\tDISK3\t\n"
444                                     "3\t2\t\ttest2.cab\tDISK2\t\n";
445 
446 static const CHAR mm_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
447                                   "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
448                                   "File\tFile\n"
449                                   "maximus\tmaximus\tmaximus\t500\t\t\t512\t1\n"
450                                   "augustus\taugustus\taugustus\t500\t\t\t512\t2\n"
451                                   "caesar\tcaesar\tcaesar\t500\t\t\t16384\t3";
452 
453 static const CHAR mm_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
454                                    "i2\ti4\tL64\tS255\tS32\tS72\n"
455                                    "Media\tDiskId\n"
456                                    "1\t3\t\ttest1.cab\tDISK1\t\n";
457 
458 static const CHAR ss_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
459                                    "i2\ti4\tL64\tS255\tS32\tS72\n"
460                                    "Media\tDiskId\n"
461                                    "1\t2\t\ttest1.cab\tDISK1\t\n"
462                                    "2\t2\t\ttest2.cab\tDISK2\t\n"
463                                    "3\t12\t\ttest3.cab\tDISK3\t\n";
464 
465 /* tables for test_uiLevelFlags */
466 static const CHAR ui_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
467                                        "s72\tS38\ts72\ti2\tS255\tS72\n"
468                                        "Component\tComponent\n"
469                                        "maximus\t\tMSITESTDIR\t\tHASUIRUN=1\tmaximus\n"
470                                        "augustus\t\tMSITESTDIR\t\t1\taugustus\n"
471                                        "caesar\t\tMSITESTDIR\t\t1\tcaesar\n";
472 
473 static const CHAR ui_install_ui_seq_dat[] = "Action\tCondition\tSequence\n"
474                                            "s72\tS255\tI2\n"
475                                            "InstallUISequence\tAction\n"
476                                            "SetUIProperty\t\t5\n"
477                                            "ExecuteAction\t\t1100\n";
478 
479 static const CHAR ui_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
480                                            "s72\ti2\tS64\tS0\tS255\n"
481                                            "CustomAction\tAction\n"
482                                            "SetUIProperty\t51\tHASUIRUN\t1\t\n";
483 
484 static const CHAR rof_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
485                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
486                                         "Component\tComponent\n"
487                                         "maximus\t\tMSITESTDIR\t\t1\tmaximus\n";
488 
489 static const CHAR rof_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
490                                       "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
491                                       "Feature\tFeature\n"
492                                       "feature\t\tFeature\tFeature\t2\t1\tTARGETDIR\t\n"
493                                       "montecristo\t\tFeature\tFeature\t2\t1\tTARGETDIR\t";
494 
495 static const CHAR rof_feature_comp_dat[] = "Feature_\tComponent_\n"
496                                            "s38\ts72\n"
497                                            "FeatureComponents\tFeature_\tComponent_\n"
498                                            "feature\tmaximus\n"
499                                            "montecristo\tmaximus";
500 
501 static const CHAR rof_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
502                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
503                                    "File\tFile\n"
504                                    "maximus\tmaximus\tmaximus\t500\t\t\t8192\t1";
505 
506 static const CHAR rof_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
507                                     "i2\ti4\tL64\tS255\tS32\tS72\n"
508                                     "Media\tDiskId\n"
509                                     "1\t1\t\t\tDISK1\t\n";
510 
511 static const CHAR rofc_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
512                                     "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
513                                     "File\tFile\n"
514                                     "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1";
515 
516 static const CHAR rofc_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
517                                      "i2\ti4\tL64\tS255\tS32\tS72\n"
518                                      "Media\tDiskId\n"
519                                      "1\t1\t\ttest1.cab\tDISK1\t\n";
520 
521 static const CHAR lus2_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
522                                      "i2\ti4\tL64\tS255\tS32\tS72\n"
523                                      "Media\tDiskId\n"
524                                      "1\t1\t\t#test1.cab\tDISK1\t\n";
525 
526 static const CHAR sdp_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
527                                                "s72\tS255\tI2\n"
528                                                "InstallExecuteSequence\tAction\n"
529                                                "AllocateRegistrySpace\tNOT Installed\t1550\n"
530                                                "CostFinalize\t\t1000\n"
531                                                "CostInitialize\t\t800\n"
532                                                "FileCost\t\t900\n"
533                                                "InstallFiles\t\t4000\n"
534                                                "InstallFinalize\t\t6600\n"
535                                                "InstallInitialize\t\t1500\n"
536                                                "InstallValidate\t\t1400\n"
537                                                "LaunchConditions\t\t100\n"
538                                                "SetDirProperty\t\t950";
539 
540 static const CHAR sdp_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
541                                             "s72\ti2\tS64\tS0\tS255\n"
542                                             "CustomAction\tAction\n"
543                                             "SetDirProperty\t51\tMSITESTDIR\t[CommonFilesFolder]msitest\\\t\n";
544 
545 static const CHAR cie_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
546                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
547                                         "Component\tComponent\n"
548                                         "maximus\t\tMSITESTDIR\t\t1\tmaximus\n"
549                                         "augustus\t\tMSITESTDIR\t\t1\taugustus\n"
550                                         "caesar\t\tMSITESTDIR\t\t1\tcaesar\n"
551                                         "gaius\t\tMSITESTDIR\t\t1\tgaius\n";
552 
553 static const CHAR cie_feature_comp_dat[] = "Feature_\tComponent_\n"
554                                            "s38\ts72\n"
555                                            "FeatureComponents\tFeature_\tComponent_\n"
556                                            "feature\tmaximus\n"
557                                            "feature\taugustus\n"
558                                            "feature\tcaesar\n"
559                                            "feature\tgaius";
560 
561 static const CHAR cie_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
562                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
563                                    "File\tFile\n"
564                                    "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
565                                    "augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n"
566                                    "caesar\tcaesar\tcaesar\t500\t\t\t16384\t12\n"
567                                    "gaius\tgaius\tgaius\t500\t\t\t8192\t11";
568 
569 static const CHAR cie_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
570                                     "i2\ti4\tL64\tS255\tS32\tS72\n"
571                                     "Media\tDiskId\n"
572                                     "1\t1\t\ttest1.cab\tDISK1\t\n"
573                                     "2\t2\t\ttest2.cab\tDISK2\t\n"
574                                     "3\t12\t\ttest3.cab\tDISK3\t\n";
575 
576 static const CHAR ci_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
577                                               "s72\tS255\tI2\n"
578                                               "InstallExecuteSequence\tAction\n"
579                                               "CostFinalize\t\t1000\n"
580                                               "CostInitialize\t\t800\n"
581                                               "FileCost\t\t900\n"
582                                               "InstallFiles\t\t4000\n"
583                                               "InstallServices\t\t5000\n"
584                                               "InstallFinalize\t\t6600\n"
585                                               "InstallInitialize\t\t1500\n"
586                                               "RunInstall\t\t1600\n"
587                                               "InstallValidate\t\t1400\n"
588                                               "LaunchConditions\t\t100";
589 
590 static const CHAR ci_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
591                                             "s72\ti2\tS64\tS0\tS255\n"
592                                             "CustomAction\tAction\n"
593                                             "RunInstall\t87\tmsitest\\concurrent.msi\tMYPROP=[UILevel]\t\n";
594 
595 static const CHAR ci_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
596                                        "s72\tS38\ts72\ti2\tS255\tS72\n"
597                                        "Component\tComponent\n"
598                                        "maximus\t{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}\tMSITESTDIR\t\tUILevel=5\tmaximus\n";
599 
600 static const CHAR ci2_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
601                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
602                                         "Component\tComponent\n"
603                                         "augustus\t\tMSITESTDIR\t\tUILevel=3 AND MYPROP=5\taugustus\n";
604 
605 static const CHAR ci2_feature_comp_dat[] = "Feature_\tComponent_\n"
606                                            "s38\ts72\n"
607                                            "FeatureComponents\tFeature_\tComponent_\n"
608                                            "feature\taugustus";
609 
610 static const CHAR ci2_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
611                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
612                                    "File\tFile\n"
613                                    "augustus\taugustus\taugustus\t500\t\t\t8192\t1";
614 
615 static const CHAR spf_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
616                                             "s72\ti2\tS64\tS0\tS255\n"
617                                             "CustomAction\tAction\n"
618                                             "SetFolderProp\t51\tMSITESTDIR\t[ProgramFilesFolder]\\msitest\\added\t\n";
619 
620 static const CHAR spf_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
621                                                "s72\tS255\tI2\n"
622                                                "InstallExecuteSequence\tAction\n"
623                                                "CostFinalize\t\t1000\n"
624                                                "CostInitialize\t\t800\n"
625                                                "FileCost\t\t900\n"
626                                                "SetFolderProp\t\t950\n"
627                                                "InstallFiles\t\t4000\n"
628                                                "InstallServices\t\t5000\n"
629                                                "InstallFinalize\t\t6600\n"
630                                                "InstallInitialize\t\t1500\n"
631                                                "InstallValidate\t\t1400\n"
632                                                "LaunchConditions\t\t100";
633 
634 static const CHAR spf_install_ui_seq_dat[] = "Action\tCondition\tSequence\n"
635                                              "s72\tS255\tI2\n"
636                                              "InstallUISequence\tAction\n"
637                                              "CostInitialize\t\t800\n"
638                                              "FileCost\t\t900\n"
639                                              "CostFinalize\t\t1000\n"
640                                              "ExecuteAction\t\t1100\n";
641 
642 static const CHAR pp_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
643                                               "s72\tS255\tI2\n"
644                                               "InstallExecuteSequence\tAction\n"
645                                               "ValidateProductID\t\t700\n"
646                                               "CostInitialize\t\t800\n"
647                                               "FileCost\t\t900\n"
648                                               "CostFinalize\t\t1000\n"
649                                               "InstallValidate\t\t1400\n"
650                                               "InstallInitialize\t\t1500\n"
651                                               "ProcessComponents\tPROCESS_COMPONENTS=1 Or FULL=1\t1600\n"
652                                               "UnpublishFeatures\tUNPUBLISH_FEATURES=1 Or FULL=1\t1800\n"
653                                               "RemoveFiles\t\t3500\n"
654                                               "InstallFiles\t\t4000\n"
655                                               "RegisterUser\tREGISTER_USER=1 Or FULL=1\t6000\n"
656                                               "RegisterProduct\tREGISTER_PRODUCT=1 Or FULL=1\t6100\n"
657                                               "PublishFeatures\tPUBLISH_FEATURES=1 Or FULL=1\t6300\n"
658                                               "PublishProduct\tPUBLISH_PRODUCT=1 Or FULL=1\t6400\n"
659                                               "InstallFinalize\t\t6600";
660 
661 static const CHAR ppc_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
662                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
663                                         "Component\tComponent\n"
664                                         "maximus\t{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}\tMSITESTDIR\t\tUILevel=5\tmaximus\n"
665                                         "augustus\t{5AD3C142-CEF8-490D-B569-784D80670685}\tMSITESTDIR\t1\t\taugustus\n";
666 
667 static const CHAR ppc_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
668                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
669                                    "File\tFile\n"
670                                    "maximus\tmaximus\tmaximus\t500\t\t\t8192\t1\n"
671                                    "augustus\taugustus\taugustus\t500\t\t\t8192\t2";
672 
673 static const CHAR ppc_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
674                                     "i2\ti4\tL64\tS255\tS32\tS72\n"
675                                     "Media\tDiskId\n"
676                                     "1\t2\t\t\tDISK1\t\n";
677 
678 static const CHAR ppc_feature_comp_dat[] = "Feature_\tComponent_\n"
679                                            "s38\ts72\n"
680                                            "FeatureComponents\tFeature_\tComponent_\n"
681                                            "feature\tmaximus\n"
682                                            "feature\taugustus\n"
683                                            "montecristo\tmaximus";
684 
685 static const CHAR tp_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
686                                        "s72\tS38\ts72\ti2\tS255\tS72\n"
687                                        "Component\tComponent\n"
688                                        "augustus\t\tMSITESTDIR\t\tprop=\"val\"\taugustus\n";
689 
690 static const CHAR cwd_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
691                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
692                                         "Component\tComponent\n"
693                                         "augustus\t\tMSITESTDIR\t\t\taugustus\n";
694 
695 static const CHAR adm_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
696                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
697                                         "Component\tComponent\n"
698                                         "augustus\t\tMSITESTDIR\t\tPOSTADMIN=1\taugustus";
699 
700 static const CHAR adm_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
701                                             "s72\ti2\tS64\tS0\tS255\n"
702                                             "CustomAction\tAction\n"
703                                             "SetPOSTADMIN\t51\tPOSTADMIN\t1\t\n";
704 
705 static const CHAR adm_admin_exec_seq_dat[] = "Action\tCondition\tSequence\n"
706                                              "s72\tS255\tI2\n"
707                                              "AdminExecuteSequence\tAction\n"
708                                              "CostFinalize\t\t1000\n"
709                                              "CostInitialize\t\t800\n"
710                                              "FileCost\t\t900\n"
711                                              "SetPOSTADMIN\t\t950\n"
712                                              "InstallFiles\t\t4000\n"
713                                              "InstallFinalize\t\t6600\n"
714                                              "InstallInitialize\t\t1500\n"
715                                              "InstallValidate\t\t1400\n"
716                                              "LaunchConditions\t\t100";
717 
718 static const CHAR amp_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
719                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
720                                         "Component\tComponent\n"
721                                         "augustus\t\tMSITESTDIR\t\tMYPROP=2718 and MyProp=42\taugustus\n";
722 
723 static const CHAR rem_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
724                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
725                                         "Component\tComponent\n"
726                                         "hydrogen\t{C844BD1E-1907-4C00-8BC9-150BD70DF0A1}\tMSITESTDIR\t\t\thydrogen\n"
727                                         "helium\t{5AD3C142-CEF8-490D-B569-784D80670685}\tMSITESTDIR\t1\t\thelium\n"
728                                         "lithium\t\tMSITESTDIR\t2\t\tlithium\n";
729 
730 static const CHAR rem_feature_comp_dat[] = "Feature_\tComponent_\n"
731                                            "s38\ts72\n"
732                                            "FeatureComponents\tFeature_\tComponent_\n"
733                                            "feature\thydrogen\n"
734                                            "feature\thelium\n"
735                                            "feature\tlithium";
736 
737 static const CHAR rem_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
738                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
739                                    "File\tFile\n"
740                                    "hydrogen\thydrogen\thydrogen\t\t\t\t8192\t1\n"
741                                    "helium\thelium\thelium\t\t\t\t8192\t1\n"
742                                    "lithium\tlithium\tlithium\t\t\t\t8192\t1";
743 
744 static const CHAR rem_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
745                                                "s72\tS255\tI2\n"
746                                                "InstallExecuteSequence\tAction\n"
747                                                "ValidateProductID\t\t700\n"
748                                                "CostInitialize\t\t800\n"
749                                                "FileCost\t\t900\n"
750                                                "CostFinalize\t\t1000\n"
751                                                "InstallValidate\t\t1400\n"
752                                                "InstallInitialize\t\t1500\n"
753                                                "ProcessComponents\t\t1600\n"
754                                                "UnpublishFeatures\t\t1800\n"
755                                                "RemoveFiles\t\t3500\n"
756                                                "InstallFiles\t\t4000\n"
757                                                "RegisterProduct\t\t6100\n"
758                                                "PublishFeatures\t\t6300\n"
759                                                "PublishProduct\t\t6400\n"
760                                                "InstallFinalize\t\t6600";
761 
762 static const CHAR rem_remove_files_dat[] = "FileKey\tComponent_\tFileName\tDirProperty\tInstallMode\n"
763                                            "s72\ts72\tS255\ts72\tI2\n"
764                                            "RemoveFile\tFileKey\n"
765                                            "furlong\thydrogen\tfurlong\tMSITESTDIR\t1\n"
766                                            "firkin\thelium\tfirkin\tMSITESTDIR\t1\n"
767                                            "fortnight\tlithium\tfortnight\tMSITESTDIR\t1\n"
768                                            "becquerel\thydrogen\tbecquerel\tMSITESTDIR\t2\n"
769                                            "dioptre\thelium\tdioptre\tMSITESTDIR\t2\n"
770                                            "attoparsec\tlithium\tattoparsec\tMSITESTDIR\t2\n"
771                                            "storeys\thydrogen\tstoreys\tMSITESTDIR\t3\n"
772                                            "block\thelium\tblock\tMSITESTDIR\t3\n"
773                                            "siriometer\tlithium\tsiriometer\tMSITESTDIR\t3\n"
774                                            "nanoacre\thydrogen\t\tCABOUTDIR\t3\n";
775 
776 static const CHAR mov_move_file_dat[] = "FileKey\tComponent_\tSourceName\tDestName\tSourceFolder\tDestFolder\tOptions\n"
777                                         "s72\ts72\tS255\tS255\tS72\ts72\ti2\n"
778                                         "MoveFile\tFileKey\n"
779                                         "abkhazia\taugustus\tnonexistent\tdest\tSourceDir\tMSITESTDIR\t\n"
780                                         "bahamas\taugustus\tnonexistent\tdest\tSourceDir\tMSITESTDIR\t1\n"
781                                         "cambodia\taugustus\tcameroon\tcanada\tSourceDir\tMSITESTDIR\t\n"
782                                         "denmark\taugustus\tdjibouti\tdominica\tSourceDir\tMSITESTDIR\t1\n"
783                                         "ecuador\taugustus\tegypt\telsalvador\tNotAProp\tMSITESTDIR\t1\n"
784                                         "fiji\taugustus\tfinland\tfrance\tSourceDir\tNotAProp\t1\n"
785                                         "gabon\taugustus\tgambia\tgeorgia\tSOURCEFULL\tMSITESTDIR\t1\n"
786                                         "haiti\taugustus\thonduras\thungary\tSourceDir\tDESTFULL\t1\n"
787                                         "iceland\taugustus\tindia\tindonesia\tMSITESTDIR\tMSITESTDIR\t1\n"
788                                         "jamaica\taugustus\tjapan\tjordan\tFILEPATHBAD\tMSITESTDIR\t1\n"
789                                         "kazakhstan\taugustus\t\tkiribati\tFILEPATHGOOD\tMSITESTDIR\t1\n"
790                                         "laos\taugustus\tlatvia\tlebanon\tSourceDir\tMSITESTDIR\t1\n"
791                                         "namibia\taugustus\tnauru\tkiribati\tSourceDir\tMSITESTDIR\t1\n"
792                                         "pakistan\taugustus\tperu\tsfn|poland\tSourceDir\tMSITESTDIR\t1\n"
793                                         "wildcard\taugustus\tapp*\twildcard\tSourceDir\tMSITESTDIR\t1\n"
794                                         "single\taugustus\tf?o\tsingle\tSourceDir\tMSITESTDIR\t1\n"
795                                         "wildcardnodest\taugustus\tbudd*\t\tSourceDir\tMSITESTDIR\t1\n"
796                                         "singlenodest\taugustus\tb?r\t\tSourceDir\tMSITESTDIR\t1\n";
797 
798 static const CHAR mc_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
799                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
800                                         "Component\tComponent\n"
801                                         "maximus\t\tMSITESTDIR\t\t1\tmaximus\n"
802                                         "augustus\t\tMSITESTDIR\t\t1\taugustus\n"
803                                         "caesar\t\tMSITESTDIR\t\t1\tcaesar\n"
804                                         "gaius\t\tMSITESTDIR\t\tGAIUS=1\tgaius\n";
805 
806 static const CHAR mc_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
807                                   "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
808                                   "File\tFile\n"
809                                   "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
810                                   "augustus\taugustus\taugustus\t500\t\t\t\t2\n"
811                                   "caesar\tcaesar\tcaesar\t500\t\t\t16384\t3\n"
812                                   "gaius\tgaius\tgaius\t500\t\t\t16384\t4";
813 
814 static const CHAR mc_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
815                                    "i2\ti4\tL64\tS255\tS32\tS72\n"
816                                    "Media\tDiskId\n"
817                                    "1\t1\t\ttest1.cab\tDISK1\t\n"
818                                    "2\t2\t\ttest2.cab\tDISK2\t\n"
819                                    "3\t3\t\ttest3.cab\tDISK3\t\n"
820                                    "4\t4\t\ttest3.cab\tDISK3\t\n";
821 
822 static const CHAR mc_file_hash_dat[] = "File_\tOptions\tHashPart1\tHashPart2\tHashPart3\tHashPart4\n"
823                                        "s72\ti2\ti4\ti4\ti4\ti4\n"
824                                        "MsiFileHash\tFile_\n"
825                                        "caesar\t\t850433704\t-241429251\t675791761\t-1221108824";
826 
827 static const CHAR df_directory_dat[] = "Directory\tDirectory_Parent\tDefaultDir\n"
828                                        "s72\tS72\tl255\n"
829                                        "Directory\tDirectory\n"
830                                        "THIS\tMSITESTDIR\tthis\n"
831                                        "DOESNOT\tTHIS\tdoesnot\n"
832                                        "NONEXISTENT\tDOESNOT\texist\n"
833                                        "MSITESTDIR\tProgramFilesFolder\tmsitest\n"
834                                        "ProgramFilesFolder\tTARGETDIR\t.\n"
835                                        "TARGETDIR\t\tSourceDir";
836 
837 static const CHAR df_duplicate_file_dat[] = "FileKey\tComponent_\tFile_\tDestName\tDestFolder\n"
838                                             "s72\ts72\ts72\tS255\tS72\n"
839                                             "DuplicateFile\tFileKey\n"
840                                             "maximus\tmaximus\tmaximus\taugustus\t\n"
841                                             "caesar\tmaximus\tmaximus\t\tNONEXISTENT\n"
842                                             "augustus\tnosuchcomponent\tmaximus\t\tMSITESTDIR\n";
843 
844 static const CHAR wrv_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
845                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
846                                         "Component\tComponent\n"
847                                         "augustus\t\tMSITESTDIR\t\t\taugustus\n";
848 
849 static const CHAR wrv_registry_dat[] = "Registry\tRoot\tKey\tName\tValue\tComponent_\n"
850                                        "s72\ti2\tl255\tL255\tL0\ts72\n"
851                                        "Registry\tRegistry\n"
852                                        "regdata\t2\tSOFTWARE\\Wine\\msitest\tValue\t[~]one[~]two[~]three\taugustus";
853 
854 static const CHAR ca51_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
855                                          "s72\tS38\ts72\ti2\tS255\tS72\n"
856                                          "Component\tComponent\n"
857                                          "augustus\t\tMSITESTDIR\t\tMYPROP=42\taugustus\n";
858 
859 static const CHAR ca51_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
860                                                 "s72\tS255\tI2\n"
861                                                 "InstallExecuteSequence\tAction\n"
862                                                 "ValidateProductID\t\t700\n"
863                                                 "GoodSetProperty\t\t725\n"
864                                                 "BadSetProperty\t\t750\n"
865                                                 "CostInitialize\t\t800\n"
866                                                 "ResolveSource\t\t810\n"
867                                                 "FileCost\t\t900\n"
868                                                 "SetSourceDir\tSRCDIR\t910\n"
869                                                 "CostFinalize\t\t1000\n"
870                                                 "InstallValidate\t\t1400\n"
871                                                 "InstallInitialize\t\t1500\n"
872                                                 "InstallFiles\t\t4000\n"
873                                                 "InstallFinalize\t\t6600";
874 
875 static const CHAR ca51_custom_action_dat[] = "Action\tType\tSource\tTarget\n"
876                                              "s72\ti2\tS64\tS0\n"
877                                              "CustomAction\tAction\n"
878                                              "GoodSetProperty\t51\tMYPROP\t42\n"
879                                              "BadSetProperty\t51\t\tMYPROP\n"
880                                              "SetSourceDir\t51\tSourceDir\t[SRCDIR]\n";
881 
882 static const CHAR is_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
883                                      "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
884                                      "Feature\tFeature\n"
885                                      "one\t\t\t\t2\t1\t\t\n" /* favorLocal */
886                                      "two\t\t\t\t2\t1\t\t1\n" /* favorSource */
887                                      "three\t\t\t\t2\t1\t\t4\n" /* favorAdvertise */
888                                      "four\t\t\t\t2\t\t\t"; /* disabled */
889 
890 static const CHAR is_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
891                                        "s72\tS38\ts72\ti2\tS255\tS72\n"
892                                        "Component\tComponent\n"
893                                        "alpha\t\tMSITESTDIR\t\t\talpha_file\n" /* favorLocal:Local */
894                                        "beta\t\tMSITESTDIR\t1\t\tbeta_file\n" /* favorLocal:Source */
895                                        "gamma\t\tMSITESTDIR\t2\t\tgamma_file\n" /* favorLocal:Optional */
896                                        "theta\t\tMSITESTDIR\t\t\ttheta_file\n" /* favorSource:Local */
897                                        "delta\t\tMSITESTDIR\t1\t\tdelta_file\n" /* favorSource:Source */
898                                        "epsilon\t\tMSITESTDIR\t2\t\tepsilon_file\n" /* favorSource:Optional */
899                                        "zeta\t\tMSITESTDIR\t\t\tzeta_file\n" /* favorAdvertise:Local */
900                                        "iota\t\tMSITESTDIR\t1\t\tiota_file\n" /* favorAdvertise:Source */
901                                        "eta\t\tMSITESTDIR\t2\t\teta_file\n" /* favorAdvertise:Optional */
902                                        "kappa\t\tMSITESTDIR\t\t\tkappa_file\n" /* disabled:Local */
903                                        "lambda\t\tMSITESTDIR\t1\t\tlambda_file\n" /* disabled:Source */
904                                        "mu\t\tMSITESTDIR\t2\t\tmu_file\n"; /* disabled:Optional */
905 
906 static const CHAR is_feature_comp_dat[] = "Feature_\tComponent_\n"
907                                           "s38\ts72\n"
908                                           "FeatureComponents\tFeature_\tComponent_\n"
909                                           "one\talpha\n"
910                                           "one\tbeta\n"
911                                           "one\tgamma\n"
912                                           "two\ttheta\n"
913                                           "two\tdelta\n"
914                                           "two\tepsilon\n"
915                                           "three\tzeta\n"
916                                           "three\tiota\n"
917                                           "three\teta\n"
918                                           "four\tkappa\n"
919                                           "four\tlambda\n"
920                                           "four\tmu";
921 
922 static const CHAR is_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
923                                   "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
924                                   "File\tFile\n"
925                                   "alpha_file\talpha\talpha\t500\t\t\t8192\t1\n"
926                                   "beta_file\tbeta\tbeta\t500\t\t\t8291\t2\n"
927                                   "gamma_file\tgamma\tgamma\t500\t\t\t8192\t3\n"
928                                   "theta_file\ttheta\ttheta\t500\t\t\t8192\t4\n"
929                                   "delta_file\tdelta\tdelta\t500\t\t\t8192\t5\n"
930                                   "epsilon_file\tepsilon\tepsilon\t500\t\t\t8192\t6\n"
931                                   "zeta_file\tzeta\tzeta\t500\t\t\t8192\t7\n"
932                                   "iota_file\tiota\tiota\t500\t\t\t8192\t8\n"
933                                   "eta_file\teta\teta\t500\t\t\t8192\t9\n"
934                                   "kappa_file\tkappa\tkappa\t500\t\t\t8192\t10\n"
935                                   "lambda_file\tlambda\tlambda\t500\t\t\t8192\t11\n"
936                                   "mu_file\tmu\tmu\t500\t\t\t8192\t12";
937 
938 static const CHAR is_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
939                                    "i2\ti4\tL64\tS255\tS32\tS72\n"
940                                    "Media\tDiskId\n"
941                                    "1\t12\t\t\tDISK1\t\n";
942 
943 static const CHAR sp_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
944                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
945                                         "Component\tComponent\n"
946                                         "augustus\t\tTWODIR\t\t\taugustus\n";
947 
948 static const CHAR sp_directory_dat[] = "Directory\tDirectory_Parent\tDefaultDir\n"
949                                        "s72\tS72\tl255\n"
950                                        "Directory\tDirectory\n"
951                                        "TARGETDIR\t\tSourceDir\n"
952                                        "ProgramFilesFolder\tTARGETDIR\t.\n"
953                                        "MSITESTDIR\tProgramFilesFolder\tmsitest:.\n"
954                                        "ONEDIR\tMSITESTDIR\t.:shortone|longone\n"
955                                        "TWODIR\tONEDIR\t.:shorttwo|longtwo";
956 
957 static const CHAR mcp_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
958                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
959                                         "Component\tComponent\n"
960                                         "hydrogen\t{C844BD1E-1907-4C00-8BC9-150BD70DF0A1}\tMSITESTDIR\t2\t\thydrogen\n"
961                                         "helium\t{5AD3C142-CEF8-490D-B569-784D80670685}\tMSITESTDIR\t2\t\thelium\n"
962                                         "lithium\t{4AF28FFC-71C7-4307-BDE4-B77C5338F56F}\tMSITESTDIR\t2\tPROPVAR=42\tlithium\n";
963 
964 static const CHAR mcp_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
965                                       "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
966                                       "Feature\tFeature\n"
967                                       "hydroxyl\t\thydroxyl\thydroxyl\t2\t1\tTARGETDIR\t\n"
968                                       "heliox\t\theliox\theliox\t2\t5\tTARGETDIR\t\n"
969                                       "lithia\t\tlithia\tlithia\t2\t10\tTARGETDIR\t";
970 
971 static const CHAR mcp_feature_comp_dat[] = "Feature_\tComponent_\n"
972                                            "s38\ts72\n"
973                                            "FeatureComponents\tFeature_\tComponent_\n"
974                                            "hydroxyl\thydrogen\n"
975                                            "heliox\thelium\n"
976                                            "lithia\tlithium";
977 
978 static const CHAR mcomp_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
979                                      "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
980                                      "File\tFile\n"
981                                      "hydrogen\thydrogen\thydrogen\t\t\t\t8192\t1\n"
982                                      "helium\thelium\thelium\t\t\t\t8192\t1\n"
983                                      "lithium\tlithium\tlithium\t\t\t\t8192\t1\n"
984                                      "beryllium\tmissingcomp\tberyllium\t\t\t\t8192\t1";
985 
986 static const CHAR ai_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
987                                   "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
988                                   "File\tFile\n"
989                                   "five.txt\tFive\tfive.txt\t1000\t\t\t16384\t5\n"
990                                   "four.txt\tFour\tfour.txt\t1000\t\t\t16384\t4\n"
991                                   "one.txt\tOne\tone.txt\t1000\t\t\t16384\t1\n"
992                                   "three.txt\tThree\tthree.txt\t1000\t\t\t16384\t3\n"
993                                   "two.txt\tTwo\ttwo.txt\t1000\t\t\t16384\t2\n"
994                                   "file\tcomponent\tfilename\t100\t\t\t8192\t1\n"
995                                   "service_file\tservice_comp\tservice.exe\t100\t\t\t8192\t1";
996 
997 static const CHAR ip_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
998                                               "s72\tS255\tI2\n"
999                                               "InstallExecuteSequence\tAction\n"
1000                                               "CostFinalize\t\t1000\n"
1001                                               "ValidateProductID\t\t700\n"
1002                                               "CostInitialize\t\t800\n"
1003                                               "FileCost\t\t900\n"
1004                                               "RemoveFiles\t\t3500\n"
1005                                               "InstallFiles\t\t4000\n"
1006                                               "RegisterUser\t\t6000\n"
1007                                               "RegisterProduct\t\t6100\n"
1008                                               "PublishFeatures\t\t6300\n"
1009                                               "PublishProduct\t\t6400\n"
1010                                               "InstallFinalize\t\t6600\n"
1011                                               "InstallInitialize\t\t1500\n"
1012                                               "ProcessComponents\t\t1600\n"
1013                                               "UnpublishFeatures\t\t1800\n"
1014                                               "InstallValidate\t\t1400\n"
1015                                               "LaunchConditions\t\t100\n"
1016                                               "TestInstalledProp\tInstalled AND NOT REMOVE\t950\n";
1017 
1018 static const CHAR ip_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
1019                                            "s72\ti2\tS64\tS0\tS255\n"
1020                                            "CustomAction\tAction\n"
1021                                            "TestInstalledProp\t19\t\tTest failed\t\n";
1022 
1023 static const CHAR aup_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1024                                                "s72\tS255\tI2\n"
1025                                                "InstallExecuteSequence\tAction\n"
1026                                                "CostFinalize\t\t1000\n"
1027                                                "ValidateProductID\t\t700\n"
1028                                                "CostInitialize\t\t800\n"
1029                                                "FileCost\t\t900\n"
1030                                                "RemoveFiles\t\t3500\n"
1031                                                "InstallFiles\t\t4000\n"
1032                                                "RegisterUser\t\t6000\n"
1033                                                "RegisterProduct\t\t6100\n"
1034                                                "PublishFeatures\t\t6300\n"
1035                                                "PublishProduct\t\t6400\n"
1036                                                "InstallFinalize\t\t6600\n"
1037                                                "InstallInitialize\t\t1500\n"
1038                                                "ProcessComponents\t\t1600\n"
1039                                                "UnpublishFeatures\t\t1800\n"
1040                                                "InstallValidate\t\t1400\n"
1041                                                "LaunchConditions\t\t100\n"
1042                                                "TestAllUsersProp\tALLUSERS AND NOT REMOVE\t50\n";
1043 
1044 static const CHAR aup2_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1045                                                 "s72\tS255\tI2\n"
1046                                                 "InstallExecuteSequence\tAction\n"
1047                                                 "CostFinalize\t\t1000\n"
1048                                                 "ValidateProductID\t\t700\n"
1049                                                 "CostInitialize\t\t800\n"
1050                                                 "FileCost\t\t900\n"
1051                                                 "RemoveFiles\t\t3500\n"
1052                                                 "InstallFiles\t\t4000\n"
1053                                                 "RegisterUser\t\t6000\n"
1054                                                 "RegisterProduct\t\t6100\n"
1055                                                 "PublishFeatures\t\t6300\n"
1056                                                 "PublishProduct\t\t6400\n"
1057                                                 "InstallFinalize\t\t6600\n"
1058                                                 "InstallInitialize\t\t1500\n"
1059                                                 "ProcessComponents\t\t1600\n"
1060                                                 "UnpublishFeatures\t\t1800\n"
1061                                                 "InstallValidate\t\t1400\n"
1062                                                 "LaunchConditions\t\t100\n"
1063                                                 "TestAllUsersProp\tALLUSERS=2 AND NOT REMOVE\t50\n";
1064 
1065 static const CHAR aup3_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1066                                                 "s72\tS255\tI2\n"
1067                                                 "InstallExecuteSequence\tAction\n"
1068                                                 "CostFinalize\t\t1000\n"
1069                                                 "ValidateProductID\t\t700\n"
1070                                                 "CostInitialize\t\t800\n"
1071                                                 "FileCost\t\t900\n"
1072                                                 "RemoveFiles\t\t3500\n"
1073                                                 "InstallFiles\t\t4000\n"
1074                                                 "RegisterUser\t\t6000\n"
1075                                                 "RegisterProduct\t\t6100\n"
1076                                                 "PublishFeatures\t\t6300\n"
1077                                                 "PublishProduct\t\t6400\n"
1078                                                 "InstallFinalize\t\t6600\n"
1079                                                 "InstallInitialize\t\t1500\n"
1080                                                 "ProcessComponents\t\t1600\n"
1081                                                 "UnpublishFeatures\t\t1800\n"
1082                                                 "InstallValidate\t\t1400\n"
1083                                                 "LaunchConditions\t\t100\n"
1084                                                 "TestAllUsersProp\tALLUSERS=1 AND NOT REMOVE\t50\n";
1085 
1086 static const CHAR aup_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
1087                                             "s72\ti2\tS64\tS0\tS255\n"
1088                                             "CustomAction\tAction\n"
1089                                             "TestAllUsersProp\t19\t\tTest failed\t\n";
1090 
1091 static const CHAR cf_create_folders_dat[] = "Directory_\tComponent_\n"
1092                                             "s72\ts72\n"
1093                                             "CreateFolder\tDirectory_\tComponent_\n"
1094                                             "FIRSTDIR\tOne\n";
1095 
1096 static const CHAR cf_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1097                                               "s72\tS255\tI2\n"
1098                                               "InstallExecuteSequence\tAction\n"
1099                                               "CostFinalize\t\t1000\n"
1100                                               "ValidateProductID\t\t700\n"
1101                                               "CostInitialize\t\t800\n"
1102                                               "FileCost\t\t900\n"
1103                                               "RemoveFiles\t\t3500\n"
1104                                               "CreateFolders\t\t3700\n"
1105                                               "InstallExecute\t\t3800\n"
1106                                               "TestCreateFolders\t\t3900\n"
1107                                               "InstallFiles\t\t4000\n"
1108                                               "RegisterUser\t\t6000\n"
1109                                               "RegisterProduct\t\t6100\n"
1110                                               "PublishFeatures\t\t6300\n"
1111                                               "PublishProduct\t\t6400\n"
1112                                               "InstallFinalize\t\t6600\n"
1113                                               "InstallInitialize\t\t1500\n"
1114                                               "ProcessComponents\t\t1600\n"
1115                                               "UnpublishFeatures\t\t1800\n"
1116                                               "InstallValidate\t\t1400\n"
1117                                               "LaunchConditions\t\t100\n";
1118 
1119 static const CHAR cf_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
1120                                            "s72\ti2\tS64\tS0\tS255\n"
1121                                            "CustomAction\tAction\n"
1122                                            "TestCreateFolders\t19\t\tHalts installation\t\n";
1123 
1124 static const CHAR rf_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1125                                               "s72\tS255\tI2\n"
1126                                               "InstallExecuteSequence\tAction\n"
1127                                               "CostFinalize\t\t1000\n"
1128                                               "ValidateProductID\t\t700\n"
1129                                               "CostInitialize\t\t800\n"
1130                                               "FileCost\t\t900\n"
1131                                               "RemoveFiles\t\t3500\n"
1132                                               "CreateFolders\t\t3600\n"
1133                                               "RemoveFolders\t\t3700\n"
1134                                               "InstallExecute\t\t3800\n"
1135                                               "TestCreateFolders\t\t3900\n"
1136                                               "InstallFiles\t\t4000\n"
1137                                               "RegisterUser\t\t6000\n"
1138                                               "RegisterProduct\t\t6100\n"
1139                                               "PublishFeatures\t\t6300\n"
1140                                               "PublishProduct\t\t6400\n"
1141                                               "InstallFinalize\t\t6600\n"
1142                                               "InstallInitialize\t\t1500\n"
1143                                               "ProcessComponents\t\t1600\n"
1144                                               "UnpublishFeatures\t\t1800\n"
1145                                               "InstallValidate\t\t1400\n"
1146                                               "LaunchConditions\t\t100\n";
1147 
1148 
1149 static const CHAR sr_selfreg_dat[] = "File_\tCost\n"
1150                                      "s72\tI2\n"
1151                                      "SelfReg\tFile_\n"
1152                                      "one.txt\t1\n";
1153 
1154 static const CHAR sr_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1155                                               "s72\tS255\tI2\n"
1156                                               "InstallExecuteSequence\tAction\n"
1157                                               "CostFinalize\t\t1000\n"
1158                                               "CostInitialize\t\t800\n"
1159                                               "FileCost\t\t900\n"
1160                                               "ResolveSource\t\t950\n"
1161                                               "MoveFiles\t\t1700\n"
1162                                               "SelfUnregModules\t\t3900\n"
1163                                               "InstallFiles\t\t4000\n"
1164                                               "DuplicateFiles\t\t4500\n"
1165                                               "WriteEnvironmentStrings\t\t4550\n"
1166                                               "CreateShortcuts\t\t4600\n"
1167                                               "InstallFinalize\t\t6600\n"
1168                                               "InstallInitialize\t\t1500\n"
1169                                               "InstallValidate\t\t1400\n"
1170                                               "LaunchConditions\t\t100\n";
1171 
1172 static const CHAR font_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
1173                                      "i2\ti4\tL64\tS255\tS32\tS72\n"
1174                                      "Media\tDiskId\n"
1175                                      "1\t3\t\t\tDISK1\t\n";
1176 
1177 static const CHAR font_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1178                                     "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1179                                     "File\tFile\n"
1180                                     "font.ttf\tfonts\tfont.ttf\t1000\t\t\t8192\t1\n";
1181 
1182 static const CHAR font_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1183                                        "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1184                                        "Feature\tFeature\n"
1185                                        "fonts\t\t\tfont feature\t1\t2\tMSITESTDIR\t\n";
1186 
1187 static const CHAR font_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1188                                          "s72\tS38\ts72\ti2\tS255\tS72\n"
1189                                          "Component\tComponent\n"
1190                                          "fonts\t{F5920ED0-1183-4B8F-9330-86CE56557C05}\tMSITESTDIR\t\t\tfont.ttf\n";
1191 
1192 static const CHAR font_feature_comp_dat[] = "Feature_\tComponent_\n"
1193                                             "s38\ts72\n"
1194                                             "FeatureComponents\tFeature_\tComponent_\n"
1195                                             "fonts\tfonts\n";
1196 
1197 static const CHAR font_dat[] = "File_\tFontTitle\n"
1198                                "s72\tS128\n"
1199                                "Font\tFile_\n"
1200                                "font.ttf\tmsi test font\n";
1201 
1202 static const CHAR font_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1203                                                 "s72\tS255\tI2\n"
1204                                                 "InstallExecuteSequence\tAction\n"
1205                                                 "ValidateProductID\t\t700\n"
1206                                                 "CostInitialize\t\t800\n"
1207                                                 "FileCost\t\t900\n"
1208                                                 "CostFinalize\t\t1000\n"
1209                                                 "InstallValidate\t\t1400\n"
1210                                                 "InstallInitialize\t\t1500\n"
1211                                                 "ProcessComponents\t\t1600\n"
1212                                                 "UnpublishFeatures\t\t1800\n"
1213                                                 "RemoveFiles\t\t3500\n"
1214                                                 "InstallFiles\t\t4000\n"
1215                                                 "RegisterFonts\t\t4100\n"
1216                                                 "UnregisterFonts\t\t4200\n"
1217                                                 "RegisterUser\t\t6000\n"
1218                                                 "RegisterProduct\t\t6100\n"
1219                                                 "PublishFeatures\t\t6300\n"
1220                                                 "PublishProduct\t\t6400\n"
1221                                                 "InstallFinalize\t\t6600";
1222 
1223 static const CHAR vp_property_dat[] = "Property\tValue\n"
1224                                       "s72\tl0\n"
1225                                       "Property\tProperty\n"
1226                                       "HASUIRUN\t\n"
1227                                       "INSTALLLEVEL\t3\n"
1228                                       "InstallMode\tTypical\n"
1229                                       "Manufacturer\tWine\n"
1230                                       "PIDTemplate\t###-#######\n"
1231                                       "ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
1232                                       "ProductLanguage\t1033\n"
1233                                       "ProductName\tMSITEST\n"
1234                                       "ProductVersion\t1.1.1\n"
1235                                       "UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n";
1236 
1237 static const CHAR vp_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
1238                                            "s72\ti2\tS64\tS0\tS255\n"
1239                                            "CustomAction\tAction\n"
1240                                            "SetProductID1\t51\tProductID\t1\t\n"
1241                                            "SetProductID2\t51\tProductID\t2\t\n"
1242                                            "TestProductID1\t19\t\t\tHalts installation\n"
1243                                            "TestProductID2\t19\t\t\tHalts installation\n";
1244 
1245 static const CHAR vp_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1246                                               "s72\tS255\tI2\n"
1247                                               "InstallExecuteSequence\tAction\n"
1248                                               "LaunchConditions\t\t100\n"
1249                                               "CostInitialize\t\t800\n"
1250                                               "FileCost\t\t900\n"
1251                                               "CostFinalize\t\t1000\n"
1252                                               "InstallValidate\t\t1400\n"
1253                                               "InstallInitialize\t\t1500\n"
1254                                               "SetProductID1\tSET_PRODUCT_ID=1\t3000\n"
1255                                               "SetProductID2\tSET_PRODUCT_ID=2\t3100\n"
1256                                               "ValidateProductID\t\t3200\n"
1257                                               "InstallExecute\t\t3300\n"
1258                                               "TestProductID1\tProductID=1\t3400\n"
1259                                               "TestProductID2\tProductID=\"123-1234567\"\t3500\n"
1260                                               "InstallFiles\t\t4000\n"
1261                                               "InstallFinalize\t\t6000\n";
1262 
1263 static const CHAR odbc_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1264                                     "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1265                                     "File\tFile\n"
1266                                     "ODBCdriver.dll\todbc\tODBCdriver.dll\t1000\t\t\t8192\t1\n"
1267                                     "ODBCdriver2.dll\todbc\tODBCdriver2.dll\t1000\t\t\t8192\t2\n"
1268                                     "ODBCtranslator.dll\todbc\tODBCtranslator.dll\t1000\t\t\t8192\t3\n"
1269                                     "ODBCtranslator2.dll\todbc\tODBCtranslator2.dll\t1000\t\t\t8192\t4\n"
1270                                     "ODBCsetup.dll\todbc\tODBCsetup.dll\t1000\t\t\t8192\t5\n";
1271 
1272 static const CHAR odbc_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1273                                        "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1274                                        "Feature\tFeature\n"
1275                                        "odbc\t\t\todbc feature\t1\t2\tMSITESTDIR\t\n";
1276 
1277 static const CHAR odbc_feature_comp_dat[] = "Feature_\tComponent_\n"
1278                                             "s38\ts72\n"
1279                                             "FeatureComponents\tFeature_\tComponent_\n"
1280                                             "odbc\todbc\n";
1281 
1282 static const CHAR odbc_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1283                                          "s72\tS38\ts72\ti2\tS255\tS72\n"
1284                                          "Component\tComponent\n"
1285                                          "odbc\t{B6F3E4AE-35D1-4B72-9044-989F03E20A43}\tMSITESTDIR\t\t\tODBCdriver.dll\n";
1286 
1287 static const CHAR odbc_driver_dat[] = "Driver\tComponent_\tDescription\tFile_\tFile_Setup\n"
1288                                       "s72\ts72\ts255\ts72\tS72\n"
1289                                       "ODBCDriver\tDriver\n"
1290                                       "ODBC test driver\todbc\tODBC test driver\tODBCdriver.dll\t\n"
1291                                       "ODBC test driver2\todbc\tODBC test driver2\tODBCdriver2.dll\tODBCsetup.dll\n";
1292 
1293 static const CHAR odbc_translator_dat[] = "Translator\tComponent_\tDescription\tFile_\tFile_Setup\n"
1294                                           "s72\ts72\ts255\ts72\tS72\n"
1295                                           "ODBCTranslator\tTranslator\n"
1296                                           "ODBC test translator\todbc\tODBC test translator\tODBCtranslator.dll\t\n"
1297                                           "ODBC test translator2\todbc\tODBC test translator2\tODBCtranslator2.dll\tODBCsetup.dll\n";
1298 
1299 static const CHAR odbc_datasource_dat[] = "DataSource\tComponent_\tDescription\tDriverDescription\tRegistration\n"
1300                                           "s72\ts72\ts255\ts255\ti2\n"
1301                                           "ODBCDataSource\tDataSource\n"
1302                                           "ODBC data source\todbc\tODBC data source\tODBC driver\t\n";
1303 
1304 static const CHAR odbc_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1305                                                 "s72\tS255\tI2\n"
1306                                                 "InstallExecuteSequence\tAction\n"
1307                                                 "LaunchConditions\t\t100\n"
1308                                                 "CostInitialize\t\t800\n"
1309                                                 "FileCost\t\t900\n"
1310                                                 "CostFinalize\t\t1000\n"
1311                                                 "InstallValidate\t\t1400\n"
1312                                                 "InstallInitialize\t\t1500\n"
1313                                                 "InstallODBC\t\t3000\n"
1314                                                 "RemoveODBC\t\t3100\n"
1315                                                 "InstallFiles\t\t4000\n"
1316                                                 "InstallFinalize\t\t6000\n";
1317 
1318 static const CHAR odbc_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
1319                                      "i2\ti4\tL64\tS255\tS32\tS72\n"
1320                                      "Media\tDiskId\n"
1321                                      "1\t5\t\t\tDISK1\t\n";
1322 
1323 static const CHAR tl_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1324                                   "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1325                                   "File\tFile\n"
1326                                   "typelib.dll\ttypelib\ttypelib.dll\t1000\t\t\t8192\t1\n";
1327 
1328 static const CHAR tl_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1329                                      "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1330                                      "Feature\tFeature\n"
1331                                      "typelib\t\t\ttypelib feature\t1\t2\tMSITESTDIR\t\n";
1332 
1333 static const CHAR tl_feature_comp_dat[] = "Feature_\tComponent_\n"
1334                                           "s38\ts72\n"
1335                                           "FeatureComponents\tFeature_\tComponent_\n"
1336                                           "typelib\ttypelib\n";
1337 
1338 static const CHAR tl_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1339                                        "s72\tS38\ts72\ti2\tS255\tS72\n"
1340                                        "Component\tComponent\n"
1341                                        "typelib\t{BB4C26FD-89D8-4E49-AF1C-DB4DCB5BF1B0}\tMSITESTDIR\t\t\ttypelib.dll\n";
1342 
1343 static const CHAR tl_typelib_dat[] = "LibID\tLanguage\tComponent_\tVersion\tDescription\tDirectory_\tFeature_\tCost\n"
1344                                      "s38\ti2\ts72\tI4\tL128\tS72\ts38\tI4\n"
1345                                      "TypeLib\tLibID\tLanguage\tComponent_\n"
1346                                      "{EAC5166A-9734-4D91-878F-1DD02304C66C}\t\ttypelib\t1793\t\tMSITESTDIR\ttypelib\t\n";
1347 
1348 static const CHAR tl_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1349                                               "s72\tS255\tI2\n"
1350                                               "InstallExecuteSequence\tAction\n"
1351                                               "LaunchConditions\t\t100\n"
1352                                               "CostInitialize\t\t800\n"
1353                                               "FileCost\t\t900\n"
1354                                               "CostFinalize\t\t1000\n"
1355                                               "InstallValidate\t\t1400\n"
1356                                               "InstallInitialize\t\t1500\n"
1357                                               "ProcessComponents\t\t1600\n"
1358                                               "RemoveFiles\t\t1700\n"
1359                                               "InstallFiles\t\t2000\n"
1360                                               "RegisterTypeLibraries\tREGISTER_TYPELIB=1\t3000\n"
1361                                               "UnregisterTypeLibraries\t\t3100\n"
1362                                               "RegisterProduct\t\t5100\n"
1363                                               "PublishFeatures\t\t5200\n"
1364                                               "PublishProduct\t\t5300\n"
1365                                               "InstallFinalize\t\t6000\n";
1366 
1367 static const CHAR crs_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1368                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1369                                    "File\tFile\n"
1370                                    "target.txt\tshortcut\ttarget.txt\t1000\t\t\t8192\t1\n";
1371 
1372 static const CHAR crs_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1373                                       "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1374                                       "Feature\tFeature\n"
1375                                       "shortcut\t\t\tshortcut feature\t1\t2\tMSITESTDIR\t\n";
1376 
1377 static const CHAR crs_feature_comp_dat[] = "Feature_\tComponent_\n"
1378                                            "s38\ts72\n"
1379                                            "FeatureComponents\tFeature_\tComponent_\n"
1380                                            "shortcut\tshortcut\n";
1381 
1382 static const CHAR crs_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1383                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
1384                                         "Component\tComponent\n"
1385                                         "shortcut\t{5D20E3C6-7206-498F-AC28-87AF2F9AD4CC}\tMSITESTDIR\t\t\ttarget.txt\n";
1386 
1387 static const CHAR crs_shortcut_dat[] = "Shortcut\tDirectory_\tName\tComponent_\tTarget\tArguments\tDescription\tHotkey\tIcon_\tIconIndex\tShowCmd\tWkDir\n"
1388                                        "s72\ts72\tl128\ts72\ts72\tL255\tL255\tI2\tS72\tI2\tI2\tS72\n"
1389                                        "Shortcut\tShortcut\n"
1390                                        "shortcut\tMSITESTDIR\tshortcut\tshortcut\t[MSITESTDIR]target.txt\t\t\t\t\t\t\t\n";
1391 
1392 static const CHAR crs_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1393                                                "s72\tS255\tI2\n"
1394                                                "InstallExecuteSequence\tAction\n"
1395                                                "LaunchConditions\t\t100\n"
1396                                                "CostInitialize\t\t800\n"
1397                                                "FileCost\t\t900\n"
1398                                                "CostFinalize\t\t1000\n"
1399                                                "InstallValidate\t\t1400\n"
1400                                                "InstallInitialize\t\t1500\n"
1401                                                "ProcessComponents\t\t1600\n"
1402                                                "RemoveFiles\t\t1700\n"
1403                                                "InstallFiles\t\t2000\n"
1404                                                "RemoveShortcuts\t\t3000\n"
1405                                                "CreateShortcuts\t\t3100\n"
1406                                                "RegisterProduct\t\t5000\n"
1407                                                "PublishFeatures\t\t5100\n"
1408                                                "PublishProduct\t\t5200\n"
1409                                                "InstallFinalize\t\t6000\n";
1410 
1411 static const CHAR pub_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1412                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1413                                    "File\tFile\n"
1414                                    "english.txt\tpublish\tenglish.txt\t1000\t\t\t8192\t1\n";
1415 
1416 static const CHAR pub_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1417                                       "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1418                                       "Feature\tFeature\n"
1419                                       "publish\t\t\tpublish feature\t1\t2\tMSITESTDIR\t\n";
1420 
1421 static const CHAR pub_feature_comp_dat[] = "Feature_\tComponent_\n"
1422                                            "s38\ts72\n"
1423                                            "FeatureComponents\tFeature_\tComponent_\n"
1424                                            "publish\tpublish\n";
1425 
1426 static const CHAR pub_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1427                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
1428                                         "Component\tComponent\n"
1429                                         "publish\t{B4EA0ACF-6238-426E-9C6D-7869F0F9C768}\tMSITESTDIR\t\t\tenglish.txt\n";
1430 
1431 static const CHAR pub_publish_component_dat[] = "ComponentId\tQualifier\tComponent_\tAppData\tFeature_\n"
1432                                                 "s38\ts255\ts72\tL255\ts38\n"
1433                                                 "PublishComponent\tComponentId\tQualifier\tComponent_\n"
1434                                                 "{92AFCBC0-9CA6-4270-8454-47C5EE2B8FAA}\tenglish.txt\tpublish\t\tpublish\n";
1435 
1436 static const CHAR pub_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1437                                                "s72\tS255\tI2\n"
1438                                                "InstallExecuteSequence\tAction\n"
1439                                                "LaunchConditions\t\t100\n"
1440                                                "CostInitialize\t\t800\n"
1441                                                "FileCost\t\t900\n"
1442                                                "CostFinalize\t\t1000\n"
1443                                                "InstallValidate\t\t1400\n"
1444                                                "InstallInitialize\t\t1500\n"
1445                                                "ProcessComponents\t\t1600\n"
1446                                                "RemoveFiles\t\t1700\n"
1447                                                "InstallFiles\t\t2000\n"
1448                                                "PublishComponents\t\t3000\n"
1449                                                "UnpublishComponents\t\t3100\n"
1450                                                "RegisterProduct\t\t5000\n"
1451                                                "PublishFeatures\t\t5100\n"
1452                                                "PublishProduct\t\t5200\n"
1453                                                "InstallFinalize\t\t6000\n";
1454 
1455 static const CHAR rd_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1456                                   "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1457                                   "File\tFile\n"
1458                                   "original.txt\tduplicate\toriginal.txt\t1000\t\t\t8192\t1\n"
1459                                   "original2.txt\tduplicate\toriginal2.txt\t1000\t\t\t8192\t2\n"
1460                                   "original3.txt\tduplicate2\toriginal3.txt\t1000\t\t\t8192\t3\n";
1461 
1462 static const CHAR rd_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1463                                      "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1464                                      "Feature\tFeature\n"
1465                                      "duplicate\t\t\tduplicate feature\t1\t2\tMSITESTDIR\t\n";
1466 
1467 static const CHAR rd_feature_comp_dat[] = "Feature_\tComponent_\n"
1468                                           "s38\ts72\n"
1469                                           "FeatureComponents\tFeature_\tComponent_\n"
1470                                           "duplicate\tduplicate\n";
1471 
1472 static const CHAR rd_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1473                                        "s72\tS38\ts72\ti2\tS255\tS72\n"
1474                                        "Component\tComponent\n"
1475                                        "duplicate\t{EB45D06A-ADFE-44E3-8D41-B7DE150E41AD}\tMSITESTDIR\t\t\toriginal.txt\n"
1476                                        "duplicate2\t{B8BA60E0-B2E9-488E-9D0E-E60F25F04F97}\tMSITESTDIR\t\tDUPLICATE2=1\toriginal3.txt\n";
1477 
1478 static const CHAR rd_duplicate_file_dat[] = "FileKey\tComponent_\tFile_\tDestName\tDestFolder\n"
1479                                             "s72\ts72\ts72\tS255\tS72\n"
1480                                             "DuplicateFile\tFileKey\n"
1481                                             "duplicate\tduplicate\toriginal.txt\tduplicate.txt\t\n"
1482                                             "duplicate2\tduplicate\toriginal2.txt\t\tMSITESTDIR\n"
1483                                             "duplicate3\tduplicate2\toriginal3.txt\tduplicate2.txt\t\n";
1484 
1485 static const CHAR rd_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1486                                               "s72\tS255\tI2\n"
1487                                               "InstallExecuteSequence\tAction\n"
1488                                               "LaunchConditions\t\t100\n"
1489                                               "CostInitialize\t\t800\n"
1490                                               "FileCost\t\t900\n"
1491                                               "CostFinalize\t\t1000\n"
1492                                               "InstallValidate\t\t1400\n"
1493                                               "InstallInitialize\t\t1500\n"
1494                                               "ProcessComponents\t\t1600\n"
1495                                               "RemoveDuplicateFiles\t\t1900\n"
1496                                               "InstallFiles\t\t2000\n"
1497                                               "DuplicateFiles\t\t2100\n"
1498                                               "RegisterProduct\t\t5000\n"
1499                                               "PublishFeatures\t\t5100\n"
1500                                               "PublishProduct\t\t5200\n"
1501                                               "InstallFinalize\t\t6000\n";
1502 
1503 static const CHAR rrv_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1504                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1505                                    "File\tFile\n"
1506                                    "registry.txt\tregistry\tregistry.txt\t1000\t\t\t8192\t1\n";
1507 
1508 static const CHAR rrv_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1509                                       "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1510                                       "Feature\tFeature\n"
1511                                       "registry\t\t\tregistry feature\t1\t2\tMSITESTDIR\t\n";
1512 
1513 static const CHAR rrv_feature_comp_dat[] = "Feature_\tComponent_\n"
1514                                            "s38\ts72\n"
1515                                            "FeatureComponents\tFeature_\tComponent_\n"
1516                                            "registry\tregistry\n";
1517 
1518 static const CHAR rrv_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1519                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
1520                                         "Component\tComponent\n"
1521                                         "registry\t{DA97585B-962D-45EB-AD32-DA15E60CA9EE}\tMSITESTDIR\t\t\tregistry.txt\n";
1522 
1523 static const CHAR rrv_registry_dat[] = "Registry\tRoot\tKey\tName\tValue\tComponent_\n"
1524                                        "s72\ti2\tl255\tL255\tL0\ts72\n"
1525                                        "Registry\tRegistry\n"
1526                                        "reg1\t2\tSOFTWARE\\Wine\\keyA\t\tA\tregistry\n"
1527                                        "reg2\t2\tSOFTWARE\\Wine\\keyA\tvalueA\tA\tregistry\n"
1528                                        "reg3\t2\tSOFTWARE\\Wine\\key1\t-\t\tregistry\n";
1529 
1530 static const CHAR rrv_remove_registry_dat[] = "RemoveRegistry\tRoot\tKey\tName\tComponent_\n"
1531                                               "s72\ti2\tl255\tL255\ts72\n"
1532                                               "RemoveRegistry\tRemoveRegistry\n"
1533                                               "reg1\t2\tSOFTWARE\\Wine\\keyB\t\tregistry\n"
1534                                               "reg2\t2\tSOFTWARE\\Wine\\keyB\tValueB\tregistry\n"
1535                                               "reg3\t2\tSOFTWARE\\Wine\\key2\t-\tregistry\n";
1536 
1537 static const CHAR rrv_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1538                                                "s72\tS255\tI2\n"
1539                                                "InstallExecuteSequence\tAction\n"
1540                                                "LaunchConditions\t\t100\n"
1541                                                "CostInitialize\t\t800\n"
1542                                                "FileCost\t\t900\n"
1543                                                "CostFinalize\t\t1000\n"
1544                                                "InstallValidate\t\t1400\n"
1545                                                "InstallInitialize\t\t1500\n"
1546                                                "ProcessComponents\t\t1600\n"
1547                                                "RemoveFiles\t\t1700\n"
1548                                                "InstallFiles\t\t2000\n"
1549                                                "RemoveRegistryValues\t\t3000\n"
1550                                                "RegisterProduct\t\t5000\n"
1551                                                "PublishFeatures\t\t5100\n"
1552                                                "PublishProduct\t\t5200\n"
1553                                                "InstallFinalize\t\t6000\n";
1554 
1555 static const CHAR frp_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1556                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1557                                    "File\tFile\n"
1558                                    "product.txt\tproduct\tproduct.txt\t1000\t\t\t8192\t1\n";
1559 
1560 static const CHAR frp_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1561                                       "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1562                                       "Feature\tFeature\n"
1563                                       "product\t\t\tproduct feature\t1\t2\tMSITESTDIR\t\n";
1564 
1565 static const CHAR frp_feature_comp_dat[] = "Feature_\tComponent_\n"
1566                                            "s38\ts72\n"
1567                                            "FeatureComponents\tFeature_\tComponent_\n"
1568                                            "product\tproduct\n";
1569 
1570 static const CHAR frp_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1571                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
1572                                         "Component\tComponent\n"
1573                                         "product\t{44725EE0-EEA8-40BD-8162-A48224A2FEA1}\tMSITESTDIR\t\t\tproduct.txt\n";
1574 
1575 static const CHAR frp_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n"
1576                                             "s72\ti2\tS64\tS0\tS255\n"
1577                                             "CustomAction\tAction\n"
1578                                             "TestProp\t19\t\t\tPROP set\n";
1579 
1580 static const CHAR frp_upgrade_dat[] = "UpgradeCode\tVersionMin\tVersionMax\tLanguage\tAttributes\tRemove\tActionProperty\n"
1581                                       "s38\tS20\tS20\tS255\ti4\tS255\ts72\n"
1582                                       "Upgrade\tUpgradeCode\tVersionMin\tVersionMax\tLanguage\tAttributes\n"
1583                                       "{4C0EAA15-0264-4E5A-8758-609EF142B92D}\t1.1.1\t2.2.2\t\t768\t\tPROP\n";
1584 
1585 static const CHAR frp_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1586                                                "s72\tS255\tI2\n"
1587                                                "InstallExecuteSequence\tAction\n"
1588                                                "FindRelatedProducts\t\t50\n"
1589                                                "TestProp\tPROP AND NOT REMOVE\t51\n"
1590                                                "LaunchConditions\t\t100\n"
1591                                                "CostInitialize\t\t800\n"
1592                                                "FileCost\t\t900\n"
1593                                                "CostFinalize\t\t1000\n"
1594                                                "InstallValidate\t\t1400\n"
1595                                                "InstallInitialize\t\t1500\n"
1596                                                "ProcessComponents\t\t1600\n"
1597                                                "RemoveFiles\t\t1700\n"
1598                                                "InstallFiles\t\t2000\n"
1599                                                "RegisterProduct\t\t5000\n"
1600                                                "PublishFeatures\t\t5100\n"
1601                                                "PublishProduct\t\t5200\n"
1602                                                "InstallFinalize\t\t6000\n";
1603 
1604 static const CHAR riv_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1605                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1606                                    "File\tFile\n"
1607                                    "inifile.txt\tinifile\tinifile.txt\t1000\t\t\t8192\t1\n";
1608 
1609 static const CHAR riv_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1610                                       "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1611                                       "Feature\tFeature\n"
1612                                       "inifile\t\t\tinifile feature\t1\t2\tMSITESTDIR\t\n";
1613 
1614 static const CHAR riv_feature_comp_dat[] = "Feature_\tComponent_\n"
1615                                            "s38\ts72\n"
1616                                            "FeatureComponents\tFeature_\tComponent_\n"
1617                                            "inifile\tinifile\n";
1618 
1619 static const CHAR riv_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1620                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
1621                                         "Component\tComponent\n"
1622                                         "inifile\t{A0F15705-4F57-4437-88C4-6C8B37ACC6DE}\tMSITESTDIR\t\t\tinifile.txt\n";
1623 
1624 static const CHAR riv_ini_file_dat[] = "IniFile\tFileName\tDirProperty\tSection\tKey\tValue\tAction\tComponent_\n"
1625                                        "s72\tl255\tS72\tl96\tl128\tl255\ti2\ts72\n"
1626                                        "IniFile\tIniFile\n"
1627                                        "inifile1\ttest.ini\tMSITESTDIR\tsection1\tkey1\tvalue1\t\tinifile\n";
1628 
1629 static const CHAR riv_remove_ini_file_dat[] = "RemoveIniFile\tFileName\tDirProperty\tSection\tKey\tValue\tAction\tComponent_\n"
1630                                               "s72\tl255\tS72\tl96\tl128\tL255\ti2\ts72\n"
1631                                               "RemoveIniFile\tRemoveIniFile\n"
1632                                               "inifile1\ttest.ini\tMSITESTDIR\tsectionA\tkeyA\tvalueA\t2\tinifile\n";
1633 
1634 static const CHAR riv_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1635                                                "s72\tS255\tI2\n"
1636                                                "InstallExecuteSequence\tAction\n"
1637                                                "LaunchConditions\t\t100\n"
1638                                                "CostInitialize\t\t800\n"
1639                                                "FileCost\t\t900\n"
1640                                                "CostFinalize\t\t1000\n"
1641                                                "InstallValidate\t\t1400\n"
1642                                                "InstallInitialize\t\t1500\n"
1643                                                "ProcessComponents\t\t1600\n"
1644                                                "RemoveFiles\t\t1700\n"
1645                                                "InstallFiles\t\t2000\n"
1646                                                "RemoveIniValues\t\t3000\n"
1647                                                "RegisterProduct\t\t5000\n"
1648                                                "PublishFeatures\t\t5100\n"
1649                                                "PublishProduct\t\t5200\n"
1650                                                "InstallFinalize\t\t6000\n";
1651 
1652 static const CHAR res_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
1653                                    "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
1654                                    "File\tFile\n"
1655                                    "envvar.txt\tenvvar\tenvvar.txt\t1000\t\t\t8192\t1\n";
1656 
1657 static const CHAR res_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
1658                                       "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
1659                                       "Feature\tFeature\n"
1660                                       "envvar\t\t\tenvvar feature\t1\t2\tMSITESTDIR\t\n";
1661 
1662 static const CHAR res_feature_comp_dat[] = "Feature_\tComponent_\n"
1663                                            "s38\ts72\n"
1664                                            "FeatureComponents\tFeature_\tComponent_\n"
1665                                            "envvar\tenvvar\n";
1666 
1667 static const CHAR res_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
1668                                         "s72\tS38\ts72\ti2\tS255\tS72\n"
1669                                         "Component\tComponent\n"
1670                                         "envvar\t{45EE9AF4-E5D1-445F-8BB7-B22D4EEBD29E}\tMSITESTDIR\t\t\tenvvar.txt\n";
1671 
1672 static const CHAR res_environment_dat[] = "Environment\tName\tValue\tComponent_\n"
1673                                           "s72\tl255\tL255\ts72\n"
1674                                           "Environment\tEnvironment\n"
1675                                           "var1\t=-MSITESTVAR1\t1\tenvvar\n"
1676                                           "var2\t=+-MSITESTVAR2\t1\tenvvar\n"
1677                                           "var3\t=MSITESTVAR3\t1\tenvvar\n"
1678                                           "var4\t=-MSITESTVAR4\t\tenvvar\n"
1679                                           "var5\t=MSITESTVAR5\t\tenvvar\n";
1680 
1681 static const CHAR res_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
1682                                                "s72\tS255\tI2\n"
1683                                                "InstallExecuteSequence\tAction\n"
1684                                                "LaunchConditions\t\t100\n"
1685                                                "CostInitialize\t\t800\n"
1686                                                "FileCost\t\t900\n"
1687                                                "CostFinalize\t\t1000\n"
1688                                                "InstallValidate\t\t1400\n"
1689                                                "InstallInitialize\t\t1500\n"
1690                                                "ProcessComponents\t\t1600\n"
1691                                                "RemoveFiles\t\t1700\n"
1692                                                "InstallFiles\t\t2000\n"
1693                                                "RemoveEnvironmentStrings\t\t3000\n"
1694                                                "RegisterProduct\t\t5000\n"
1695                                                "PublishFeatures\t\t5100\n"
1696                                                "PublishProduct\t\t5200\n"
1697                                                "InstallFinalize\t\t6000\n";
1698 
1699 typedef struct _msi_table
1700 {
1701     const CHAR *filename;
1702     const CHAR *data;
1703     int size;
1704 } msi_table;
1705 
1706 #define ADD_TABLE(x) {#x".idt", x##_dat, sizeof(x##_dat)}
1707 
1708 static const msi_table tables[] =
1709 {
1710     ADD_TABLE(component),
1711     ADD_TABLE(directory),
1712     ADD_TABLE(feature),
1713     ADD_TABLE(feature_comp),
1714     ADD_TABLE(file),
1715     ADD_TABLE(install_exec_seq),
1716     ADD_TABLE(media),
1717     ADD_TABLE(property),
1718     ADD_TABLE(registry),
1719     ADD_TABLE(service_install),
1720     ADD_TABLE(service_control)
1721 };
1722 
1723 static const msi_table sc_tables[] =
1724 {
1725     ADD_TABLE(component),
1726     ADD_TABLE(directory),
1727     ADD_TABLE(feature),
1728     ADD_TABLE(feature_comp),
1729     ADD_TABLE(file),
1730     ADD_TABLE(install_exec_seq),
1731     ADD_TABLE(media),
1732     ADD_TABLE(property),
1733     ADD_TABLE(shortcut)
1734 };
1735 
1736 static const msi_table ps_tables[] =
1737 {
1738     ADD_TABLE(component),
1739     ADD_TABLE(directory),
1740     ADD_TABLE(feature),
1741     ADD_TABLE(feature_comp),
1742     ADD_TABLE(file),
1743     ADD_TABLE(install_exec_seq),
1744     ADD_TABLE(media),
1745     ADD_TABLE(property),
1746     ADD_TABLE(condition)
1747 };
1748 
1749 static const msi_table env_tables[] =
1750 {
1751     ADD_TABLE(component),
1752     ADD_TABLE(directory),
1753     ADD_TABLE(feature),
1754     ADD_TABLE(feature_comp),
1755     ADD_TABLE(file),
1756     ADD_TABLE(install_exec_seq),
1757     ADD_TABLE(media),
1758     ADD_TABLE(property),
1759     ADD_TABLE(environment)
1760 };
1761 
1762 static const msi_table up_tables[] =
1763 {
1764     ADD_TABLE(component),
1765     ADD_TABLE(directory),
1766     ADD_TABLE(feature),
1767     ADD_TABLE(feature_comp),
1768     ADD_TABLE(file),
1769     ADD_TABLE(install_exec_seq),
1770     ADD_TABLE(media),
1771     ADD_TABLE(up_property),
1772     ADD_TABLE(registry),
1773     ADD_TABLE(service_install),
1774     ADD_TABLE(service_control)
1775 };
1776 
1777 static const msi_table up2_tables[] =
1778 {
1779     ADD_TABLE(component),
1780     ADD_TABLE(directory),
1781     ADD_TABLE(feature),
1782     ADD_TABLE(feature_comp),
1783     ADD_TABLE(file),
1784     ADD_TABLE(install_exec_seq),
1785     ADD_TABLE(media),
1786     ADD_TABLE(up2_property),
1787     ADD_TABLE(registry),
1788     ADD_TABLE(service_install),
1789     ADD_TABLE(service_control)
1790 };
1791 
1792 static const msi_table up3_tables[] =
1793 {
1794     ADD_TABLE(component),
1795     ADD_TABLE(directory),
1796     ADD_TABLE(feature),
1797     ADD_TABLE(feature_comp),
1798     ADD_TABLE(file),
1799     ADD_TABLE(install_exec_seq),
1800     ADD_TABLE(media),
1801     ADD_TABLE(up3_property),
1802     ADD_TABLE(registry),
1803     ADD_TABLE(service_install),
1804     ADD_TABLE(service_control)
1805 };
1806 
1807 static const msi_table up4_tables[] =
1808 {
1809     ADD_TABLE(component),
1810     ADD_TABLE(directory),
1811     ADD_TABLE(feature),
1812     ADD_TABLE(feature_comp),
1813     ADD_TABLE(file),
1814     ADD_TABLE(pp_install_exec_seq),
1815     ADD_TABLE(media),
1816     ADD_TABLE(property),
1817     ADD_TABLE(registry),
1818     ADD_TABLE(service_install),
1819     ADD_TABLE(service_control)
1820 };
1821 
1822 static const msi_table up5_tables[] =
1823 {
1824     ADD_TABLE(component),
1825     ADD_TABLE(directory),
1826     ADD_TABLE(feature),
1827     ADD_TABLE(feature_comp),
1828     ADD_TABLE(file),
1829     ADD_TABLE(pp_install_exec_seq),
1830     ADD_TABLE(media),
1831     ADD_TABLE(up_property),
1832     ADD_TABLE(registry),
1833     ADD_TABLE(service_install),
1834     ADD_TABLE(service_control)
1835 };
1836 
1837 static const msi_table up6_tables[] =
1838 {
1839     ADD_TABLE(component),
1840     ADD_TABLE(directory),
1841     ADD_TABLE(feature),
1842     ADD_TABLE(feature_comp),
1843     ADD_TABLE(file),
1844     ADD_TABLE(pp_install_exec_seq),
1845     ADD_TABLE(media),
1846     ADD_TABLE(up2_property),
1847     ADD_TABLE(registry),
1848     ADD_TABLE(service_install),
1849     ADD_TABLE(service_control)
1850 };
1851 
1852 static const msi_table up7_tables[] =
1853 {
1854     ADD_TABLE(component),
1855     ADD_TABLE(directory),
1856     ADD_TABLE(feature),
1857     ADD_TABLE(feature_comp),
1858     ADD_TABLE(file),
1859     ADD_TABLE(pp_install_exec_seq),
1860     ADD_TABLE(media),
1861     ADD_TABLE(up3_property),
1862     ADD_TABLE(registry),
1863     ADD_TABLE(service_install),
1864     ADD_TABLE(service_control)
1865 };
1866 
1867 static const msi_table cc_tables[] =
1868 {
1869     ADD_TABLE(cc_component),
1870     ADD_TABLE(directory),
1871     ADD_TABLE(cc_feature),
1872     ADD_TABLE(cc_feature_comp),
1873     ADD_TABLE(cc_file),
1874     ADD_TABLE(install_exec_seq),
1875     ADD_TABLE(cc_media),
1876     ADD_TABLE(property),
1877 };
1878 
1879 static const msi_table cc2_tables[] =
1880 {
1881     ADD_TABLE(cc2_component),
1882     ADD_TABLE(directory),
1883     ADD_TABLE(cc_feature),
1884     ADD_TABLE(cc_feature_comp),
1885     ADD_TABLE(cc2_file),
1886     ADD_TABLE(install_exec_seq),
1887     ADD_TABLE(cc_media),
1888     ADD_TABLE(property),
1889 };
1890 
1891 static const msi_table co_tables[] =
1892 {
1893     ADD_TABLE(cc_component),
1894     ADD_TABLE(directory),
1895     ADD_TABLE(cc_feature),
1896     ADD_TABLE(cc_feature_comp),
1897     ADD_TABLE(co_file),
1898     ADD_TABLE(install_exec_seq),
1899     ADD_TABLE(co_media),
1900     ADD_TABLE(property),
1901 };
1902 
1903 static const msi_table co2_tables[] =
1904 {
1905     ADD_TABLE(cc_component),
1906     ADD_TABLE(directory),
1907     ADD_TABLE(cc_feature),
1908     ADD_TABLE(cc_feature_comp),
1909     ADD_TABLE(cc_file),
1910     ADD_TABLE(install_exec_seq),
1911     ADD_TABLE(co2_media),
1912     ADD_TABLE(property),
1913 };
1914 
1915 static const msi_table mm_tables[] =
1916 {
1917     ADD_TABLE(cc_component),
1918     ADD_TABLE(directory),
1919     ADD_TABLE(cc_feature),
1920     ADD_TABLE(cc_feature_comp),
1921     ADD_TABLE(mm_file),
1922     ADD_TABLE(install_exec_seq),
1923     ADD_TABLE(mm_media),
1924     ADD_TABLE(property),
1925 };
1926 
1927 static const msi_table ss_tables[] =
1928 {
1929     ADD_TABLE(cc_component),
1930     ADD_TABLE(directory),
1931     ADD_TABLE(cc_feature),
1932     ADD_TABLE(cc_feature_comp),
1933     ADD_TABLE(cc_file),
1934     ADD_TABLE(install_exec_seq),
1935     ADD_TABLE(ss_media),
1936     ADD_TABLE(property),
1937 };
1938 
1939 static const msi_table ui_tables[] =
1940 {
1941     ADD_TABLE(ui_component),
1942     ADD_TABLE(directory),
1943     ADD_TABLE(cc_feature),
1944     ADD_TABLE(cc_feature_comp),
1945     ADD_TABLE(cc_file),
1946     ADD_TABLE(install_exec_seq),
1947     ADD_TABLE(ui_install_ui_seq),
1948     ADD_TABLE(ui_custom_action),
1949     ADD_TABLE(cc_media),
1950     ADD_TABLE(property),
1951 };
1952 
1953 static const msi_table rof_tables[] =
1954 {
1955     ADD_TABLE(rof_component),
1956     ADD_TABLE(directory),
1957     ADD_TABLE(rof_feature),
1958     ADD_TABLE(rof_feature_comp),
1959     ADD_TABLE(rof_file),
1960     ADD_TABLE(install_exec_seq),
1961     ADD_TABLE(rof_media),
1962     ADD_TABLE(property),
1963 };
1964 
1965 static const msi_table rofc_tables[] =
1966 {
1967     ADD_TABLE(rof_component),
1968     ADD_TABLE(directory),
1969     ADD_TABLE(rof_feature),
1970     ADD_TABLE(rof_feature_comp),
1971     ADD_TABLE(rofc_file),
1972     ADD_TABLE(install_exec_seq),
1973     ADD_TABLE(rofc_media),
1974     ADD_TABLE(property),
1975 };
1976 
1977 static const msi_table sdp_tables[] =
1978 {
1979     ADD_TABLE(rof_component),
1980     ADD_TABLE(directory),
1981     ADD_TABLE(rof_feature),
1982     ADD_TABLE(rof_feature_comp),
1983     ADD_TABLE(rof_file),
1984     ADD_TABLE(sdp_install_exec_seq),
1985     ADD_TABLE(sdp_custom_action),
1986     ADD_TABLE(rof_media),
1987     ADD_TABLE(property),
1988 };
1989 
1990 static const msi_table cie_tables[] =
1991 {
1992     ADD_TABLE(cie_component),
1993     ADD_TABLE(directory),
1994     ADD_TABLE(cc_feature),
1995     ADD_TABLE(cie_feature_comp),
1996     ADD_TABLE(cie_file),
1997     ADD_TABLE(install_exec_seq),
1998     ADD_TABLE(cie_media),
1999     ADD_TABLE(property),
2000 };
2001 
2002 static const msi_table ci_tables[] =
2003 {
2004     ADD_TABLE(ci_component),
2005     ADD_TABLE(directory),
2006     ADD_TABLE(rof_feature),
2007     ADD_TABLE(rof_feature_comp),
2008     ADD_TABLE(rof_file),
2009     ADD_TABLE(ci_install_exec_seq),
2010     ADD_TABLE(rof_media),
2011     ADD_TABLE(property),
2012     ADD_TABLE(ci_custom_action),
2013 };
2014 
2015 static const msi_table ci2_tables[] =
2016 {
2017     ADD_TABLE(ci2_component),
2018     ADD_TABLE(directory),
2019     ADD_TABLE(rof_feature),
2020     ADD_TABLE(ci2_feature_comp),
2021     ADD_TABLE(ci2_file),
2022     ADD_TABLE(install_exec_seq),
2023     ADD_TABLE(rof_media),
2024     ADD_TABLE(property),
2025 };
2026 
2027 static const msi_table spf_tables[] =
2028 {
2029     ADD_TABLE(ci_component),
2030     ADD_TABLE(directory),
2031     ADD_TABLE(rof_feature),
2032     ADD_TABLE(rof_feature_comp),
2033     ADD_TABLE(rof_file),
2034     ADD_TABLE(spf_install_exec_seq),
2035     ADD_TABLE(rof_media),
2036     ADD_TABLE(property),
2037     ADD_TABLE(spf_custom_action),
2038     ADD_TABLE(spf_install_ui_seq),
2039 };
2040 
2041 static const msi_table pp_tables[] =
2042 {
2043     ADD_TABLE(ci_component),
2044     ADD_TABLE(directory),
2045     ADD_TABLE(rof_feature),
2046     ADD_TABLE(rof_feature_comp),
2047     ADD_TABLE(rof_file),
2048     ADD_TABLE(pp_install_exec_seq),
2049     ADD_TABLE(rof_media),
2050     ADD_TABLE(property),
2051 };
2052 
2053 static const msi_table ppc_tables[] =
2054 {
2055     ADD_TABLE(ppc_component),
2056     ADD_TABLE(directory),
2057     ADD_TABLE(rof_feature),
2058     ADD_TABLE(ppc_feature_comp),
2059     ADD_TABLE(ppc_file),
2060     ADD_TABLE(pp_install_exec_seq),
2061     ADD_TABLE(ppc_media),
2062     ADD_TABLE(property),
2063 };
2064 
2065 static const msi_table lus0_tables[] =
2066 {
2067     ADD_TABLE(ci_component),
2068     ADD_TABLE(directory),
2069     ADD_TABLE(rof_feature),
2070     ADD_TABLE(rof_feature_comp),
2071     ADD_TABLE(rof_file),
2072     ADD_TABLE(pp_install_exec_seq),
2073     ADD_TABLE(rof_media),
2074     ADD_TABLE(property),
2075 };
2076 
2077 static const msi_table lus1_tables[] =
2078 {
2079     ADD_TABLE(ci_component),
2080     ADD_TABLE(directory),
2081     ADD_TABLE(rof_feature),
2082     ADD_TABLE(rof_feature_comp),
2083     ADD_TABLE(rof_file),
2084     ADD_TABLE(pp_install_exec_seq),
2085     ADD_TABLE(rofc_media),
2086     ADD_TABLE(property),
2087 };
2088 
2089 static const msi_table lus2_tables[] =
2090 {
2091     ADD_TABLE(ci_component),
2092     ADD_TABLE(directory),
2093     ADD_TABLE(rof_feature),
2094     ADD_TABLE(rof_feature_comp),
2095     ADD_TABLE(rof_file),
2096     ADD_TABLE(pp_install_exec_seq),
2097     ADD_TABLE(lus2_media),
2098     ADD_TABLE(property),
2099 };
2100 
2101 static const msi_table tp_tables[] =
2102 {
2103     ADD_TABLE(tp_component),
2104     ADD_TABLE(directory),
2105     ADD_TABLE(rof_feature),
2106     ADD_TABLE(ci2_feature_comp),
2107     ADD_TABLE(ci2_file),
2108     ADD_TABLE(install_exec_seq),
2109     ADD_TABLE(rof_media),
2110     ADD_TABLE(property),
2111 };
2112 
2113 static const msi_table cwd_tables[] =
2114 {
2115     ADD_TABLE(cwd_component),
2116     ADD_TABLE(directory),
2117     ADD_TABLE(rof_feature),
2118     ADD_TABLE(ci2_feature_comp),
2119     ADD_TABLE(ci2_file),
2120     ADD_TABLE(install_exec_seq),
2121     ADD_TABLE(rof_media),
2122     ADD_TABLE(property),
2123 };
2124 
2125 static const msi_table adm_tables[] =
2126 {
2127     ADD_TABLE(adm_component),
2128     ADD_TABLE(directory),
2129     ADD_TABLE(rof_feature),
2130     ADD_TABLE(ci2_feature_comp),
2131     ADD_TABLE(ci2_file),
2132     ADD_TABLE(install_exec_seq),
2133     ADD_TABLE(rof_media),
2134     ADD_TABLE(property),
2135     ADD_TABLE(adm_custom_action),
2136     ADD_TABLE(adm_admin_exec_seq),
2137 };
2138 
2139 static const msi_table amp_tables[] =
2140 {
2141     ADD_TABLE(amp_component),
2142     ADD_TABLE(directory),
2143     ADD_TABLE(rof_feature),
2144     ADD_TABLE(ci2_feature_comp),
2145     ADD_TABLE(ci2_file),
2146     ADD_TABLE(install_exec_seq),
2147     ADD_TABLE(rof_media),
2148     ADD_TABLE(property),
2149 };
2150 
2151 static const msi_table rem_tables[] =
2152 {
2153     ADD_TABLE(rem_component),
2154     ADD_TABLE(directory),
2155     ADD_TABLE(rof_feature),
2156     ADD_TABLE(rem_feature_comp),
2157     ADD_TABLE(rem_file),
2158     ADD_TABLE(rem_install_exec_seq),
2159     ADD_TABLE(rof_media),
2160     ADD_TABLE(property),
2161     ADD_TABLE(rem_remove_files),
2162 };
2163 
2164 static const msi_table mov_tables[] =
2165 {
2166     ADD_TABLE(cwd_component),
2167     ADD_TABLE(directory),
2168     ADD_TABLE(rof_feature),
2169     ADD_TABLE(ci2_feature_comp),
2170     ADD_TABLE(ci2_file),
2171     ADD_TABLE(install_exec_seq),
2172     ADD_TABLE(rof_media),
2173     ADD_TABLE(property),
2174     ADD_TABLE(mov_move_file),
2175 };
2176 
2177 static const msi_table mc_tables[] =
2178 {
2179     ADD_TABLE(mc_component),
2180     ADD_TABLE(directory),
2181     ADD_TABLE(cc_feature),
2182     ADD_TABLE(cie_feature_comp),
2183     ADD_TABLE(mc_file),
2184     ADD_TABLE(install_exec_seq),
2185     ADD_TABLE(mc_media),
2186     ADD_TABLE(property),
2187     ADD_TABLE(mc_file_hash),
2188 };
2189 
2190 static const msi_table df_tables[] =
2191 {
2192     ADD_TABLE(rof_component),
2193     ADD_TABLE(df_directory),
2194     ADD_TABLE(rof_feature),
2195     ADD_TABLE(rof_feature_comp),
2196     ADD_TABLE(rof_file),
2197     ADD_TABLE(install_exec_seq),
2198     ADD_TABLE(rof_media),
2199     ADD_TABLE(property),
2200     ADD_TABLE(df_duplicate_file),
2201 };
2202 
2203 static const msi_table wrv_tables[] =
2204 {
2205     ADD_TABLE(wrv_component),
2206     ADD_TABLE(directory),
2207     ADD_TABLE(rof_feature),
2208     ADD_TABLE(ci2_feature_comp),
2209     ADD_TABLE(ci2_file),
2210     ADD_TABLE(install_exec_seq),
2211     ADD_TABLE(rof_media),
2212     ADD_TABLE(property),
2213     ADD_TABLE(wrv_registry),
2214 };
2215 
2216 static const msi_table sf_tables[] =
2217 {
2218     ADD_TABLE(wrv_component),
2219     ADD_TABLE(directory),
2220     ADD_TABLE(rof_feature),
2221     ADD_TABLE(ci2_feature_comp),
2222     ADD_TABLE(ci2_file),
2223     ADD_TABLE(install_exec_seq),
2224     ADD_TABLE(rof_media),
2225     ADD_TABLE(property),
2226 };
2227 
2228 static const msi_table ca51_tables[] =
2229 {
2230     ADD_TABLE(ca51_component),
2231     ADD_TABLE(directory),
2232     ADD_TABLE(rof_feature),
2233     ADD_TABLE(ci2_feature_comp),
2234     ADD_TABLE(ci2_file),
2235     ADD_TABLE(ca51_install_exec_seq),
2236     ADD_TABLE(rof_media),
2237     ADD_TABLE(property),
2238     ADD_TABLE(ca51_custom_action),
2239 };
2240 
2241 static const msi_table is_tables[] =
2242 {
2243     ADD_TABLE(is_component),
2244     ADD_TABLE(directory),
2245     ADD_TABLE(is_feature),
2246     ADD_TABLE(is_feature_comp),
2247     ADD_TABLE(is_file),
2248     ADD_TABLE(install_exec_seq),
2249     ADD_TABLE(is_media),
2250     ADD_TABLE(property),
2251 };
2252 
2253 static const msi_table sp_tables[] =
2254 {
2255     ADD_TABLE(sp_component),
2256     ADD_TABLE(sp_directory),
2257     ADD_TABLE(rof_feature),
2258     ADD_TABLE(ci2_feature_comp),
2259     ADD_TABLE(ci2_file),
2260     ADD_TABLE(install_exec_seq),
2261     ADD_TABLE(rof_media),
2262     ADD_TABLE(property),
2263 };
2264 
2265 static const msi_table mcp_tables[] =
2266 {
2267     ADD_TABLE(mcp_component),
2268     ADD_TABLE(directory),
2269     ADD_TABLE(mcp_feature),
2270     ADD_TABLE(mcp_feature_comp),
2271     ADD_TABLE(rem_file),
2272     ADD_TABLE(rem_install_exec_seq),
2273     ADD_TABLE(rof_media),
2274     ADD_TABLE(property),
2275 };
2276 
2277 static const msi_table mcomp_tables[] =
2278 {
2279     ADD_TABLE(mcp_component),
2280     ADD_TABLE(directory),
2281     ADD_TABLE(mcp_feature),
2282     ADD_TABLE(mcp_feature_comp),
2283     ADD_TABLE(mcomp_file),
2284     ADD_TABLE(rem_install_exec_seq),
2285     ADD_TABLE(rof_media),
2286     ADD_TABLE(property),
2287 };
2288 
2289 static const msi_table ai_tables[] =
2290 {
2291     ADD_TABLE(component),
2292     ADD_TABLE(directory),
2293     ADD_TABLE(feature),
2294     ADD_TABLE(feature_comp),
2295     ADD_TABLE(ai_file),
2296     ADD_TABLE(install_exec_seq),
2297     ADD_TABLE(media),
2298     ADD_TABLE(property)
2299 };
2300 
2301 static const msi_table pc_tables[] =
2302 {
2303     ADD_TABLE(ca51_component),
2304     ADD_TABLE(directory),
2305     ADD_TABLE(rof_feature),
2306     ADD_TABLE(ci2_feature_comp),
2307     ADD_TABLE(ci2_file),
2308     ADD_TABLE(install_exec_seq),
2309     ADD_TABLE(rof_media),
2310     ADD_TABLE(property)
2311 };
2312 
2313 static const msi_table ip_tables[] =
2314 {
2315     ADD_TABLE(component),
2316     ADD_TABLE(directory),
2317     ADD_TABLE(feature),
2318     ADD_TABLE(feature_comp),
2319     ADD_TABLE(file),
2320     ADD_TABLE(ip_install_exec_seq),
2321     ADD_TABLE(ip_custom_action),
2322     ADD_TABLE(media),
2323     ADD_TABLE(property)
2324 };
2325 
2326 static const msi_table aup_tables[] =
2327 {
2328     ADD_TABLE(component),
2329     ADD_TABLE(directory),
2330     ADD_TABLE(feature),
2331     ADD_TABLE(feature_comp),
2332     ADD_TABLE(file),
2333     ADD_TABLE(aup_install_exec_seq),
2334     ADD_TABLE(aup_custom_action),
2335     ADD_TABLE(media),
2336     ADD_TABLE(property)
2337 };
2338 
2339 static const msi_table aup2_tables[] =
2340 {
2341     ADD_TABLE(component),
2342     ADD_TABLE(directory),
2343     ADD_TABLE(feature),
2344     ADD_TABLE(feature_comp),
2345     ADD_TABLE(file),
2346     ADD_TABLE(aup2_install_exec_seq),
2347     ADD_TABLE(aup_custom_action),
2348     ADD_TABLE(media),
2349     ADD_TABLE(aup_property)
2350 };
2351 
2352 static const msi_table aup3_tables[] =
2353 {
2354     ADD_TABLE(component),
2355     ADD_TABLE(directory),
2356     ADD_TABLE(feature),
2357     ADD_TABLE(feature_comp),
2358     ADD_TABLE(file),
2359     ADD_TABLE(aup2_install_exec_seq),
2360     ADD_TABLE(aup_custom_action),
2361     ADD_TABLE(media),
2362     ADD_TABLE(aup2_property)
2363 };
2364 
2365 static const msi_table aup4_tables[] =
2366 {
2367     ADD_TABLE(component),
2368     ADD_TABLE(directory),
2369     ADD_TABLE(feature),
2370     ADD_TABLE(feature_comp),
2371     ADD_TABLE(file),
2372     ADD_TABLE(aup3_install_exec_seq),
2373     ADD_TABLE(aup_custom_action),
2374     ADD_TABLE(media),
2375     ADD_TABLE(aup2_property)
2376 };
2377 
2378 static const msi_table fiu_tables[] =
2379 {
2380     ADD_TABLE(rof_component),
2381     ADD_TABLE(directory),
2382     ADD_TABLE(rof_feature),
2383     ADD_TABLE(rof_feature_comp),
2384     ADD_TABLE(rof_file),
2385     ADD_TABLE(pp_install_exec_seq),
2386     ADD_TABLE(rof_media),
2387     ADD_TABLE(property),
2388 };
2389 
2390 static const msi_table fiuc_tables[] =
2391 {
2392     ADD_TABLE(rof_component),
2393     ADD_TABLE(directory),
2394     ADD_TABLE(rof_feature),
2395     ADD_TABLE(rof_feature_comp),
2396     ADD_TABLE(rofc_file),
2397     ADD_TABLE(pp_install_exec_seq),
2398     ADD_TABLE(rofc_media),
2399     ADD_TABLE(property),
2400 };
2401 
2402 static const msi_table cf_tables[] =
2403 {
2404     ADD_TABLE(component),
2405     ADD_TABLE(directory),
2406     ADD_TABLE(feature),
2407     ADD_TABLE(feature_comp),
2408     ADD_TABLE(file),
2409     ADD_TABLE(cf_create_folders),
2410     ADD_TABLE(cf_install_exec_seq),
2411     ADD_TABLE(cf_custom_action),
2412     ADD_TABLE(media),
2413     ADD_TABLE(property)
2414 };
2415 
2416 static const msi_table rf_tables[] =
2417 {
2418     ADD_TABLE(component),
2419     ADD_TABLE(directory),
2420     ADD_TABLE(feature),
2421     ADD_TABLE(feature_comp),
2422     ADD_TABLE(file),
2423     ADD_TABLE(cf_create_folders),
2424     ADD_TABLE(rf_install_exec_seq),
2425     ADD_TABLE(cf_custom_action),
2426     ADD_TABLE(media),
2427     ADD_TABLE(property)
2428 };
2429 
2430 static const msi_table sss_tables[] =
2431 {
2432     ADD_TABLE(component),
2433     ADD_TABLE(directory),
2434     ADD_TABLE(feature),
2435     ADD_TABLE(feature_comp),
2436     ADD_TABLE(file),
2437     ADD_TABLE(sss_install_exec_seq),
2438     ADD_TABLE(sss_service_control),
2439     ADD_TABLE(media),
2440     ADD_TABLE(property)
2441 };
2442 
2443 static const msi_table sds_tables[] =
2444 {
2445     ADD_TABLE(component),
2446     ADD_TABLE(directory),
2447     ADD_TABLE(feature),
2448     ADD_TABLE(feature_comp),
2449     ADD_TABLE(file),
2450     ADD_TABLE(sss_install_exec_seq),
2451     ADD_TABLE(service_control),
2452     ADD_TABLE(media),
2453     ADD_TABLE(property)
2454 };
2455 
2456 static const msi_table sr_tables[] =
2457 {
2458     ADD_TABLE(component),
2459     ADD_TABLE(directory),
2460     ADD_TABLE(feature),
2461     ADD_TABLE(feature_comp),
2462     ADD_TABLE(file),
2463     ADD_TABLE(sr_selfreg),
2464     ADD_TABLE(sr_install_exec_seq),
2465     ADD_TABLE(media),
2466     ADD_TABLE(property)
2467 };
2468 
2469 static const msi_table font_tables[] =
2470 {
2471     ADD_TABLE(font_component),
2472     ADD_TABLE(directory),
2473     ADD_TABLE(font_feature),
2474     ADD_TABLE(font_feature_comp),
2475     ADD_TABLE(font_file),
2476     ADD_TABLE(font),
2477     ADD_TABLE(font_install_exec_seq),
2478     ADD_TABLE(font_media),
2479     ADD_TABLE(property)
2480 };
2481 
2482 static const msi_table vp_tables[] =
2483 {
2484     ADD_TABLE(component),
2485     ADD_TABLE(directory),
2486     ADD_TABLE(feature),
2487     ADD_TABLE(feature_comp),
2488     ADD_TABLE(file),
2489     ADD_TABLE(vp_custom_action),
2490     ADD_TABLE(vp_install_exec_seq),
2491     ADD_TABLE(media),
2492     ADD_TABLE(vp_property)
2493 };
2494 
2495 static const msi_table odbc_tables[] =
2496 {
2497     ADD_TABLE(odbc_component),
2498     ADD_TABLE(directory),
2499     ADD_TABLE(odbc_feature),
2500     ADD_TABLE(odbc_feature_comp),
2501     ADD_TABLE(odbc_file),
2502     ADD_TABLE(odbc_driver),
2503     ADD_TABLE(odbc_translator),
2504     ADD_TABLE(odbc_datasource),
2505     ADD_TABLE(odbc_install_exec_seq),
2506     ADD_TABLE(odbc_media),
2507     ADD_TABLE(property)
2508 };
2509 
2510 static const msi_table tl_tables[] =
2511 {
2512     ADD_TABLE(tl_component),
2513     ADD_TABLE(directory),
2514     ADD_TABLE(tl_feature),
2515     ADD_TABLE(tl_feature_comp),
2516     ADD_TABLE(tl_file),
2517     ADD_TABLE(tl_typelib),
2518     ADD_TABLE(tl_install_exec_seq),
2519     ADD_TABLE(media),
2520     ADD_TABLE(property)
2521 };
2522 
2523 static const msi_table crs_tables[] =
2524 {
2525     ADD_TABLE(crs_component),
2526     ADD_TABLE(directory),
2527     ADD_TABLE(crs_feature),
2528     ADD_TABLE(crs_feature_comp),
2529     ADD_TABLE(crs_file),
2530     ADD_TABLE(crs_shortcut),
2531     ADD_TABLE(crs_install_exec_seq),
2532     ADD_TABLE(media),
2533     ADD_TABLE(property)
2534 };
2535 
2536 static const msi_table pub_tables[] =
2537 {
2538     ADD_TABLE(directory),
2539     ADD_TABLE(pub_component),
2540     ADD_TABLE(pub_feature),
2541     ADD_TABLE(pub_feature_comp),
2542     ADD_TABLE(pub_file),
2543     ADD_TABLE(pub_publish_component),
2544     ADD_TABLE(pub_install_exec_seq),
2545     ADD_TABLE(media),
2546     ADD_TABLE(property)
2547 };
2548 
2549 static const msi_table rd_tables[] =
2550 {
2551     ADD_TABLE(directory),
2552     ADD_TABLE(rd_component),
2553     ADD_TABLE(rd_feature),
2554     ADD_TABLE(rd_feature_comp),
2555     ADD_TABLE(rd_file),
2556     ADD_TABLE(rd_duplicate_file),
2557     ADD_TABLE(rd_install_exec_seq),
2558     ADD_TABLE(media),
2559     ADD_TABLE(property)
2560 };
2561 
2562 static const msi_table rrv_tables[] =
2563 {
2564     ADD_TABLE(directory),
2565     ADD_TABLE(rrv_component),
2566     ADD_TABLE(rrv_feature),
2567     ADD_TABLE(rrv_feature_comp),
2568     ADD_TABLE(rrv_file),
2569     ADD_TABLE(rrv_registry),
2570     ADD_TABLE(rrv_remove_registry),
2571     ADD_TABLE(rrv_install_exec_seq),
2572     ADD_TABLE(media),
2573     ADD_TABLE(property)
2574 };
2575 
2576 static const msi_table frp_tables[] =
2577 {
2578     ADD_TABLE(directory),
2579     ADD_TABLE(frp_component),
2580     ADD_TABLE(frp_feature),
2581     ADD_TABLE(frp_feature_comp),
2582     ADD_TABLE(frp_file),
2583     ADD_TABLE(frp_upgrade),
2584     ADD_TABLE(frp_custom_action),
2585     ADD_TABLE(frp_install_exec_seq),
2586     ADD_TABLE(media),
2587     ADD_TABLE(property)
2588 };
2589 
2590 static const msi_table riv_tables[] =
2591 {
2592     ADD_TABLE(directory),
2593     ADD_TABLE(riv_component),
2594     ADD_TABLE(riv_feature),
2595     ADD_TABLE(riv_feature_comp),
2596     ADD_TABLE(riv_file),
2597     ADD_TABLE(riv_ini_file),
2598     ADD_TABLE(riv_remove_ini_file),
2599     ADD_TABLE(riv_install_exec_seq),
2600     ADD_TABLE(media),
2601     ADD_TABLE(property)
2602 };
2603 
2604 static const msi_table res_tables[] =
2605 {
2606     ADD_TABLE(directory),
2607     ADD_TABLE(res_component),
2608     ADD_TABLE(res_feature),
2609     ADD_TABLE(res_feature_comp),
2610     ADD_TABLE(res_file),
2611     ADD_TABLE(res_environment),
2612     ADD_TABLE(res_install_exec_seq),
2613     ADD_TABLE(media),
2614     ADD_TABLE(property)
2615 };
2616 
2617 /* cabinet definitions */
2618 
2619 /* make the max size large so there is only one cab file */
2620 #define MEDIA_SIZE          0x7FFFFFFF
2621 #define FOLDER_THRESHOLD    900000
2622 
2623 /* the FCI callbacks */
2624 
2625 static void * CDECL mem_alloc(ULONG cb)
2626 {
2627     return HeapAlloc(GetProcessHeap(), 0, cb);
2628 }
2629 
2630 static void CDECL mem_free(void *memory)
2631 {
2632     HeapFree(GetProcessHeap(), 0, memory);
2633 }
2634 
2635 static BOOL CDECL get_next_cabinet(PCCAB pccab, ULONG  cbPrevCab, void *pv)
2636 {
2637     sprintf(pccab->szCab, pv, pccab->iCab);
2638     return TRUE;
2639 }
2640 
2641 static LONG CDECL progress(UINT typeStatus, ULONG cb1, ULONG cb2, void *pv)
2642 {
2643     return 0;
2644 }
2645 
2646 static int CDECL file_placed(PCCAB pccab, char *pszFile, LONG cbFile,
2647                              BOOL fContinuation, void *pv)
2648 {
2649     return 0;
2650 }
2651 
2652 static INT_PTR CDECL fci_open(char *pszFile, int oflag, int pmode, int *err, void *pv)
2653 {
2654     HANDLE handle;
2655     DWORD dwAccess = 0;
2656     DWORD dwShareMode = 0;
2657     DWORD dwCreateDisposition = OPEN_EXISTING;
2658     
2659     dwAccess = GENERIC_READ | GENERIC_WRITE;
2660     /* FILE_SHARE_DELETE is not supported by Windows Me/98/95 */
2661     dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
2662 
2663     if (GetFileAttributesA(pszFile) != INVALID_FILE_ATTRIBUTES)
2664         dwCreateDisposition = OPEN_EXISTING;
2665     else
2666         dwCreateDisposition = CREATE_NEW;
2667 
2668     handle = CreateFileA(pszFile, dwAccess, dwShareMode, NULL,
2669                          dwCreateDisposition, 0, NULL);
2670 
2671     ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszFile);
2672 
2673     return (INT_PTR)handle;
2674 }
2675 
2676 static UINT CDECL fci_read(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
2677 {
2678     HANDLE handle = (HANDLE)hf;
2679     DWORD dwRead;
2680     BOOL res;
2681     
2682     res = ReadFile(handle, memory, cb, &dwRead, NULL);
2683     ok(res, "Failed to ReadFile\n");
2684 
2685     return dwRead;
2686 }
2687 
2688 static UINT CDECL fci_write(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
2689 {
2690     HANDLE handle = (HANDLE)hf;
2691     DWORD dwWritten;
2692     BOOL res;
2693 
2694     res = WriteFile(handle, memory, cb, &dwWritten, NULL);
2695     ok(res, "Failed to WriteFile\n");
2696 
2697     return dwWritten;
2698 }
2699 
2700 static int CDECL fci_close(INT_PTR hf, int *err, void *pv)
2701 {
2702     HANDLE handle = (HANDLE)hf;
2703     ok(CloseHandle(handle), "Failed to CloseHandle\n");
2704 
2705     return 0;
2706 }
2707 
2708 static LONG CDECL fci_seek(INT_PTR hf, LONG dist, int seektype, int *err, void *pv)
2709 {
2710     HANDLE handle = (HANDLE)hf;
2711     DWORD ret;
2712     
2713     ret = SetFilePointer(handle, dist, NULL, seektype);
2714     ok(ret != INVALID_SET_FILE_POINTER, "Failed to SetFilePointer\n");
2715 
2716     return ret;
2717 }
2718 
2719 static int CDECL fci_delete(char *pszFile, int *err, void *pv)
2720 {
2721     BOOL ret = DeleteFileA(pszFile);
2722     ok(ret, "Failed to DeleteFile %s\n", pszFile);
2723 
2724     return 0;
2725 }
2726 
2727 static void init_functionpointers(void)
2728 {
2729     HMODULE hmsi = GetModuleHandleA("msi.dll");
2730     HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
2731 
2732 #define GET_PROC(mod, func) \
2733     p ## func = (void*)GetProcAddress(mod, #func); \
2734     if(!p ## func) \
2735       trace("GetProcAddress(%s) failed\n", #func);
2736 
2737     GET_PROC(hmsi, MsiQueryComponentStateA);
2738     GET_PROC(hmsi, MsiSetExternalUIRecord);
2739     GET_PROC(hmsi, MsiSourceListEnumSourcesA);
2740     GET_PROC(hmsi, MsiSourceListGetInfoA);
2741 
2742     GET_PROC(hadvapi32, ConvertSidToStringSidA);
2743 
2744     hsrclient = LoadLibraryA("srclient.dll");
2745     GET_PROC(hsrclient, SRRemoveRestorePoint);
2746     GET_PROC(hsrclient, SRSetRestorePointA);
2747 
2748 #undef GET_PROC
2749 }
2750 
2751 static BOOL check_win9x(void)
2752 {
2753     SC_HANDLE scm;
2754 
2755     scm = OpenSCManager(NULL, NULL, GENERIC_ALL);
2756     if (!scm && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
2757         return TRUE;
2758 
2759     CloseServiceHandle(scm);
2760 
2761     return FALSE;
2762 }
2763 
2764 static LPSTR get_user_sid(LPSTR *usersid)
2765 {
2766     HANDLE token;
2767     BYTE buf[1024];
2768     DWORD size;
2769     PTOKEN_USER user;
2770 
2771     if (!pConvertSidToStringSidA)
2772     {
2773         win_skip("ConvertSidToStringSidA is not available\n");
2774         return NULL;
2775     }
2776 
2777     *usersid = NULL;
2778     OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token);
2779     size = sizeof(buf);
2780     GetTokenInformation(token, TokenUser, buf, size, &size);
2781     user = (PTOKEN_USER)buf;
2782     pConvertSidToStringSidA(user->User.Sid, usersid);
2783     ok(*usersid != NULL, "pConvertSidToStringSidA failed lre=%d\n", GetLastError());
2784     CloseHandle(token);
2785     return *usersid;
2786 }
2787 
2788 static BOOL check_record(MSIHANDLE rec, UINT field, LPCSTR val)
2789 {
2790     CHAR buffer[0x20];
2791     UINT r;
2792     DWORD sz;
2793 
2794     sz = sizeof buffer;
2795     r = MsiRecordGetString(rec, field, buffer, &sz);
2796     return (r == ERROR_SUCCESS ) && !strcmp(val, buffer);
2797 }
2798 
2799 static BOOL CDECL get_temp_file(char *pszTempName, int cbTempName, void *pv)
2800 {
2801     LPSTR tempname;
2802 
2803     tempname = HeapAlloc(GetProcessHeap(), 0, MAX_PATH);
2804     GetTempFileNameA(".", "xx", 0, tempname);
2805 
2806     if (tempname && (strlen(tempname) < (unsigned)cbTempName))
2807     {
2808         lstrcpyA(pszTempName, tempname);
2809         HeapFree(GetProcessHeap(), 0, tempname);
2810         return TRUE;
2811     }
2812 
2813     HeapFree(GetProcessHeap(), 0, tempname);
2814 
2815     return FALSE;
2816 }
2817 
2818 static INT_PTR CDECL get_open_info(char *pszName, USHORT *pdate, USHORT *ptime,
2819                                    USHORT *pattribs, int *err, void *pv)
2820 {
2821     BY_HANDLE_FILE_INFORMATION finfo;
2822     FILETIME filetime;
2823     HANDLE handle;
2824     DWORD attrs;
2825     BOOL res;
2826 
2827     handle = CreateFile(pszName, GENERIC_READ, FILE_SHARE_READ, NULL,
2828                         OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
2829 
2830     ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszName);
2831 
2832     res = GetFileInformationByHandle(handle, &finfo);
2833     ok(res, "Expected GetFileInformationByHandle to succeed\n");
2834    
2835     FileTimeToLocalFileTime(&finfo.ftLastWriteTime, &filetime);
2836     FileTimeToDosDateTime(&filetime, pdate, ptime);
2837 
2838     attrs = GetFileAttributes(pszName);
2839     ok(attrs != INVALID_FILE_ATTRIBUTES, "Failed to GetFileAttributes\n");
2840 
2841     return (INT_PTR)handle;
2842 }
2843 
2844 static BOOL add_file(HFCI hfci, const char *file, TCOMP compress)
2845 {
2846     char path[MAX_PATH];
2847     char filename[MAX_PATH];
2848 
2849     lstrcpyA(path, CURR_DIR);
2850     lstrcatA(path, "\\");
2851     lstrcatA(path, file);
2852 
2853     lstrcpyA(filename, file);
2854 
2855     return FCIAddFile(hfci, path, filename, FALSE, get_next_cabinet,
2856                       progress, get_open_info, compress);
2857 }
2858 
2859 static void set_cab_parameters(PCCAB pCabParams, const CHAR *name, DWORD max_size)
2860 {
2861     ZeroMemory(pCabParams, sizeof(CCAB));
2862 
2863     pCabParams->cb = max_size;
2864     pCabParams->cbFolderThresh = FOLDER_THRESHOLD;
2865     pCabParams->setID = 0xbeef;
2866     pCabParams->iCab = 1;
2867     lstrcpyA(pCabParams->szCabPath, CURR_DIR);
2868     lstrcatA(pCabParams->szCabPath, "\\");
2869     lstrcpyA(pCabParams->szCab, name);
2870 }
2871 
2872 static void create_cab_file(const CHAR *name, DWORD max_size, const CHAR *files)
2873 {
2874     CCAB cabParams;
2875     LPCSTR ptr;
2876     HFCI hfci;
2877     ERF erf;
2878     BOOL res;
2879 
2880     set_cab_parameters(&cabParams, name, max_size);
2881 
2882     hfci = FCICreate(&erf, file_placed, mem_alloc, mem_free, fci_open,
2883                       fci_read, fci_write, fci_close, fci_seek, fci_delete,
2884                       get_temp_file, &cabParams, NULL);
2885 
2886     ok(hfci != NULL, "Failed to create an FCI context\n");
2887 
2888     ptr = files;
2889     while (*ptr)
2890     {
2891         res = add_file(hfci, ptr, tcompTYPE_MSZIP);
2892         ok(res, "Failed to add file: %s\n", ptr);
2893         ptr += lstrlen(ptr) + 1;
2894     }
2895 
2896     res = FCIFlushCabinet(hfci, FALSE, get_next_cabinet, progress);
2897     ok(res, "Failed to flush the cabinet\n");
2898 
2899     res = FCIDestroy(hfci);
2900     ok(res, "Failed to destroy the cabinet\n");
2901 }
2902 
2903 static BOOL get_program_files_dir(LPSTR buf, LPSTR buf2)
2904 {
2905     HKEY hkey;
2906     DWORD type, size;
2907 
2908     if (RegOpenKey(HKEY_LOCAL_MACHINE,
2909                    "Software\\Microsoft\\Windows\\CurrentVersion", &hkey))
2910         return FALSE;
2911 
2912     size = MAX_PATH;
2913     if (RegQueryValueExA(hkey, "ProgramFilesDir", 0, &type, (LPBYTE)buf, &size)) {
2914         RegCloseKey(hkey);
2915         return FALSE;
2916     }
2917 
2918     size = MAX_PATH;
2919     if (RegQueryValueExA(hkey, "CommonFilesDir", 0, &type, (LPBYTE)buf2, &size)) {
2920         RegCloseKey(hkey);
2921         return FALSE;
2922     }
2923 
2924     RegCloseKey(hkey);
2925     return TRUE;
2926 }
2927 
2928 static void create_file_data(LPCSTR name, LPCSTR data, DWORD size)
2929 {
2930     HANDLE file;
2931     DWORD written;
2932 
2933     file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
2934     if (file == INVALID_HANDLE_VALUE)
2935         return;
2936 
2937     WriteFile(file, data, strlen(data), &written, NULL);
2938 
2939     if (size)
2940     {
2941         SetFilePointer(file, size, NULL, FILE_BEGIN);
2942         SetEndOfFile(file);
2943     }
2944 
2945     CloseHandle(file);
2946 }
2947 
2948 #define create_file(name, size) create_file_data(name, name, size)
2949 
2950 static void create_test_files(void)
2951 {
2952     CreateDirectoryA("msitest", NULL);
2953     create_file("msitest\\one.txt", 100);
2954     CreateDirectoryA("msitest\\first", NULL);
2955     create_file("msitest\\first\\two.txt", 100);
2956     CreateDirectoryA("msitest\\second", NULL);
2957     create_file("msitest\\second\\three.txt", 100);
2958 
2959     create_file("four.txt", 100);
2960     create_file("five.txt", 100);
2961     create_cab_file("msitest.cab", MEDIA_SIZE, "four.txt\0five.txt\0");
2962 
2963     create_file("msitest\\filename", 100);
2964     create_file("msitest\\service.exe", 100);
2965 
2966     DeleteFileA("four.txt");
2967     DeleteFileA("five.txt");
2968 }
2969 
2970 static BOOL delete_pf(const CHAR *rel_path, BOOL is_file)
2971 {
2972     CHAR path[MAX_PATH];
2973 
2974     lstrcpyA(path, PROG_FILES_DIR);
2975     lstrcatA(path, "\\");
2976     lstrcatA(path, rel_path);
2977 
2978     if (is_file)
2979         return DeleteFileA(path);
2980     else
2981         return RemoveDirectoryA(path);
2982 }
2983 
2984 static BOOL delete_cf(const CHAR *rel_path, BOOL is_file)
2985 {
2986     CHAR path[MAX_PATH];
2987 
2988     lstrcpyA(path, COMMON_FILES_DIR);
2989     lstrcatA(path, "\\");
2990     lstrcatA(path, rel_path);
2991 
2992     if (is_file)
2993         return DeleteFileA(path);
2994     else
2995         return RemoveDirectoryA(path);
2996 }
2997 
2998 static void delete_test_files(void)
2999 {
3000     DeleteFileA("msitest.msi");
3001     DeleteFileA("msitest.cab");
3002     DeleteFileA("msitest\\second\\three.txt");
3003     DeleteFileA("msitest\\first\\two.txt");
3004     DeleteFileA("msitest\\one.txt");
3005     DeleteFileA("msitest\\service.exe");
3006     DeleteFileA("msitest\\filename");
3007     RemoveDirectoryA("msitest\\second");
3008     RemoveDirectoryA("msitest\\first");
3009     RemoveDirectoryA("msitest");
3010 }
3011 
3012 static void write_file(const CHAR *filename, const char *data, int data_size)
3013 {
3014     DWORD size;
3015 
3016     HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL,
3017                            CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
3018 
3019     WriteFile(hf, data, data_size, &size, NULL);
3020     CloseHandle(hf);
3021 }
3022 
3023 static void write_msi_summary_info(MSIHANDLE db, INT wordcount)
3024 {
3025     MSIHANDLE summary;
3026     UINT r;
3027 
3028     r = MsiGetSummaryInformationA(db, NULL, 5, &summary);
3029     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3030 
3031     r = MsiSummaryInfoSetPropertyA(summary, PID_TEMPLATE, VT_LPSTR, 0, NULL, ";1033");
3032     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3033 
3034     r = MsiSummaryInfoSetPropertyA(summary, PID_REVNUMBER, VT_LPSTR, 0, NULL,
3035                                    "{004757CA-5092-49c2-AD20-28E1CE0DF5F2}");
3036     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3037 
3038     r = MsiSummaryInfoSetPropertyA(summary, PID_PAGECOUNT, VT_I4, 100, NULL, NULL);
3039     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3040 
3041     r = MsiSummaryInfoSetPropertyA(summary, PID_WORDCOUNT, VT_I4, wordcount, NULL, NULL);
3042     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3043 
3044     r = MsiSummaryInfoSetPropertyA(summary, PID_TITLE, VT_LPSTR, 0, NULL, "MSITEST");
3045     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3046 
3047     /* write the summary changes back to the stream */
3048     r = MsiSummaryInfoPersist(summary);
3049     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3050 
3051     MsiCloseHandle(summary);
3052 }
3053 
3054 #define create_database(name, tables, num_tables) \
3055     create_database_wordcount(name, tables, num_tables, 0);
3056 
3057 static void create_database_wordcount(const CHAR *name, const msi_table *tables,
3058                                       int num_tables, INT wordcount)
3059 {
3060     MSIHANDLE db;
3061     UINT r;
3062     int j;
3063 
3064     r = MsiOpenDatabaseA(name, MSIDBOPEN_CREATE, &db);
3065     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3066 
3067     /* import the tables into the database */
3068     for (j = 0; j < num_tables; j++)
3069     {
3070         const msi_table *table = &tables[j];
3071 
3072         write_file(table->filename, table->data, (table->size - 1) * sizeof(char));
3073 
3074         r = MsiDatabaseImportA(db, CURR_DIR, table->filename);
3075         ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3076 
3077         DeleteFileA(table->filename);
3078     }
3079 
3080     write_msi_summary_info(db, wordcount);
3081 
3082     r = MsiDatabaseCommit(db);
3083     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3084 
3085     MsiCloseHandle(db);
3086 }
3087 
3088 static void check_service_is_installed(void)
3089 {
3090     SC_HANDLE scm, service;
3091     BOOL res;
3092 
3093     scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
3094     ok(scm != NULL, "Failed to open the SC Manager\n");
3095 
3096     service = OpenService(scm, "TestService", SC_MANAGER_ALL_ACCESS);
3097     ok(service != NULL, "Failed to open TestService\n");
3098 
3099     res = DeleteService(service);
3100     ok(res, "Failed to delete TestService\n");
3101 
3102     CloseServiceHandle(service);
3103     CloseServiceHandle(scm);
3104 }
3105 
3106 static BOOL notify_system_change(DWORD event_type, STATEMGRSTATUS *status)
3107 {
3108     RESTOREPOINTINFOA spec;
3109 
3110     spec.dwEventType = event_type;
3111     spec.dwRestorePtType = APPLICATION_INSTALL;
3112     spec.llSequenceNumber = status->llSequenceNumber;
3113     lstrcpyA(spec.szDescription, "msitest restore point");
3114 
3115     return pSRSetRestorePointA(&spec, status);
3116 }
3117 
3118 static void remove_restore_point(DWORD seq_number)
3119 {
3120     DWORD res;
3121 
3122     res = pSRRemoveRestorePoint(seq_number);
3123     if (res != ERROR_SUCCESS)
3124         trace("Failed to remove the restore point : %08x\n", res);
3125 }
3126 
3127 static void test_MsiInstallProduct(void)
3128 {
3129     UINT r;
3130     CHAR path[MAX_PATH];
3131     LONG res;
3132     HKEY hkey;
3133     DWORD num, size, type;
3134 
3135     if (on_win9x)
3136     {
3137         win_skip("Services are not implemented on Win9x and WinMe\n");
3138         return;
3139     }
3140 
3141     /* szPackagePath is NULL */
3142     r = MsiInstallProductA(NULL, "INSTALL=ALL");
3143     ok(r == ERROR_INVALID_PARAMETER,
3144        "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
3145 
3146     /* both szPackagePath and szCommandLine are NULL */
3147     r = MsiInstallProductA(NULL, NULL);
3148     ok(r == ERROR_INVALID_PARAMETER,
3149        "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
3150 
3151     /* szPackagePath is empty */
3152     r = MsiInstallProductA("", "INSTALL=ALL");
3153     ok(r == ERROR_PATH_NOT_FOUND,
3154        "Expected ERROR_PATH_NOT_FOUND, got %d\n", r);
3155 
3156     create_test_files();
3157     create_database(msifile, tables, sizeof(tables) / sizeof(msi_table));
3158 
3159     /* install, don't publish */
3160     r = MsiInstallProductA(msifile, NULL);
3161     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3162 
3163     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3164     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3165     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3166     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3167     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3168     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3169     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3170     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3171     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3172     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3173     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3174     ok(delete_pf("msitest", FALSE), "File not installed\n");
3175 
3176     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3177     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
3178 
3179     size = MAX_PATH;
3180     type = REG_SZ;
3181     res = RegQueryValueExA(hkey, "Name", NULL, &type, (LPBYTE)path, &size);
3182     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
3183     ok(!lstrcmpA(path, "imaname"), "Expected imaname, got %s\n", path);
3184 
3185     size = MAX_PATH;
3186     type = REG_SZ;
3187     res = RegQueryValueExA(hkey, "blah", NULL, &type, (LPBYTE)path, &size);
3188     ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
3189 
3190     size = sizeof(num);
3191     type = REG_DWORD;
3192     res = RegQueryValueExA(hkey, "number", NULL, &type, (LPBYTE)&num, &size);
3193     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
3194     ok(num == 314, "Expected 314, got %d\n", num);
3195 
3196     size = MAX_PATH;
3197     type = REG_SZ;
3198     res = RegQueryValueExA(hkey, "OrderTestName", NULL, &type, (LPBYTE)path, &size);
3199     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
3200     ok(!lstrcmpA(path, "OrderTestValue"), "Expected OrderTestValue, got %s\n", path);
3201 
3202     check_service_is_installed();
3203 
3204     RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest");
3205 
3206     /* not published, reinstall */
3207     r = MsiInstallProductA(msifile, NULL);
3208     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3209 
3210     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3211     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3212     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3213     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3214     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3215     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3216     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3217     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3218     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3219     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3220     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3221     ok(delete_pf("msitest", FALSE), "File not installed\n");
3222 
3223     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3224     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
3225     RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest");
3226 
3227     create_database(msifile, up_tables, sizeof(up_tables) / sizeof(msi_table));
3228 
3229     /* not published, RemovePreviousVersions set */
3230     r = MsiInstallProductA(msifile, NULL);
3231     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3232 
3233     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3234     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3235     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3236     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3237     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3238     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3239     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3240     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3241     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3242     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3243     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3244     ok(delete_pf("msitest", FALSE), "File not installed\n");
3245 
3246     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3247     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
3248     RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest");
3249 
3250     create_database(msifile, up2_tables, sizeof(up2_tables) / sizeof(msi_table));
3251 
3252     /* not published, version number bumped */
3253     r = MsiInstallProductA(msifile, NULL);
3254     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3255 
3256     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3257     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3258     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3259     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3260     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3261     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3262     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3263     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3264     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3265     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3266     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3267     ok(delete_pf("msitest", FALSE), "File not installed\n");
3268 
3269     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3270     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
3271     RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest");
3272 
3273     create_database(msifile, up3_tables, sizeof(up3_tables) / sizeof(msi_table));
3274 
3275     /* not published, RemovePreviousVersions set and version number bumped */
3276     r = MsiInstallProductA(msifile, NULL);
3277     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3278 
3279     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3280     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3281     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3282     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3283     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3284     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3285     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3286     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3287     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3288     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3289     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3290     ok(delete_pf("msitest", FALSE), "File not installed\n");
3291 
3292     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3293     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
3294     RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest");
3295 
3296     create_database(msifile, up4_tables, sizeof(up4_tables) / sizeof(msi_table));
3297 
3298     /* install, publish product */
3299     r = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1");
3300     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3301 
3302     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3303     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3304     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3305     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3306     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3307     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3308     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3309     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3310     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3311     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3312     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3313     ok(delete_pf("msitest", FALSE), "File not installed\n");
3314 
3315     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3316     ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
3317 
3318     create_database(msifile, up4_tables, sizeof(up4_tables) / sizeof(msi_table));
3319 
3320     /* published, reinstall */
3321     r = MsiInstallProductA(msifile, NULL);
3322     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3323 
3324     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3325     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3326     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3327     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3328     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3329     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3330     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3331     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3332     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3333     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3334     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3335     ok(delete_pf("msitest", FALSE), "File not installed\n");
3336 
3337     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3338     ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
3339 
3340     create_database(msifile, up5_tables, sizeof(up5_tables) / sizeof(msi_table));
3341 
3342     /* published product, RemovePreviousVersions set */
3343     r = MsiInstallProductA(msifile, NULL);
3344     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3345 
3346     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3347     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3348     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3349     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3350     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3351     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3352     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3353     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3354     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3355     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3356     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3357     ok(delete_pf("msitest", FALSE), "File not installed\n");
3358 
3359     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3360     ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
3361 
3362     create_database(msifile, up6_tables, sizeof(up6_tables) / sizeof(msi_table));
3363 
3364     /* published product, version number bumped */
3365     r = MsiInstallProductA(msifile, NULL);
3366     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3367 
3368     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3369     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3370     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3371     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3372     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3373     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3374     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3375     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3376     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3377     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3378     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3379     ok(delete_pf("msitest", FALSE), "File not installed\n");
3380 
3381     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3382     ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
3383 
3384     create_database(msifile, up7_tables, sizeof(up7_tables) / sizeof(msi_table));
3385 
3386     /* published product, RemovePreviousVersions set and version number bumped */
3387     r = MsiInstallProductA(msifile, NULL);
3388     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3389 
3390     ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
3391     ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n");
3392     ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
3393     ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n");
3394     ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
3395     ok(delete_pf("msitest\\changed", FALSE), "File not installed\n");
3396     ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
3397     ok(delete_pf("msitest\\first", FALSE), "File not installed\n");
3398     ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
3399     ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
3400     ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n");
3401     ok(delete_pf("msitest", FALSE), "File not installed\n");
3402 
3403     res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey);
3404     ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
3405 
3406     r = MsiInstallProductA(msifile, "REMOVE=ALL");
3407     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3408 
3409     delete_test_files();
3410 }
3411 
3412 static void test_MsiSetComponentState(void)
3413 {
3414     INSTALLSTATE installed, action;
3415     MSIHANDLE package;
3416     char path[MAX_PATH];
3417     UINT r;
3418 
3419     create_database(msifile, tables, sizeof(tables) / sizeof(msi_table));
3420 
3421     CoInitialize(NULL);
3422 
3423     lstrcpy(path, CURR_DIR);
3424     lstrcat(path, "\\");
3425     lstrcat(path, msifile);
3426 
3427     r = MsiOpenPackage(path, &package);
3428     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3429 
3430     r = MsiDoAction(package, "CostInitialize");
3431     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3432 
3433     r = MsiDoAction(package, "FileCost");
3434     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3435 
3436     r = MsiDoAction(package, "CostFinalize");
3437     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3438 
3439     r = MsiGetComponentState(package, "dangler", &installed, &action);
3440     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3441     ok(installed == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", installed);
3442     ok(action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
3443 
3444     r = MsiSetComponentState(package, "dangler", INSTALLSTATE_SOURCE);
3445     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3446 
3447     MsiCloseHandle(package);
3448     CoUninitialize();
3449 
3450     DeleteFileA(msifile);
3451 }
3452 
3453 static void test_packagecoltypes(void)
3454 {
3455     MSIHANDLE hdb, view, rec;
3456     char path[MAX_PATH];
3457     LPCSTR query;
3458     UINT r, count;
3459 
3460     create_database(msifile, tables, sizeof(tables) / sizeof(msi_table));
3461 
3462     CoInitialize(NULL);
3463 
3464     lstrcpy(path, CURR_DIR);
3465     lstrcat(path, "\\");
3466     lstrcat(path, msifile);
3467 
3468     r = MsiOpenDatabase(path, MSIDBOPEN_READONLY, &hdb);
3469     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3470 
3471     query = "SELECT * FROM `Media`";
3472     r = MsiDatabaseOpenView( hdb, query, &view );
3473     ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n");
3474 
3475     r = MsiViewGetColumnInfo( view, MSICOLINFO_NAMES, &rec );
3476     count = MsiRecordGetFieldCount( rec );
3477     ok(r == ERROR_SUCCESS, "MsiViewGetColumnInfo failed\n");
3478     ok(count == 6, "Expected 6, got %d\n", count);
3479     ok(check_record(rec, 1, "DiskId"), "wrong column label\n");
3480     ok(check_record(rec, 2, "LastSequence"), "wrong column label\n");
3481     ok(check_record(rec, 3, "DiskPrompt"), "wrong column label\n");
3482     ok(check_record(rec, 4, "Cabinet"), "wrong column label\n");
3483     ok(check_record(rec, 5, "VolumeLabel"), "wrong column label\n");
3484     ok(check_record(rec, 6, "Source"), "wrong column label\n");
3485     MsiCloseHandle(rec);
3486 
3487     r = MsiViewGetColumnInfo( view, MSICOLINFO_TYPES, &rec );
3488     count = MsiRecordGetFieldCount( rec );
3489     ok(r == ERROR_SUCCESS, "MsiViewGetColumnInfo failed\n");
3490     ok(count == 6, "Expected 6, got %d\n", count);
3491     ok(check_record(rec, 1, "i2"), "wrong column label\n");
3492     ok(check_record(rec, 2, "i4"), "wrong column label\n");
3493     ok(check_record(rec, 3, "L64"), "wrong column label\n");
3494     ok(check_record(rec, 4, "S255"), "wrong column label\n");
3495     ok(check_record(rec, 5, "S32"), "wrong column label\n");
3496     ok(check_record(rec, 6, "S72"), "wrong column label\n");
3497 
3498     MsiCloseHandle(rec);
3499     MsiCloseHandle(view);
3500     MsiCloseHandle(hdb);
3501     CoUninitialize();
3502 
3503     DeleteFile(msifile);
3504 }
3505 
3506 static void create_cc_test_files(void)
3507 {
3508     CCAB cabParams;
3509     HFCI hfci;
3510     ERF erf;
3511     static CHAR cab_context[] = "test%d.cab";
3512     BOOL res;
3513 
3514     create_file("maximus", 500);
3515     create_file("augustus", 50000);
3516     create_file("tiberius", 500);
3517     create_file("caesar", 500);
3518 
3519     set_cab_parameters(&cabParams, "test1.cab", 40000);
3520 
3521     hfci = FCICreate(&erf, file_placed, mem_alloc, mem_free, fci_open,
3522                       fci_read, fci_write, fci_close, fci_seek, fci_delete,
3523                       get_temp_file, &cabParams, cab_context);
3524     ok(hfci != NULL, "Failed to create an FCI context\n");
3525 
3526     res = add_file(hfci, "maximus", tcompTYPE_NONE);
3527     ok(res, "Failed to add file maximus\n");
3528 
3529     res = add_file(hfci, "augustus", tcompTYPE_NONE);
3530     ok(res, "Failed to add file augustus\n");
3531 
3532     res = add_file(hfci, "tiberius", tcompTYPE_NONE);
3533     ok(res, "Failed to add file tiberius\n");
3534 
3535     res = FCIFlushCabinet(hfci, FALSE, get_next_cabinet, progress);
3536     ok(res, "Failed to flush the cabinet\n");
3537 
3538     res = FCIDestroy(hfci);
3539     ok(res, "Failed to destroy the cabinet\n");
3540 
3541     create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3542 
3543     DeleteFile("maximus");
3544     DeleteFile("augustus");
3545     DeleteFile("tiberius");
3546     DeleteFile("caesar");
3547 }
3548 
3549 static void delete_cab_files(void)
3550 {
3551     SHFILEOPSTRUCT shfl;
3552     CHAR path[MAX_PATH+10];
3553 
3554     lstrcpyA(path, CURR_DIR);
3555     lstrcatA(path, "\\*.cab");
3556     path[strlen(path) + 1] = '\0';
3557 
3558     shfl.hwnd = NULL;
3559     shfl.wFunc = FO_DELETE;
3560     shfl.pFrom = path;
3561     shfl.pTo = NULL;
3562     shfl.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION | FOF_NORECURSION | FOF_SILENT;
3563 
3564     SHFileOperation(&shfl);
3565 }
3566 
3567 static void test_continuouscabs(void)
3568 {
3569     UINT r;
3570 
3571     create_cc_test_files();
3572     create_database(msifile, cc_tables, sizeof(cc_tables) / sizeof(msi_table));
3573 
3574     MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
3575 
3576     r = MsiInstallProductA(msifile, NULL);
3577     if (r == ERROR_SUCCESS) /* win9x has a problem with this */
3578     {
3579         ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3580         ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3581         ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3582         ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3583         ok(delete_pf("msitest", FALSE), "File not installed\n");
3584     }
3585 
3586     delete_cab_files();
3587     DeleteFile(msifile);
3588 
3589     create_cc_test_files();
3590     create_database(msifile, cc2_tables, sizeof(cc2_tables) / sizeof(msi_table));
3591 
3592     MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
3593 
3594     r = MsiInstallProductA(msifile, NULL);
3595     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3596     ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3597     ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3598     ok(delete_pf("msitest\\tiberius", TRUE), "File not installed\n");
3599     ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3600     ok(delete_pf("msitest", FALSE), "File not installed\n");
3601 
3602     delete_cab_files();
3603     DeleteFile(msifile);
3604 }
3605 
3606 static void test_caborder(void)
3607 {
3608     UINT r;
3609 
3610     create_file("imperator", 100);
3611     create_file("maximus", 500);
3612     create_file("augustus", 50000);
3613     create_file("caesar", 500);
3614 
3615     create_database(msifile, cc_tables, sizeof(cc_tables) / sizeof(msi_table));
3616 
3617     MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
3618 
3619     create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
3620     create_cab_file("test2.cab", MEDIA_SIZE, "augustus\0");
3621     create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3622