38static const char msifile[] =
"winetest-package.msi";
64 DWORD dwMaxSubkeyLen, dwMaxValueLen;
81 dwMaxLen =
max(dwMaxSubkeyLen, dwMaxValueLen);
117 if (lpszName != szNameBuf)
free(lpszName);
163 ok(
hr ==
S_OK,
"Expected S_OK, got %#lx\n",
hr);
166 ok(
size == 39,
"Expected 39, got %#lx\n",
hr);
195 prod =
"3D0DAE300FACA1300AD792060BCDAA92";
197 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
198 "Installer\\UserData\\S-1-5-18\\Components\\%s", squashed);
200 "SOFTWARE\\Classes\\Installer\\"
201 "Products\\3D0DAE300FACA1300AD792060BCDAA92");
205 prod =
"7D2F387510109040002000060BECB6AB";
207 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
208 "Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
210 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
211 "Installer\\%s\\Installer\\Products\\"
212 "7D2F387510109040002000060BECB6AB", usersid);
216 prod =
"7D2F387510109040002000060BECB6AB";
218 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
219 "Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
221 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
222 "Installer\\Managed\\%s\\Installer\\Products\\"
223 "7D2F387510109040002000060BECB6AB", usersid);
259 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
260 "Installer\\UserData\\S-1-5-18\\Components\\%s", squashed);
262 "SOFTWARE\\Classes\\Installer\\"
263 "Products\\3D0DAE300FACA1300AD792060BCDAA92");
268 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
269 "Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
271 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
272 "Installer\\%s\\Installer\\Products\\"
273 "7D2F387510109040002000060BECB6AB", usersid);
278 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
279 "Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
281 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
282 "Installer\\Managed\\%s\\Installer\\Products\\"
283 "7D2F387510109040002000060BECB6AB", usersid);
318 "CREATE TABLE `Component` ( "
319 "`Component` CHAR(72) NOT NULL, "
320 "`ComponentId` CHAR(38), "
321 "`Directory_` CHAR(72) NOT NULL, "
322 "`Attributes` SHORT NOT NULL, "
323 "`Condition` CHAR(255), "
324 "`KeyPath` CHAR(72) "
325 "PRIMARY KEY `Component`)" );
333 "CREATE TABLE `Feature` ( "
334 "`Feature` CHAR(38) NOT NULL, "
335 "`Feature_Parent` CHAR(38), "
337 "`Description` CHAR(255), "
338 "`Display` SHORT NOT NULL, "
339 "`Level` SHORT NOT NULL, "
340 "`Directory_` CHAR(72), "
341 "`Attributes` SHORT NOT NULL "
342 "PRIMARY KEY `Feature`)" );
350 "CREATE TABLE `FeatureComponents` ( "
351 "`Feature_` CHAR(38) NOT NULL, "
352 "`Component_` CHAR(72) NOT NULL "
353 "PRIMARY KEY `Feature_`, `Component_` )" );
361 "CREATE TABLE `File` ("
362 "`File` CHAR(72) NOT NULL, "
363 "`Component_` CHAR(72) NOT NULL, "
364 "`FileName` CHAR(255) NOT NULL, "
365 "`FileSize` LONG NOT NULL, "
366 "`Version` CHAR(72), "
367 "`Language` CHAR(20), "
368 "`Attributes` SHORT, "
369 "`Sequence` SHORT NOT NULL "
370 "PRIMARY KEY `File`)" );
378 "CREATE TABLE `RemoveFile` ("
379 "`FileKey` CHAR(72) NOT NULL, "
380 "`Component_` CHAR(72) NOT NULL, "
381 "`FileName` CHAR(255) LOCALIZABLE, "
382 "`DirProperty` CHAR(72) NOT NULL, "
383 "`InstallMode` SHORT NOT NULL "
384 "PRIMARY KEY `FileKey`)" );
392 "CREATE TABLE `AppSearch` ("
393 "`Property` CHAR(72) NOT NULL, "
394 "`Signature_` CHAR(72) NOT NULL "
395 "PRIMARY KEY `Property`, `Signature_`)" );
403 "CREATE TABLE `RegLocator` ("
404 "`Signature_` CHAR(72) NOT NULL, "
405 "`Root` SHORT NOT NULL, "
406 "`Key` CHAR(255) NOT NULL, "
409 "PRIMARY KEY `Signature_`)" );
417 "CREATE TABLE `Signature` ("
418 "`Signature` CHAR(72) NOT NULL, "
419 "`FileName` CHAR(255) NOT NULL, "
420 "`MinVersion` CHAR(20), "
421 "`MaxVersion` CHAR(20), "
426 "`Languages` CHAR(255) "
427 "PRIMARY KEY `Signature`)" );
435 "CREATE TABLE `LaunchCondition` ("
436 "`Condition` CHAR(255) NOT NULL, "
437 "`Description` CHAR(255) NOT NULL "
438 "PRIMARY KEY `Condition`)" );
446 "CREATE TABLE `Property` ("
447 "`Property` CHAR(72) NOT NULL, "
449 "PRIMARY KEY `Property`)" );
457 "CREATE TABLE `InstallExecuteSequence` ("
458 "`Action` CHAR(72) NOT NULL, "
459 "`Condition` CHAR(255), "
461 "PRIMARY KEY `Action`)" );
462 ok(
r ==
ERROR_SUCCESS,
"Failed to create InstallExecuteSequence table: %u\n",
r);
469 "CREATE TABLE `InstallUISequence` ("
470 "`Action` CHAR(72) NOT NULL, "
471 "`Condition` CHAR(255), "
473 "PRIMARY KEY `Action`)" );
481 "CREATE TABLE `Media` ("
482 "`DiskId` SHORT NOT NULL, "
483 "`LastSequence` SHORT NOT NULL, "
484 "`DiskPrompt` CHAR(64), "
485 "`Cabinet` CHAR(255), "
486 "`VolumeLabel` CHAR(32), "
488 "PRIMARY KEY `DiskId`)" );
496 "CREATE TABLE `CCPSearch` ("
497 "`Signature_` CHAR(72) NOT NULL "
498 "PRIMARY KEY `Signature_`)" );
506 "CREATE TABLE `DrLocator` ("
507 "`Signature_` CHAR(72) NOT NULL, "
508 "`Parent` CHAR(72), "
511 "PRIMARY KEY `Signature_`, `Parent`, `Path`)" );
519 "CREATE TABLE `CompLocator` ("
520 "`Signature_` CHAR(72) NOT NULL, "
521 "`ComponentId` CHAR(38) NOT NULL, "
523 "PRIMARY KEY `Signature_`)" );
531 "CREATE TABLE `IniLocator` ("
532 "`Signature_` CHAR(72) NOT NULL, "
533 "`FileName` CHAR(255) NOT NULL, "
534 "`Section` CHAR(96)NOT NULL, "
535 "`Key` CHAR(128)NOT NULL, "
538 "PRIMARY KEY `Signature_`)" );
546 "CREATE TABLE `CustomAction` ("
547 "`Action` CHAR(72) NOT NULL, "
548 "`Type` SHORT NOT NULL, "
549 "`Source` CHAR(75), "
550 "`Target` CHAR(255) "
551 "PRIMARY KEY `Action`)" );
559 "CREATE TABLE `Dialog` ("
560 "`Dialog` CHAR(72) NOT NULL, "
561 "`HCentering` SHORT NOT NULL, "
562 "`VCentering` SHORT NOT NULL, "
563 "`Width` SHORT NOT NULL, "
564 "`Height` SHORT NOT NULL, "
565 "`Attributes` LONG, "
566 "`Title` CHAR(128) LOCALIZABLE, "
567 "`Control_First` CHAR(50) NOT NULL, "
568 "`Control_Default` CHAR(50), "
569 "`Control_Cancel` CHAR(50) "
570 "PRIMARY KEY `Dialog`)");
578 "CREATE TABLE `Control` ("
579 "`Dialog_` CHAR(72) NOT NULL, "
580 "`Control` CHAR(50) NOT NULL, "
581 "`Type` CHAR(20) NOT NULL, "
582 "`X` SHORT NOT NULL, "
583 "`Y` SHORT NOT NULL, "
584 "`Width` SHORT NOT NULL, "
585 "`Height` SHORT NOT NULL, "
586 "`Attributes` LONG, "
587 "`Property` CHAR(50), "
588 "`Text` CHAR(0) LOCALIZABLE, "
589 "`Control_Next` CHAR(50), "
590 "`Help` CHAR(255) LOCALIZABLE "
591 "PRIMARY KEY `Dialog_`, `Control`)");
599 "CREATE TABLE `ControlEvent` ("
600 "`Dialog_` CHAR(72) NOT NULL, "
601 "`Control_` CHAR(50) NOT NULL, "
602 "`Event` CHAR(50) NOT NULL, "
603 "`Argument` CHAR(255) NOT NULL, "
604 "`Condition` CHAR(255), "
606 "PRIMARY KEY `Dialog_`, `Control_`, `Event`, `Argument`, `Condition`)");
614 "CREATE TABLE `ActionText` ("
615 "`Action` CHAR(72) NOT NULL, "
616 "`Description` CHAR(64) LOCALIZABLE, "
617 "`Template` CHAR(128) LOCALIZABLE "
618 "PRIMARY KEY `Action`)");
626 "CREATE TABLE `Upgrade` ("
627 "`UpgradeCode` CHAR(38) NOT NULL, "
628 "`VersionMin` CHAR(20), "
629 "`VersionMax` CHAR(20), "
630 "`Language` CHAR(255), "
631 "`Attributes` SHORT, "
632 "`Remove` CHAR(255), "
633 "`ActionProperty` CHAR(72) NOT NULL "
634 "PRIMARY KEY `UpgradeCode`, `VersionMin`, `VersionMax`, `Language`)" );
653#define add_component_entry(hdb, values) add_entry(__FILE__, __LINE__, "Component", hdb, values, \
654 "INSERT INTO `Component` " \
655 "(`Component`, `ComponentId`, `Directory_`, " \
656 "`Attributes`, `Condition`, `KeyPath`) VALUES( %s )")
658#define add_directory_entry(hdb, values) add_entry(__FILE__, __LINE__, "Directory", hdb, values, \
659 "INSERT INTO `Directory` " \
660 "(`Directory`,`Directory_Parent`,`DefaultDir`) VALUES( %s )")
662#define add_feature_entry(hdb, values) add_entry(__FILE__, __LINE__, "Feature", hdb, values, \
663 "INSERT INTO `Feature` " \
664 "(`Feature`, `Feature_Parent`, `Title`, `Description`, " \
665 "`Display`, `Level`, `Directory_`, `Attributes`) VALUES( %s )")
667#define add_feature_components_entry(hdb, values) add_entry(__FILE__, __LINE__, "FeatureComponents", hdb, values, \
668 "INSERT INTO `FeatureComponents` " \
669 "(`Feature_`, `Component_`) VALUES( %s )")
671#define add_file_entry(hdb, values) add_entry(__FILE__, __LINE__, "File", hdb, values, \
672 "INSERT INTO `File` " \
673 "(`File`, `Component_`, `FileName`, `FileSize`, " \
674 "`Version`, `Language`, `Attributes`, `Sequence`) VALUES( %s )")
676#define add_appsearch_entry(hdb, values) add_entry(__FILE__, __LINE__, "AppSearch", hdb, values, \
677 "INSERT INTO `AppSearch` " \
678 "(`Property`, `Signature_`) VALUES( %s )")
680#define add_signature_entry(hdb, values) add_entry(__FILE__, __LINE__, "Signature", hdb, values, \
681 "INSERT INTO `Signature` " \
682 "(`Signature`, `FileName`, `MinVersion`, `MaxVersion`," \
683 " `MinSize`, `MaxSize`, `MinDate`, `MaxDate`, `Languages`) " \
686#define add_launchcondition_entry(hdb, values) add_entry(__FILE__, __LINE__, "LaunchCondition", hdb, values, \
687 "INSERT INTO `LaunchCondition` " \
688 "(`Condition`, `Description`) VALUES( %s )")
690#define add_property_entry(hdb, values) add_entry(__FILE__, __LINE__, "Property", hdb, values, \
691 "INSERT INTO `Property` (`Property`, `Value`) VALUES( %s )")
693#define update_ProductVersion_property(hdb, value) add_entry(__FILE__, __LINE__, "Property", hdb, value, \
694 "UPDATE `Property` SET `Value` = '%s' WHERE `Property` = 'ProductVersion'")
696#define update_ProductCode_property(hdb, value) add_entry(__FILE__, __LINE__, "Property", hdb, value, \
697 "UPDATE `Property` SET `Value` = '%s' WHERE `Property` = 'ProductCode'")
699#define add_install_execute_sequence_entry(hdb, values) add_entry(__FILE__, __LINE__, "InstallExecuteSequence", hdb, values, \
700 "INSERT INTO `InstallExecuteSequence` " \
701 "(`Action`, `Condition`, `Sequence`) VALUES( %s )")
703#define add_install_ui_sequence_entry(hdb, values) add_entry(__FILE__, __LINE__, "InstallUISequence", hdb, values, \
704 "INSERT INTO `InstallUISequence` " \
705 "(`Action`, `Condition`, `Sequence`) VALUES( %s )")
707#define add_media_entry(hdb, values) add_entry(__FILE__, __LINE__, "Media", hdb, values, \
708 "INSERT INTO `Media` " \
709 "(`DiskId`, `LastSequence`, `DiskPrompt`, " \
710 "`Cabinet`, `VolumeLabel`, `Source`) VALUES( %s )")
712#define add_ccpsearch_entry(hdb, values) add_entry(__FILE__, __LINE__, "CCPSearch", hdb, values, \
713 "INSERT INTO `CCPSearch` (`Signature_`) VALUES( %s )")
715#define add_drlocator_entry(hdb, values) add_entry(__FILE__, __LINE__, "DrLocator", hdb, values, \
716 "INSERT INTO `DrLocator` " \
717 "(`Signature_`, `Parent`, `Path`, `Depth`) VALUES( %s )")
719#define add_complocator_entry(hdb, values) add_entry(__FILE__, __LINE__, "CompLocator", hdb, values, \
720 "INSERT INTO `CompLocator` " \
721 "(`Signature_`, `ComponentId`, `Type`) VALUES( %s )")
723#define add_inilocator_entry(hdb, values) add_entry(__FILE__, __LINE__, "IniLocator", hdb, values, \
724 "INSERT INTO `IniLocator` " \
725 "(`Signature_`, `FileName`, `Section`, `Key`, `Field`, `Type`) " \
728#define add_custom_action_entry(hdb, values) add_entry(__FILE__, __LINE__, "CustomAction", hdb, values, \
729 "INSERT INTO `CustomAction` " \
730 "(`Action`, `Type`, `Source`, `Target`) VALUES( %s )")
732#define add_dialog_entry(hdb, values) add_entry(__FILE__, __LINE__, "Dialog", hdb, values, \
733 "INSERT INTO `Dialog` " \
734 "(`Dialog`, `HCentering`, `VCentering`, `Width`, `Height`, `Attributes`, `Control_First`) VALUES ( %s )")
736#define add_control_entry(hdb, values) add_entry(__FILE__, __LINE__, "Control", hdb, values, \
737 "INSERT INTO `Control` " \
738 "(`Dialog_`, `Control`, `Type`, `X`, `Y`, `Width`, `Height`, `Attributes`, `Text`) VALUES( %s )");
740#define add_controlevent_entry(hdb, values) add_entry(__FILE__, __LINE__, "ControlEvent", hdb, values, \
741 "INSERT INTO `ControlEvent` " \
742 "(`Dialog_`, `Control_`, `Event`, `Argument`, `Condition`, `Ordering`) VALUES( %s )");
744#define add_actiontext_entry(hdb, values) add_entry(__FILE__, __LINE__, "ActionText", hdb, values, \
745 "INSERT INTO `ActionText` " \
746 "(`Action`, `Description`, `Template`) VALUES( %s )");
748#define add_upgrade_entry(hdb, values) add_entry(__FILE__, __LINE__, "Upgrade", hdb, values, \
749 "INSERT INTO `Upgrade` " \
750 "(`UpgradeCode`, `VersionMin`, `VersionMax`, `Language`, `Attributes`, `Remove`, `ActionProperty`) VALUES( %s )");
756 "INSERT INTO `RegLocator` (`Signature_`, `Root`, `Key`, `Name`, `Type`) "
757 "VALUES( '%s', %u, '%s', '%s', %u )";
780 "Installation Database");
784 "Installation Database");
796 "{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}");
835 "CREATE TABLE `Directory` ( "
836 "`Directory` CHAR(255) NOT NULL, "
837 "`Directory_Parent` CHAR(255), "
838 "`DefaultDir` CHAR(255) NOT NULL "
839 "PRIMARY KEY `Directory`)" );
851 sprintf(szPackage,
"#%lu", hdb);
887#define roundoffs(a, b, r) (((BYTE *)(b) - (BYTE *)(a) + ((r) - 1)) & ~((r) - 1))
888#define roundpos(a, b, r) (((BYTE *)(a)) + roundoffs(a, b, r))
951 skip(
"Not enough rights to perform tests\n");
973 skip(
"Not enough rights to perform tests\n");
1003 skip(
"Not enough rights to perform tests\n");
1064 ok(rec,
"MsiCreate record failed\n");
1085 ok ( hdb,
"failed to create package database\n" );
1090 add_component_entry( hdb,
"'RootComp', '{83e2694d-0864-4124-9323-6d37630912a1}', 'TARGETDIR', 8, '', 'RootFile'" );
1091 add_component_entry( hdb,
"'TestComp', '{A3FB59C8-C293-4F7E-B8C5-F0E1D8EEE4E5}', 'TestDir', 0, '', 'TestFile'" );
1104 add_file_entry( hdb,
"'RootFile', 'RootComp', 'rootfile.txt', 0, '', '1033', 8192, 1" );
1105 add_file_entry( hdb,
"'TestFile', 'TestComp', 'testfile.txt', 0, '', '1033', 8192, 1" );
1110 skip(
"Not enough rights to perform tests\n");
1145 sz =
sizeof tempdir - 1;
1158 "MsiSetTargetPath on file returned %d\n",
r );
1162 "MsiSetTargetPath on 'subdir' of file returned %d\n",
r );
1190 lstrcatA( tempdir,
"TestParent\\" );
1201 "Expected \"C:\\one\\two\\TestDir\\\", got \"%s\"\n",
buffer );
1206 "Expected C:\\one\\two\\TestDir\\testfile.txt, got %s\n",
buffer );
1252 skip(
"Not enough rights to perform tests\n");
1998 ok(!
r,
"'%s': got %u\n", prop,
r);
2022 skip(
"Not enough rights to perform tests\n");
2036 ok(!
r,
"got %u\n",
r);
2044 ok(!
r,
"got %u\n",
r);
2045 ok(sz == 0,
"got size %lu\n", sz);
2052 ok(sz == 0,
"got size %lu\n", sz);
2057 ok(!
r,
"got %u\n",
r);
2059 ok(sz == 0,
"got size %lu\n", sz);
2069 ok(!
r,
"got %u\n",
r);
2075 ok(!
r,
"got %u\n",
r);
2079 ok(!
r,
"got %u\n",
r);
2083 ok(!
r,
"got %u\n",
r);
2088 ok(!
r,
"got %u\n",
r);
2092 ok(!
r,
"got %u\n",
r);
2097 ok(!
r,
"got %u\n",
r);
2101 ok(!
r,
"got %u\n",
r);
2108 ok(!
r,
"got %u\n",
r);
2109 ok(sz == 3,
"got size %lu\n", sz);
2116 ok(sz == 3,
"got size %lu\n", sz);
2123 ok(sz == 3,
"got size %lu\n", sz);
2130 ok(sz == 3,
"got size %lu\n", sz);
2135 ok(!
r,
"got %u\n",
r);
2137 ok(sz == 3,
"got size %lu\n", sz);
2141 ok(!
r,
"got %u\n",
r);
2142 ok(sz == 3,
"got size %lu\n", sz);
2149 ok(sz == 3,
"got size %lu\n", sz);
2156 ok(sz == 3,
"got size %lu\n", sz);
2163 ok(sz == 3,
"got size %lu\n", sz);
2168 ok(!
r,
"got %u\n",
r);
2170 ok(sz == 3,
"got size %lu\n", sz);
2176 check_prop(hpkg,
"MetadataCompName",
"Photoshop.dll", 1, 0);
2210 ok(sz ==
len,
"wrong size %lu\n", sz);
2232 ok( hdb,
"failed to create package\n");
2237 skip(
"Not enough rights to perform tests\n");
2247 query =
"CREATE TABLE `_Property` ( "
2248 "`foo` INT NOT NULL, `bar` INT LOCALIZABLE PRIMARY KEY `foo`)";
2257 ok( hdb,
"failed to create package\n");
2259 query =
"CREATE TABLE `_Property` ( "
2260 "`foo` INT NOT NULL, `bar` INT LOCALIZABLE PRIMARY KEY `foo`)";
2264 query =
"ALTER `_Property` ADD `foo` INTEGER";
2268 query =
"ALTER TABLE `_Property` ADD `foo` INTEGER";
2272 query =
"ALTER TABLE `_Property` ADD `extra` INTEGER";
2276 sprintf(package,
"#%lu", hdb);
2286 ok (hdb,
"failed to create package database\n");
2307 ok(found,
"prop should be in the _Property table\n");
2311 query =
"SELECT * FROM `_Property` WHERE `Property` = 'dantes'";
2316 ok(found ==
FALSE,
"dantes should not be in the _Property table\n");
2328 ok(found ==
TRUE,
"dantes should be in the _Property table\n");
2338 ok( sz ==
sizeof(
"\0np") - 1,
"got %lu\n", sz );
2341 ok(found ==
TRUE,
"prop2 should be in the _Property table\n");
2430 skip(
"Not enough rights to perform tests\n");
2461 "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n",
r);
2463 query =
"CREATE TABLE `Property` ( "
2464 "`Property` CHAR(72), `Value` CHAR(0) "
2465 "PRIMARY KEY `Property`)";
2469 query =
"CREATE TABLE `InstallExecuteSequence` ("
2470 "`Action` CHAR(72), `Condition` CHAR(0), `Sequence` INTEGER "
2471 "PRIMARY KEY `Action`)";
2479 "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n",
r);
2498 "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n",
r);
2503 "Expected ERROR_SUCCESS, got %d\n",
r);
2520 skip(
"Not enough rights to perform tests\n");
2530 ok(hrec,
"create record failed\n");
2546 ok( sz == 3,
"size wrong\n");
2554 ok( sz == 3,
"size wrong\n");
2564 ok( sz == 3,
"size wrong\n");
2572 ok( sz == 1,
"size wrong\n");
2581 ok( sz == 3,
"size wrong\n");
2591 ok( sz == 3,
"size wrong\n");
2613 ok ( hdb,
"failed to create package database\n");
2617 "'I am a really long directory'" );
2633 add_file_entry( hdb,
"'frontal_file', 'frontal', 'frontal.txt', 0, '', '1033', 8192, 1" );
2634 add_file_entry( hdb,
"'parietal_file', 'parietal', 'parietal.txt', 0, '', '1033', 8192, 1" );
2635 add_file_entry( hdb,
"'temporal_file', 'temporal', 'temporal.txt', 0, '', '1033', 8192, 1" );
2647 skip(
"Not enough rights to perform tests\n");
2674 ok( !
lstrcmpA(
buf,
"1: ringer " ),
"Expected '1: ringer ', got %s\n",
buf );
2680 ok( !
lstrcmpA(
buf,
"1: ringer " ),
"Expected '1: ringer ', got %s\n",
buf );
2695 ok( !
lstrcmpA(
buf,
"1: crazyval " ),
"Expected '1: crazyval ', got %s\n",
buf );
2786 ok( !
lstrcmpA(
buf,
"[Bracket Text]" ),
"Expected '[Bracket Text]', got %s\n",
buf);
2814 ok( !
memcmp(
buf,
"\0np",
sizeof(
"\0np") ),
"wrong value\n");
2815 ok(
size ==
sizeof(
"\0np") - 1,
"got %lu\n",
size );
2849 sprintf(
buf,
"%sI am a really long directory\\temporal.txt",
root );
2871 ok(
state == expected_state,
"%u: expected state %d got %d\n",
2874 ok(
action == expected_action,
"%u: expected action %d got %d\n",
2879 ok(
state == 0xdeadbee,
"%u: expected state 0xdeadbee got %d\n",
line,
state );
2897 ok(
state == expected_state,
"%u: expected state %d got %d\n",
2900 ok(
action == expected_action,
"%u: expected action %d got %d\n",
2905 ok(
state == 0xdeadbee,
"%u: expected state 0xdeadbee got %d\n",
2908 ok(
action == 0xdeadbee,
"%u: expected action 0xdeadbee got %d\n",
2915 static const char msifile2[] =
"winetest2-package.msi";
2916 static const char msifile3[] =
"winetest3-package.msi";
2917 static const char msifile4[] =
"winetest4-package.msi";
2919 static const WCHAR msifile3W[] =
L"winetest3-package.msi";
2920 static const WCHAR msifile4W[] =
L"winetest4-package.msi";
2922 DWORD cache_file_name_len;
2932 skip(
"process is limited\n");
2937 ok ( hdb,
"failed to create package database\n" );
2942 add_property_entry( hdb,
"'ProductCode', '{7262AC98-EEBD-4364-8CE3-D654F6A425B9}'" );
2947 add_property_entry( hdb,
"'UpgradeCode', '{3494EEEA-4221-4A66-802E-DED8916BC5C5}'" );
2973 add_component_entry( hdb,
"'alpha', '{467EC132-739D-4784-A37B-677AA43DBC94}', 'TARGETDIR', 0, '', 'alpha_file'" );
2976 add_component_entry( hdb,
"'beta', '{2C1F189C-24A6-4C34-B26B-994A6C026506}', 'TARGETDIR', 1, '', 'beta_file'" );
2979 add_component_entry( hdb,
"'gamma', '{C271E2A4-DE2E-4F70-86D1-6984AF7DE2CA}', 'TARGETDIR', 2, '', 'gamma_file'" );
2982 add_component_entry( hdb,
"'theta', '{4EB3129D-81A8-48D5-9801-75600FED3DD9}', 'TARGETDIR', 8, '', 'theta_file'" );
2988 add_component_entry( hdb,
"'delta', '{938FD4F2-C648-4259-A03C-7AA3B45643F3}', 'TARGETDIR', 0, '', 'delta_file'" );
2991 add_component_entry( hdb,
"'epsilon', '{D59713B6-C11D-47F2-A395-1E5321781190}', 'TARGETDIR', 1, '', 'epsilon_file'" );
2994 add_component_entry( hdb,
"'zeta', '{377D33AB-2FAA-42B9-A629-0C0DAE9B9C7A}', 'TARGETDIR', 2, '', 'zeta_file'" );
2997 add_component_entry( hdb,
"'iota', '{5D36F871-B5ED-4801-9E0F-C46B9E5C9669}', 'TARGETDIR', 8, '', 'iota_file'" );
3009 add_component_entry( hdb,
"'eta', '{DD89003F-0DD4-41B8-81C0-3411A7DA2695}', 'TARGETDIR', 1, '', 'eta_file'" );
3012 add_component_entry( hdb,
"'kappa', '{D6B93DC3-8DA5-4769-9888-42BFE156BB8B}', 'TARGETDIR', 1, '', 'kappa_file'" );
3018 add_component_entry( hdb,
"'lambda', '{6528C5E4-02A4-4636-A214-7A66A6C35B64}', 'TARGETDIR', 0, '', 'lambda_file'" );
3021 add_component_entry( hdb,
"'mu', '{97014BAB-6C56-4013-9A63-2BF913B42519}', 'TARGETDIR', 1, '', 'mu_file'" );
3024 add_component_entry( hdb,
"'nu', '{943DD0D8-5808-4954-8526-3B8493FEDDCD}', 'TARGETDIR', 2, '', 'nu_file'" );
3027 add_component_entry( hdb,
"'xi', '{D6CF9EF7-6FCF-4930-B34B-F938AEFF9BDB}', 'TARGETDIR', 8, '', 'xi_file'" );
3033 add_component_entry( hdb,
"'omicron', '{7B57521D-15DB-4141-9AA6-01D934A4433F}', 'TARGETDIR', 0, '', 'omicron_file'" );
3036 add_component_entry( hdb,
"'pi', '{FB85346B-378E-4492-8769-792305471C81}', 'TARGETDIR', 1, '', 'pi_file'" );
3039 add_component_entry( hdb,
"'rho', '{798F2047-7B0C-4783-8BB0-D703E554114B}', 'TARGETDIR', 2, '', 'rho_file'" );
3042 add_component_entry( hdb,
"'sigma', '{5CE9DDA8-B67B-4736-9D93-99D61C5B93E7}', 'TARGETDIR', 8, '', 'sigma_file'" );
3047 add_component_entry( hdb,
"'tau', '{07DEB510-677C-4A6F-A0A6-7CD8EFEA77ED}', 'TARGETDIR', 1, '', 'tau_file'" );
3052 add_component_entry( hdb,
"'phi', '{9F0594C5-35AD-43EA-94DD-8DF73FAA664D}', 'TARGETDIR', 1, '', 'phi_file'" );
3057 add_component_entry( hdb,
"'chi', '{E6B539AB-5DA9-4236-A2D2-E341A50B4C38}', 'TARGETDIR', 1, '', 'chi_file'" );
3062 add_component_entry( hdb,
"'psi', '{A06B23B5-746B-427A-8A6E-FD6AC8F46A95}', 'TARGETDIR', 1, '', 'psi_file'" );
3067 add_component_entry( hdb,
"'upsilon', '{557e0c04-ceba-4c58-86a9-4a73352e8cf6}', 'TARGETDIR', 1, '', 'upsilon_file'" );
3100 add_file_entry( hdb,
"'alpha_file', 'alpha', 'alpha.txt', 100, '', '1033', 8192, 1" );
3101 add_file_entry( hdb,
"'beta_file', 'beta', 'beta.txt', 0, '', '1033', 8192, 1" );
3102 add_file_entry( hdb,
"'gamma_file', 'gamma', 'gamma.txt', 0, '', '1033', 8192, 1" );
3103 add_file_entry( hdb,
"'theta_file', 'theta', 'theta.txt', 0, '', '1033', 8192, 1" );
3104 add_file_entry( hdb,
"'delta_file', 'delta', 'delta.txt', 0, '', '1033', 8192, 1" );
3105 add_file_entry( hdb,
"'epsilon_file', 'epsilon', 'epsilon.txt', 0, '', '1033', 8192, 1" );
3106 add_file_entry( hdb,
"'zeta_file', 'zeta', 'zeta.txt', 0, '', '1033', 8192, 1" );
3107 add_file_entry( hdb,
"'iota_file', 'iota', 'iota.txt', 0, '', '1033', 8192, 1" );
3110 add_file_entry( hdb,
"'eta_file', 'eta', 'eta.txt', 0, '', '1033', 16384, 1" );
3112 add_file_entry( hdb,
"'kappa_file', 'kappa', 'kappa.txt', 0, '', '1033', 8192, 1" );
3113 add_file_entry( hdb,
"'lambda_file', 'lambda', 'lambda.txt', 100, '', '1033', 8192, 1" );
3114 add_file_entry( hdb,
"'mu_file', 'mu', 'mu.txt', 100, '', '1033', 8192, 1" );
3115 add_file_entry( hdb,
"'nu_file', 'nu', 'nu.txt', 100, '', '1033', 8192, 1" );
3116 add_file_entry( hdb,
"'xi_file', 'xi', 'xi.txt', 100, '', '1033', 8192, 1" );
3117 add_file_entry( hdb,
"'omicron_file', 'omicron', 'omicron.txt', 100, '', '1033', 8192, 1" );
3118 add_file_entry( hdb,
"'pi_file', 'pi', 'pi.txt', 100, '', '1033', 8192, 1" );
3119 add_file_entry( hdb,
"'rho_file', 'rho', 'rho.txt', 100, '', '1033', 8192, 1" );
3120 add_file_entry( hdb,
"'sigma_file', 'sigma', 'sigma.txt', 100, '', '1033', 8192, 1" );
3121 add_file_entry( hdb,
"'tau_file', 'tau', 'tau.txt', 100, '', '1033', 8192, 1" );
3122 add_file_entry( hdb,
"'phi_file', 'phi', 'phi.txt', 100, '', '1033', 8192, 1" );
3123 add_file_entry( hdb,
"'chi_file', 'chi', 'chi.txt', 100, '', '1033', 8192, 1" );
3124 add_file_entry( hdb,
"'psi_file', 'psi', 'psi.txt', 100, '', '1033', 8192, 1" );
3125 add_file_entry( hdb,
"'upsilon_file', 'upsilon', 'upsilon.txt', 0, '', '1033', 16384, 1" );
3140 skip(
"Not enough rights to perform tests\n");
3324 add_property_entry( hdb,
"'ADDLOCAL', 'one,two,three,four,five,six,seven,eight,nine,ten,twelve'");
3398 add_property_entry( hdb,
"'ADDSOURCE', 'one,two,three,four,five,six,seven,eight,nine,ten'");
3474 add_property_entry( hdb,
"'ADDSOURCE', 'one,two,three,four,five,six,seven,eight,nine,ten'");
3553 cache_file_name_len =
sizeof(msi_cache_file);
3570 "'VBFeatureRequest', 38, NULL, 'Session.FeatureRequestState(\"three\") = 3'" );
3680 add_upgrade_entry( hdb,
"'{3494EEEA-4221-4A66-802E-DED8916BC5C5}', NULL, '1.1.3', NULL, 0, NULL, 'OLDERVERSIONBEINGUPGRADED'");
3719 ok ( hdb,
"failed to create package database\n" );
3745 add_file_entry( hdb,
"'hydrogen_file', 'hydrogen', 'hydrogen.txt', 0, '', '1033', 8192, 1" );
3746 add_file_entry( hdb,
"'helium_file', 'helium', 'helium.txt', 0, '', '1033', 8192, 1" );
3747 add_file_entry( hdb,
"'lithium_file', 'lithium', 'lithium.txt', 0, '', '1033', 8192, 1" );
3748 add_file_entry( hdb,
"'beryllium_file', 'beryllium', 'beryllium.txt', 0, '', '1033', 16384, 1" );
3749 add_file_entry( hdb,
"'boron_file', 'boron', 'boron.txt', 0, '', '1033', 16384, 1" );
3750 add_file_entry( hdb,
"'carbon_file', 'carbon', 'carbon.txt', 0, '', '1033', 16384, 1" );
3751 add_file_entry( hdb,
"'oxygen_file', 'oxygen', 'oxygen.txt', 0, '', '1033', 16384, 1" );
3758 skip(
"Not enough rights to perform tests\n");
3788 installed =
action = 0xdeadbeef;
3803 installed =
action = 0xdeadbeef;
3824 installed =
action = 0xdeadbeef;
3833 installed =
action = 0xdeadbeef;
3842 installed =
action = 0xdeadbeef;
3848 ok(
DeleteFileA(
"hydrogen.txt"),
"Expected hydrogen.txt to exist\n");
3849 ok(
DeleteFileA(
"lithium.txt"),
"Expected lithium.txt to exist\n");
3850 ok(
DeleteFileA(
"beryllium.txt"),
"Expected beryllium.txt to exist\n");
3851 ok(
DeleteFileA(
"carbon.txt"),
"Expected carbon.txt to exist\n");
3852 ok(
DeleteFileA(
"helium.txt"),
"Expected helium.txt to exist\n");
3853 ok(
DeleteFileA(
"boron.txt"),
"Expected boron.txt to exist\n");
3854 ok(
DeleteFileA(
"oxygen.txt"),
"Expected oxygen.txt to exist\n");
3868 const char reg_expand_value[] =
"%systemroot%\\system32\\notepad.exe";
3871 ok ( hdb,
"failed to create package database\n" );
3894 skip(
"insufficient rights\n");
3903 sizeof(
"c:\\windows\\system32\\notepad.exe"));
3912 sizeof(
"c:\\windows\\system32\\notepad.exe"));
3923 add_signature_entry( hdb,
"'NewSignature2', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" );
3924 add_signature_entry( hdb,
"'NewSignature3', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" );
3925 add_signature_entry( hdb,
"'NewSignature4', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" );
3926 add_signature_entry( hdb,
"'NewSignature5', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" );
3931 skip(
"Not enough rights to perform tests\n");
3945 size =
sizeof(prop);
3948 ok(
lstrlenA(prop) != 0,
"Expected non-zero length\n");
3950 size =
sizeof(prop);
3954 size =
sizeof(prop);
3957 ok(
lstrlenA(prop) != 0,
"Expected non-zero length\n");
3959 size =
sizeof(prop);
3962 ok(
lstrlenA(prop) != 0,
"Expected non-zero length\n");
3964 size =
sizeof(prop);
3967 ok(
lstrlenA(prop) != 0,
"Expected non-zero length\n");
3990 skip(
"process is limited\n");
3997 "{A8AE6692-96BA-4198-8399-145D7D1D0D0E}",
NULL,
FALSE);
4001 "{1D2CE6F3-E81C-4949-AB81-78D7DAD2AF2E}", usersid,
FALSE);
4005 "{19E0B999-85F5-4973-A61B-DBE4D66ECB1D}", usersid,
FALSE);
4009 "{F0CCA976-27A3-4808-9DDD-1A6FD50A0D5A}",
NULL,
TRUE);
4013 "{C0ECD96F-7898-4410-9667-194BD8C1B648}",
NULL,
TRUE);
4017 "{DB20F535-9C26-4127-9C2B-CC45A8B51DA1}",
NULL,
FALSE);
4021 "{91B7359B-07F2-4221-AA8D-DE102BB87A5F}",
NULL,
FALSE);
4025 "{4A2E1B5B-4034-4177-833B-8CC35F1B3EF1}",
NULL,
FALSE);
4029 "{A204DF48-7346-4635-BA2E-66247DBAC9DF}",
NULL,
FALSE);
4033 "{EC30CE73-4CF9-4908-BABD-1ED82E1515FD}",
NULL,
FALSE);
4036 ok(hdb,
"Expected a valid database handle\n");
4096 add_signature_entry(hdb,
"'NewSignature10', 'FileName8.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4097 add_signature_entry(hdb,
"'NewSignature11', 'FileName9.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4098 add_signature_entry(hdb,
"'NewSignature12', 'ignored', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4103 skip(
"Not enough rights to perform tests\n");
4141 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4164 ok(!
lstrcmpA(prop,
"october"),
"Expected \"october\", got \"%s\"\n", prop);
4169 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4180 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4232 HKEY hklm, classes, hkcu, users;
4247 skip(
"Not enough rights to perform tests\n");
4253 (
const BYTE *)
"regszdata", 10);
4260 (
const BYTE *)
"regszdata", 10);
4270 (
const BYTE *)
"regszdata", 10);
4281 (
const BYTE *)
"regszdata", 10);
4295 (
const BYTE *)
"%PATH%", 7);
4299 (
const BYTE *)
"my%NOVAR%", 10);
4303 (
const BYTE *)
"one\0two\0", 9);
4313 (
const BYTE *)
"#regszdata", 11);
4336 (
const BYTE *)
"", 1);
4369 ok(hdb,
"Expected a valid database handle\n");
4527 add_signature_entry(hdb,
"'NewSignature21', 'FileName3.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4528 add_signature_entry(hdb,
"'NewSignature22', 'FileName4.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4529 add_signature_entry(hdb,
"'NewSignature23', 'ignored', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4534 sprintf(
path,
"'NewSignature26', '%s', '', '', '', '', '', '', ''",
ptr);
4553 "Expected \"regszdata\", got \"%s\"\n", prop);
4558 ok(!
lstrcmpA(prop,
"#42"),
"Expected \"#42\", got \"%s\"\n", prop);
4563 ok(!
lstrcmpA(prop,
"#-42"),
"Expected \"#-42\", got \"%s\"\n", prop);
4565 memset(&si, 0,
sizeof(si));
4582 "Expected \"%s\", got \"%s\"\n", pathvar, pathdata);
4592 "my%NOVAR%"),
"Expected \"my%%NOVAR%%\", got \"%s\"\n", prop);
4599 ok(!
memcmp(prop,
"\0one\0two\0\0", 10),
4600 "Expected \"\\0one\\0two\\0\\0\"\n");
4613 "Expected \"##regszdata\", got \"%s\"\n", prop);
4624 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4635 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4646 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4652 "Expected \"regszdata\", got \"%s\"\n", prop);
4658 "Expected \"regszdata\", got \"%s\"\n", prop);
4666 "Expected \"regszdata\", got \"%s\"\n", prop);
4673 "Expected \"defvalue\", got \"%s\"\n", prop);
4678 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4683 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4696 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4727 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4732 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4737 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4750 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4848 ok(hdb,
"Expected a valid database handle\n");
4905 add_signature_entry(hdb,
"'NewSignature10', 'FileName2.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4906 add_signature_entry(hdb,
"'NewSignature11', 'FileName3.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4907 add_signature_entry(hdb,
"'NewSignature12', 'ignored', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4912 skip(
"Not enough rights to perform tests\n");
4932 ok(!
lstrcmpA(prop,
"keydata"),
"Expected \"keydata\", got \"%s\"\n", prop);
4937 ok(!
lstrcmpA(prop,
"field2"),
"Expected \"field2\", got \"%s\"\n", prop);
4943 "Expected \"keydata,field2\", got \"%s\"\n", prop);
4954 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4981 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4994 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5028 for (
i = 0;
i < 26; absolute[0] =
'\0',
i++)
5030 if (!(drives & (1 <<
i)))
5033 absolute[0] =
'A' +
i;
5042 if (absolute[3 +
size - 1] !=
'\\')
5075 ok(hdb,
"Expected a valid database handle\n");
5121 sprintf(
path,
"'NewSignature7', 'NewSignature1', 'one\\two\\three', 1");
5146 sprintf(
path,
"'NewSignature13', 'NewSignature12', '', 0");
5155 add_signature_entry(hdb,
"'NewSignature8', 'FileName3.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5156 add_signature_entry(hdb,
"'NewSignature9', 'FileName4.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5157 add_signature_entry(hdb,
"'NewSignature10', 'necessary', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5162 skip(
"Not enough rights to perform tests\n");
5193 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5204 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5223 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5228 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5241 ok(!prop[0],
"Expected \"\", got \"%s\"\n", prop);
5265 ok ( hdb,
"failed to create package database\n" );
5343 add_file_entry( hdb,
"'leo_file', 'leo', 'leo.txt', 100, '', '1033', 8192, 1" );
5344 add_file_entry( hdb,
"'virgo_file', 'virgo', 'virgo.txt', 0, '', '1033', 8192, 1" );
5345 add_file_entry( hdb,
"'libra_file', 'libra', 'libra.txt', 0, '', '1033', 8192, 1" );
5346 add_file_entry( hdb,
"'cassiopeia_file', 'cassiopeia', 'cassiopeia.txt', 0, '', '1033', 8192, 1" );
5347 add_file_entry( hdb,
"'cepheus_file', 'cepheus', 'cepheus.txt', 0, '', '1033', 8192, 1" );
5348 add_file_entry( hdb,
"'andromeda_file', 'andromeda', 'andromeda.txt', 0, '', '1033', 8192, 1" );
5349 add_file_entry( hdb,
"'canis_file', 'canis', 'canis.txt', 0, '', '1033', 8192, 1" );
5350 add_file_entry( hdb,
"'monoceros_file', 'monoceros', 'monoceros.txt', 0, '', '1033', 8192, 1" );
5351 add_file_entry( hdb,
"'lepus_file', 'lepus', 'lepus.txt', 0, '', '1033', 8192, 1" );
5352 add_file_entry( hdb,
"'delphinus_file', 'delphinus', 'delphinus.txt', 0, '', '1033', 8192, 1" );
5353 add_file_entry( hdb,
"'hydrus_file', 'hydrus', 'hydrus.txt', 0, '', '1033', 8192, 1" );
5358 skip(
"Not enough rights to perform tests\n");
5451 ok( hdb,
"failed to create database\n");
5456 skip(
"Not enough rights to perform tests\n");
5534 trace(
"VersionDatabase = %s\n",
buf);
5658 check_prop(hpkg,
"System64Folder",
"", 0, 0);
5659 check_prop(hpkg,
"ProgramFiles64Dir",
"", 0, 0);
5660 check_prop(hpkg,
"CommonFiles64Dir",
"", 0, 0);
5681 ok( hdb,
"failed to create package database\n" );
5693 skip(
"Not enough rights to perform tests\n");
5729 ok(hdb,
"failed to create package database\n");
5746 skip(
"Not enough rights to perform tests\n");
5761 ok(!
lstrcmpA(prop,
"1"),
"Expected 1, got %s\n", prop);
5776 ok(hdb,
"failed to create package database\n");
5827 skip(
"Not enough rights to perform tests\n");
5853 "{E3619EED-305A-418C-B9C7-F7D7377F0934}",
NULL,
FALSE);
5855 "{D56B688D-542F-42Ef-90FD-B6DA76EE8119}",
NULL,
FALSE);
5857 "{A19E16C5-C75D-4699-8111-C4338C40C3CB}",
NULL,
FALSE);
5859 "{17762FA1-A7AE-4CC6-8827-62873C35361D}",
NULL,
FALSE);
5861 "{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}",
NULL,
FALSE);
5863 "{243C22B1-8C51-4151-B9D1-1AE5265E079E}",
NULL,
FALSE);
5865 "{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}",
NULL,
FALSE);
5867 "{0B499649-197A-48EF-93D2-AF1C17ED6E90}",
NULL,
FALSE);
5882 "Expected %s or empty string, got %s\n",
expected, prop);
5887 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5892 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5897 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5906 "Expected %s or empty string, got %s\n",
expected, prop);
5911 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5916 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5921 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5926 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5931 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5936 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5941 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5950 "Expected %s or empty string, got %s\n",
expected, prop);
5960 "Expected %s or empty string, got %s\n",
expected, prop);
5965 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
5970 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6049 ok( hdb,
"failed to create database\n");
6063 skip(
"Not enough rights to perform tests\n");
6076 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
6078 "Expected path to be unchanged, got \"%s\"\n",
path);
6086 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
6088 "Expected path to be unchanged, got \"%s\"\n",
path);
6097 "Expected path to be unchanged, got \"%s\"\n",
path);
6106 "Expected path to be unchanged, got \"%s\"\n",
path);
6114 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6121 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6129 "Expected path to be unchanged, got \"%s\"\n",
path);
6138 "Expected path to be unchanged, got \"%s\"\n",
path);
6147 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6154 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6162 "Expected path to be unchanged, got \"%s\"\n",
path);
6171 "Expected path to be unchanged, got \"%s\"\n",
path);
6201 "Expected path to be unchanged, got \"%s\"\n",
path);
6260 "Expected path to be unchanged, got \"%s\"\n",
path);
6319 "Expected path to be unchanged, got \"%s\"\n",
path);
6378 "Expected path to be unchanged, got \"%s\"\n",
path);
6418 "Expected path to be unchanged, got \"%s\"\n",
path);
6431 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
6433 "Expected path to be unchanged, got \"%s\"\n",
path);
6441 "Expected path to be unchanged, got \"%s\"\n",
path);
6450 "Expected path with no backslash, got \"%s\"\n",
path);
6483 "Expected path to be unchanged, got \"%s\"\n",
path);
6504 "Expected path to be unchanged, got \"%s\"\n",
path);
6513 "Expected path to be unchanged, got \"%s\"\n",
path);
6522 "Expected path to be unchanged, got \"%s\"\n",
path);
6531 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6538 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6546 "Expected path to be unchanged, got \"%s\"\n",
path);
6555 "Expected path to be unchanged, got \"%s\"\n",
path);
6825 ok( hdb,
"failed to create database\n");
6856 skip(
"Not enough rights to perform tests\n");
7158 ok( hdb,
"failed to create database\n");
7162 sprintf(package,
"#%lu", hdb);
7166 skip(
"Not enough rights to perform tests\n");
7179 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7187 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7200 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7208 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7219 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7227 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7238 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7246 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7290 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7295 sprintf(package,
"#%lu", hdb);
7309 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7317 "Expected path to be unchanged, got \"%s\"\n",
path);
7328 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7339 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7347 "Expected path to be unchanged, got \"%s\"\n",
path);
7358 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7372 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7404 "Expected path to be unchanged, got \"%s\"\n",
path);
7432 "Expected path to be unchanged, got \"%s\"\n",
path);
7460 "Expected path to be unchanged, got \"%s\"\n",
path);
7488 "Expected path to be unchanged, got \"%s\"\n",
path);
7572 for (
i = 0;
i < 4;
i++)
7579 for (
j = 0;
j < 4;
j++)
7584 if (
j == 0) share = 0;
7595 "(%lu, handle, %d): Expected %d, got %d\n",
7608#define test_file_access(file, ares) _test_file_access(file, ares, __LINE__)
7646 MSIHANDLE hpkg = 0, hdb = 0, hsuminfo = 0;
7656 skip(
"Not enough rights to perform tests\n");
7667 ok(hdb != 0,
"Expected a valid database handle\n");
7694 "Expected \"_Property\", got \"%s\"\n",
buffer);
7711 "Expected \"_Property\", got \"%s\"\n",
buffer);
7722 "Expected MSICONDITION_FALSE, got %d\n",
condition);
7751 "Expected MSICONDITION_FALSE, got %d\n",
condition);
7780 "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n",
r);
7787 "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n",
r);
7794 "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n",
r);
7847 "CREATE TABLE `Directory` ( "
7848 "`Directory` CHAR(255) NOT NULL, "
7849 "`Directory_Parent` CHAR(255), "
7850 "`DefaultDir` CHAR(255) NOT NULL "
7851 "PRIMARY KEY `Directory`)");
7864 lstrcpyA(keypath,
"Software\\Classes\\Installer\\Products\\");
7870 skip(
"Not enough rights to perform tests\n");
7876 lstrcpyA(keypath,
"Software\\Microsoft\\Windows\\CurrentVersion\\");
7877 lstrcatA(keypath,
"Installer\\UserData\\S-1-5-18\\Products\\");
7883 skip(
"Not enough rights to perform tests\n");
7904 win_skip(
"broken result, skipping tests\n");
7908 ok(hprod != 0 && hprod != 0xdeadbeef,
"Expected a valid product handle\n");
7915 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
7917 "Expected val to be unchanged, got \"%s\"\n",
val);
7924 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
7926 "Expected val to be unchanged, got %s\n",
wine_dbgstr_w(valW));
7934 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
7936 "Expected val to be unchanged, got \"%s\"\n",
val);
7943 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
7945 "Expected val to be unchanged, got %s\n",
wine_dbgstr_w(valW));
7954 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7961 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7969 "Expected \"%s\", got \"%s\"\n", prodcode,
val);
7999 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8001 "Expected val to be unchanged, got \"%s\"\n",
val);
8008 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8010 "Expected val to be unchanged, got %s\n",
wine_dbgstr_w(valW));
8020 "Expected first 3 chars of \"%s\", got \"%s\"\n", prodcode,
val);
8039 "Expected first 37 chars of \"%s\", got \"%s\"\n", prodcode,
val);
8058 "Expected \"%s\", got \"%s\"\n", prodcode,
val);
8077 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8084 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8095 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8102 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8113 "Expected \"%s\", got \"%s\"\n", prodcode,
val);
8149 skip(
"Not enough rights to perform tests\n");
8158 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
8163 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
8168 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8173 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8178 "Expected ERROR_FUNCTION_FAILED, got %d\n",
r);
8193 ok(
size == 3,
"Expected 3, got %lu\n",
size);
8204 ok(
size == 4,
"Expected 4, got %lu\n",
size);
8207 ok(hdb != 0,
"Expected a valid database handle\n");
8210 query =
"SELECT * FROM `_Property` WHERE `Property` = 'Prop'";
8213 "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n",
r);
8216 query =
"SELECT * FROM `Property` WHERE `Property` = 'Prop'";
8219 "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n",
r);
8232 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8247 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8311 char package[12],
drive[3];
8317 ok( hdb,
"failed to create database\n" );
8320 add_property_entry( hdb,
"'ProductCode', '{379B1C47-40C1-42FA-A9BB-BEBB6F1B0172}'" );
8328 add_file_entry( hdb,
"'a.txt', 'one', 'a.txt', 2048000000, '', '', 8192, 1" );
8329 add_file_entry( hdb,
"'b.txt', 'one', 'b.txt', 2048000000, '', '', 8192, 1" );
8330 add_file_entry( hdb,
"'c.txt', 'one', 'c.txt', 2048000000, '', '', 8192, 1" );
8331 add_file_entry( hdb,
"'d.txt', 'one', 'd.txt', 4097, '', '', 8192, 1" );
8332 add_file_entry( hdb,
"'e.txt', 'one', 'e.txt', 1, '', '', 8192, 1" );
8335 add_component_entry( hdb,
"'one', '{B2F86B9D-8447-4BC5-8883-750C45AA31CA}', 'TARGETDIR', 0, '', 'a.txt'" );
8336 add_component_entry( hdb,
"'two', '{62A09F6E-0B74-4829-BDB7-CAB66F42CCE8}', 'TARGETDIR', 0, '', ''" );
8355 sprintf( package,
"#%lu", hdb );
8359 skip(
"Not enough rights to perform tests\n");
8431 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8436 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8441 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8458 cost =
temp = 0xdead;
8461 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8462 ok(
drive[0],
"expected a drive\n" );
8463 ok( cost == 12000024,
"got %d\n", cost );
8464 ok( !
temp,
"expected temp == 0, got %d\n",
temp );
8468 cost =
temp = 0xdead;
8471 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8472 ok(
drive[0],
"expected a drive\n" );
8473 ok( !cost,
"expected cost == 0, got %d\n", cost );
8474 ok( !
temp,
"expected temp == 0, got %d\n",
temp );
8478 cost =
temp = 0xdead;
8481 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8482 ok(
drive[0],
"expected a drive\n" );
8483 ok( !cost,
"expected cost == 0, got %d\n", cost );
8499 ok( cost == 0xdead,
"got %d\n", cost );
8506 ok( !
r,
"got %u\n",
r);
8507 ok( cost == 12000024,
"got %d\n", cost );
8519 char buf[32], package[12];
8523 ok( hdb,
"failed to create database\n" );
8527 sprintf( package,
"#%lu", hdb );
8531 skip(
"Not enough rights to perform tests\n");
8578 ok(
r == 1,
"expected 1, got %u\n",
r);
8580 ok(
r == 12345,
"expected 12345, got %u\n",
r);
8599 skip(
"Not enough rights to perform tests\n");
8606 ok(hrecord,
"Expected a valid record\n");
8614 ok(
r == 0,
"expected 0, got %u\n",
r);
8624 ok(
r == 0,
"expected 0, got %u\n",
r);
8632 ok(
r == 0,
"expected 0, got %u\n",
r);
8639 ok(
r == 1,
"expected 1, got %u\n",
r);
8649 ok(
r == 0,
"expected 0, got %u\n",
r);
8711 ok_(
file,
line) (
FALSE,
"%s: in msg 0x%08x expecting field count %d got %d\n",
8721 ok_(
file,
line) (
FALSE,
"%s: in msg 0x%08x field %d: expected \"%s\", got \"%s\"\n",
8737 ok_(
file,
line) (
FALSE,
"%s: the msg 0x%08x was expected, but got msg 0x%08x instead\n",
8750 ok_(
file,
line) (
FALSE,
"%s: the msg sequence is not complete: expected %08x - actual %08x\n",
8755 if(
todo && !failcount)
8765#define ok_sequence(exp, contx, todo) \
8766 ok_sequence_((exp), (contx), (todo), __FILE__, __LINE__)
8800 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
8802 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
8803 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
8808 {
INSTALLMESSAGE_INFO, 3, {
"zero",
"one",
"two",
"three"}, {1, 1, 1, 1}},
8813 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"name",
"description",
"template"}, {0, 1, 1, 1}},
8818 {
INSTALLMESSAGE_ACTIONDATA, 3, {
"{{name: }}template",
"cherry",
"banana",
"guava"}, {1, 1, 1, 1}},
8823 {
INSTALLMESSAGE_USER, 3, {
"",
"1311",
"banana",
"guava"}, {0, 1, 1, 1}},
8828 {
INSTALLMESSAGE_INFO, 3, {
"DEBUG: Error [1]: Action not found: [2]",
"2726",
"banana",
"guava"}, {1, 1, 1, 1}},
8829 {
INSTALLMESSAGE_USER, 3, {
"internal error",
"2726",
"banana",
"guava"}, {1, 1, 1, 1}},
8834 {
INSTALLMESSAGE_USER, 3, {
"",
"2726",
"banana",
"guava"}, {0, 1, 1, 1}},
8839 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostInitialize",
"cost description",
"cost template"}, {0, 1, 1, 1}},
8846 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"description",
"template"}, {0, 1, 1, 1}},
8853 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
8861 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
8866 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
8869 {
INSTALLMESSAGE_INFO, 2, {
"DEBUG: Error [1]: Action not found: [2]",
"2726",
"custom"}, {1, 1, 1}},
8876 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"dialog",
"",
""}, {0, 1, 1, 1}},
8885 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"error",
"",
""}, {0, 1, 1, 1}},
8892 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"dialog",
"",
""}, {0, 1, 1, 1}},
8900 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"dialog",
"",
""}, {0, 1, 1, 1}},
8918 msg.field_count = 0;
8938 msg.field_count = -1;
8943 for (
i = 0;
i <=
msg.field_count;
i++)
8979 ok(hdb,
"failed to create database\n");
8981 create_file_data(
"forcecodepage.idt",
"\r\n\r\n1252\t_ForceCodepage\r\n",
sizeof(
"\r\n\r\n1252\t_ForceCodepage\r\n") - 1);
8985 r =
run_query(hdb, 0,
"CREATE TABLE `Error` (`Error` SHORT NOT NULL, `Message` CHAR(0) PRIMARY KEY `Error`)");
8987 r =
run_query(hdb, 0,
"INSERT INTO `Error` (`Error`, `Message`) VALUES (5, 'internal error')");
9005 skip(
"Not enough rights to perform tests\n");
9014 ok(hrecord,
"failed to create record\n");
9021 ok(
r == 1,
"Expected 1, got %d\n",
r);
9028 ok(
r == 1,
"Expected 1, got %d\n",
r);
9036 ok(
r == 1,
"Expected 1, got %d\n",
r);
9043 ok(
r == 1,
"Expected 1, got %d\n",
r);
9050 ok(
r == 0,
"Expected 0, got %d\n",
r);
9056 ok(
r == 1,
"Expected 1, got %d\n",
r);
9075 ok(hdb,
"failed to create database\n");
9143 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"spawn",
"",
""}, {0, 1, 1, 1}},
9148 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
9159 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"spawn2",
"",
""}, {0, 1, 1, 1}},
9164 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
9182 skip(
"interactive ControlEvent tests\n");
9196 ok(hdb,
"failed to create database\n");
9198 create_file_data(
"forcecodepage.idt",
"\r\n\r\n1252\t_ForceCodepage\r\n",
sizeof(
"\r\n\r\n1252\t_ForceCodepage\r\n") - 1);
9209 add_control_entry(hdb,
"'spawn', 'button', 'PushButton', 10, 10, 66, 17, 3, 'Click me'");
9210 add_control_entry(hdb,
"'spawn2', 'button', 'PushButton', 10, 10, 66, 17, 3, 'Click me'");
9211 add_control_entry(hdb,
"'child1', 'exit', 'PushButton', 10, 10, 66, 17, 3, 'Click me'");
9212 add_control_entry(hdb,
"'child2', 'exit', 'PushButton', 10, 10, 66, 17, 3, 'Click me'");
9251 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9254 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9255 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9257 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9258 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9260 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9264 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostInitialize",
"",
""}, {0, 1, 0, 1}},
9268 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"FileCost",
"",
""}, {0, 1, 0, 1}},
9272 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostFinalize",
"",
""}, {0, 1, 0, 1}},
9277 {
INSTALLMESSAGE_INSTALLEND, 3, {
"",
"",
"{7262AC98-EEBD-4364-8CE3-D654F6A425B9}",
"1"}, {1, 1, 1, 1}, 1},
9288 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9291 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"AppSearch",
"",
""}, {0, 1, 0, 0}},
9300 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"ExecuteAction",
"",
""}, {0, 1, 1, 1}},
9303 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9304 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9305 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9306 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9308 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9312 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostInitialize",
"",
""}, {0, 1, 0, 1}},
9316 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"FileCost",
"",
""}, {0, 1, 0, 1}},
9320 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostFinalize",
"",
""}, {0, 1, 0, 1}},
9325 {
INSTALLMESSAGE_INSTALLEND, 3, {
"",
"",
"{7262AC98-EEBD-4364-8CE3-D654F6A425B9}",
"1"}, {1, 1, 1, 1}, 1},
9336 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"ExecuteAction",
"",
""}, {0, 1, 1, 1}},
9339 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9340 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9341 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9342 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9344 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostInitialize",
"",
""}, {0, 1, 0, 1}},
9359 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9360 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9362 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9363 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9365 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9368 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"AppSearch",
"",
""}, {0, 1, 0, 0}},
9384 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9385 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9387 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9388 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9390 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CUSTOM",
"",
""}, {0, 1, 1, 1}},
9419 ok(hdb,
"failed to create database\n");
9421 create_file_data(
"forcecodepage.idt",
"\r\n\r\n1252\t_ForceCodepage\r\n",
sizeof(
"\r\n\r\n1252\t_ForceCodepage\r\n") -1 );
static char CURR_DIR[MAX_PATH]
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
char * strchr(const char *String, int ch)
static int run_query(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name, BOOL value_empty, BOOL recurse)
void ls(int argc, const char *argv[])
void user(int argc, const char *argv[])
#define RegCloseKey(hKey)
static const WCHAR msifile2W[]
static const char * msifile2
static const CHAR suminfo[]
#define ERROR_NOT_ENOUGH_MEMORY
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegCreateKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LONG WINAPI RegDeleteKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ REGSAM samDesired, _In_ DWORD Reserved)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegDeleteValueA(HKEY hKey, LPCSTR lpValueName)
LONG WINAPI RegSetValueA(HKEY hKeyOriginal, LPCSTR lpSubKey, DWORD dwType, LPCSTR lpData, DWORD cbData)
LONG WINAPI RegDeleteKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ REGSAM samDesired, _In_ DWORD Reserved)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
LONG WINAPI RegCreateKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD Reserved, _In_ LPSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_ LPDWORD lpdwDisposition)
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
BOOL WINAPI ConvertSidToStringSidA(PSID Sid, LPSTR *StringSid)
#define ERROR_INVALID_PARAMETER
#define INVALID_HANDLE_VALUE
#define CreateFileA(a, b, c, d, e, f, g)
#define GetCurrentProcess()
#define ERROR_NO_MORE_ITEMS
#define ERROR_INVALID_HANDLE
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define MultiByteToWideChar
#define ERROR_ACCESS_DENIED
#define ERROR_INVALID_NAME
static const WCHAR version[]
static void cleanup(void)
static const WCHAR substrW[]
DWORD WINAPI ExpandEnvironmentStringsA(IN LPCSTR lpSrc, IN LPSTR lpDst, IN DWORD nSize)
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableA(IN LPCSTR lpName, IN LPCSTR lpValue)
BOOL WINAPI CopyFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName, IN BOOL bFailIfExists)
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
BOOL WINAPI RemoveDirectoryA(IN LPCSTR lpPathName)
BOOL WINAPI CreateDirectoryA(IN LPCSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
UINT WINAPI GetDriveTypeA(IN LPCSTR lpRootPathName)
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName)
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
UINT WINAPI GetSystemWow64DirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
UINT WINAPI GetWindowsDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetFullPathNameA(IN LPCSTR lpFileName, IN DWORD nBufferLength, OUT LPSTR lpBuffer, OUT LPSTR *lpFilePart)
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
UINT WINAPI GetSystemDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
VOID WINAPI GetNativeSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
BOOL WINAPI DECLSPEC_HOTPATCH WritePrivateProfileStringA(LPCSTR section, LPCSTR entry, LPCSTR string, LPCSTR filename)
BOOL WINAPI UpdateResourceA(HANDLE hUpdate, LPCSTR lpType, LPCSTR lpName, WORD wLanguage, LPVOID lpData, DWORD cbData)
HANDLE WINAPI BeginUpdateResourceA(LPCSTR pFileName, BOOL bDeleteExistingResources)
BOOL WINAPI EndUpdateResourceA(HANDLE hUpdate, BOOL fDiscard)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
LANGID WINAPI GetUserDefaultLangID(void)
UINT WINAPI MsiDatabaseImportA(MSIHANDLE handle, const char *szFolder, const char *szFilename)
UINT WINAPI MsiOpenDatabaseA(LPCSTR szDBPath, LPCSTR szPersist, MSIHANDLE *phDB)
UINT WINAPI MsiOpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIHANDLE *phDB)
UINT WINAPI MsiCloseHandle(MSIHANDLE handle)
UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
UINT WINAPI MsiGetComponentStateA(MSIHANDLE hInstall, LPCSTR szComponent, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
UINT WINAPI MsiGetTargetPathW(MSIHANDLE hinst, const WCHAR *folder, WCHAR *buf, DWORD *sz)
UINT WINAPI MsiDoActionA(MSIHANDLE hInstall, LPCSTR szAction)
UINT WINAPI MsiGetTargetPathA(MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
UINT WINAPI MsiSetFeatureStateA(MSIHANDLE hInstall, LPCSTR szFeature, INSTALLSTATE iState)
UINT WINAPI MsiSetTargetPathA(MSIHANDLE hInstall, LPCSTR szFolder, LPCSTR szFolderPath)
UINT WINAPI MsiGetFeatureCostA(MSIHANDLE hInstall, LPCSTR szFeature, MSICOSTTREE iCostTree, INSTALLSTATE iState, LPINT piCost)
UINT WINAPI MsiGetFeatureStateA(MSIHANDLE hInstall, LPCSTR szFeature, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
UINT WINAPI MsiSetComponentStateA(MSIHANDLE hInstall, LPCSTR szComponent, INSTALLSTATE iState)
UINT WINAPI MsiOpenProductA(LPCSTR szProduct, MSIHANDLE *phProduct)
UINT WINAPI MsiSetExternalUIRecord(INSTALLUI_HANDLER_RECORD handler, DWORD filter, void *context, INSTALLUI_HANDLER_RECORD *prev)
UINT WINAPI MsiInstallProductA(LPCSTR szPackagePath, LPCSTR szCommandLine)
INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(INSTALLUI_HANDLERA puiHandler, DWORD dwMessageFilter, void *pvContext)
UINT WINAPI MsiGetProductPropertyA(MSIHANDLE hProduct, const char *szProperty, char *szValue, DWORD *pccbValue)
UINT WINAPI MsiGetProductPropertyW(MSIHANDLE hProduct, const WCHAR *szProperty, WCHAR *szValue, DWORD *pccbValue)
UINT WINAPI MsiGetProductInfoA(LPCSTR szProduct, LPCSTR szAttribute, LPSTR szBuffer, LPDWORD pcchValueBuf)
UINT WINAPI MsiApplyMultiplePatchesA(LPCSTR szPatchPackages, LPCSTR szProductCode, LPCSTR szPropertiesList)
INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL dwUILevel, HWND *phWnd)
INSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR szProduct, LPCSTR szFeature)
UINT WINAPI MsiApplyPatchA(LPCSTR szPatchPackage, LPCSTR szInstallPackage, INSTALLTYPE eInstallType, LPCSTR szCommandLine)
UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE handle, const char *component, DWORD index, INSTALLSTATE state, char *drive, DWORD *buflen, int *cost, int *temp)
UINT WINAPI MsiOpenPackageA(LPCSTR szPackage, MSIHANDLE *phPackage)
UINT WINAPI MsiSetPropertyA(MSIHANDLE hInstall, LPCSTR szName, LPCSTR szValue)
MSIHANDLE WINAPI MsiGetActiveDatabase(MSIHANDLE hInstall)
UINT WINAPI MsiGetPropertyW(MSIHANDLE hinst, const WCHAR *name, WCHAR *buf, DWORD *sz)
UINT WINAPI MsiGetPropertyA(MSIHANDLE hinst, const char *name, char *buf, DWORD *sz)
INT WINAPI MsiProcessMessage(MSIHANDLE hInstall, INSTALLMESSAGE eMessageType, MSIHANDLE hRecord)
int WINAPI MsiRecordGetInteger(MSIHANDLE handle, UINT iField)
UINT WINAPI MsiRecordGetStringA(MSIHANDLE handle, UINT iField, char *szValue, DWORD *pcchValue)
MSIHANDLE WINAPI MsiCreateRecord(UINT cParams)
UINT WINAPI MsiRecordSetInteger(MSIHANDLE handle, UINT iField, int iVal)
UINT WINAPI MsiRecordSetStringA(MSIHANDLE handle, UINT iField, const char *szValue)
UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE handle)
UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, const char *szValue)
UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase, const char *szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE handle)
HRESULT WINAPI CoCreateGuid(GUID *pguid)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
DWORD WINAPI GetFileVersionInfoSizeA(LPCSTR filename, LPDWORD handle)
BOOL WINAPI GetFileVersionInfoA(LPCSTR filename, DWORD handle, DWORD datasize, LPVOID data)
static BOOL is_process_elevated(void)
static unsigned char buff[32768]
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
GLuint GLuint GLsizei GLenum type
GLdouble GLdouble GLdouble r
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLenum GLenum GLvoid * values
GLuint GLsizei GLsizei * length
GLuint GLint GLboolean GLint GLenum access
const GLuint GLenum const GLvoid * binary
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
HLOCAL NTAPI LocalFree(HLOCAL hMem)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_ long __cdecl atol(_In_z_ const char *_Str)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
LPSTR WINAPI lstrcatA(LPSTR lpString1, LPCSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
#define sprintf(buf, format,...)
static void create_file_data(LPCSTR name, LPCSTR data, DWORD size)
void restart_as_admin_elevated(void)
#define todo_wine_if(is_todo)
static INT CALLBACK externalui_message_callback(void *context, UINT message, MSIHANDLE hrecord)
#define add_install_ui_sequence_entry(hdb, values)
static void set_suminfo_prop(MSIHANDLE db, DWORD prop, DWORD val)
#define add_signature_entry(hdb, values)
static UINT package_from_db(MSIHANDLE hdb, MSIHANDLE *handle)
static UINT create_complocator_table(MSIHANDLE hdb)
static void check_prop(MSIHANDLE hpkg, const char *prop, const char *expect, int match_case, int todo_value)
static const struct externalui_message openpackage_nonexistent_sequence[]
static UINT create_appsearch_table(MSIHANDLE hdb)
static const struct externalui_message toplevel_install_ui_sequence[]
static void test_removefiles(void)
static UINT create_control_table(MSIHANDLE hdb)
static void test_property_table(void)
static void test_formatrecord_tables(void)
static UINT create_install_ui_sequence_table(MSIHANDLE hdb)
static void test_access(void)
#define add_install_execute_sequence_entry(hdb, values)
static void ok_sequence_(const struct externalui_message *expected, const char *context, BOOL todo, const char *file, int line)
static void test_doaction(void)
static const WCHAR msifileW[]
static void test_controlevent(void)
static BOOL squash_guid(LPCWSTR in, LPWSTR out)
static const struct externalui_message toplevel_msiinstallproduct_custom_sequence[]
static void delete_component_path(LPCSTR guid, MSIINSTALLCONTEXT context, LPSTR usersid)
#define add_control_entry(hdb, values)
static const struct externalui_message toplevel_install_sequence[]
static char * get_user_sid(void)
static UINT create_feature_table(MSIHANDLE hdb)
static const struct externalui_message doaction_custom_cancel_sequence[]
static UINT create_reglocator_table(MSIHANDLE hdb)
static void test_MsiApplyPatch(void)
static struct externalui_message * sequence
static const struct externalui_message doaction_costinitialize_sequence[]
#define add_component_entry(hdb, values)
static const struct externalui_message processmessage_actionstart_sequence[]
#define add_dialog_entry(hdb, values)
static UINT create_launchcondition_table(MSIHANDLE hdb)
static void test_msipackage(void)
static const struct access_res create[16]
static const struct externalui_message toplevel_msiinstallproduct_sequence[]
static void test_installprops(void)
static void test_component_states(UINT line, MSIHANDLE package, const char *component, UINT error, INSTALLSTATE expected_state, INSTALLSTATE expected_action, BOOL todo)
static const char msifile[]
static const struct externalui_message doaction_dialog_12345_sequence[]
static UINT create_upgrade_table(MSIHANDLE hdb)
static INT CALLBACK externalui_callback(void *context, UINT message_type, LPCSTR message)
static UINT create_feature_components_table(MSIHANDLE hdb)
static const struct externalui_message processmessage_error_format_sequence[]
#define add_actiontext_entry(hdb, values)
static int externalui_record_ran
static int externalui_ran
#define add_media_entry(hdb, values)
static void test_appsearch_reglocator(void)
static UINT try_query(MSIHANDLE hdb, LPCSTR szQuery)
#define update_ProductCode_property(hdb, value)
#define add_ccpsearch_entry(hdb, values)
static const struct externalui_message doaction_dialog_3_sequence[]
static UINT create_install_execute_sequence_table(MSIHANDLE hdb)
static UINT create_controlevent_table(MSIHANDLE hdb)
static UINT create_inilocator_table(MSIHANDLE hdb)
static void test_props(void)
static void test_complocator(void)
static UINT create_component_table(MSIHANDLE hdb)
static void test_MsiDatabaseCommit(void)
static void test_appsearch(void)
#define ok_sequence(exp, contx, todo)
static void test_MsiGetProductProperty(void)
#define add_complocator_entry(hdb, values)
#define add_inilocator_entry(hdb, values)
static void test_appsearch_drlocator(void)
static BOOL create_file_with_version(const CHAR *name, LONG ms, LONG ls)
static void test_MsiGetSourcePath(void)
#define add_file_entry(hdb, values)
static void test_feature_states(UINT line, MSIHANDLE package, const char *feature, UINT error, INSTALLSTATE expected_state, INSTALLSTATE expected_action, BOOL todo)
static INT CALLBACK externalui_record_callback(void *context, UINT message_type, MSIHANDLE hrecord)
static UINT create_actiontext_table(MSIHANDLE hdb)
static void set_component_path(LPCSTR filename, MSIINSTALLCONTEXT context, LPCSTR guid, LPSTR usersid, BOOL dir)
static void test_settargetpath(void)
struct _tagVS_VERSIONINFO VS_VERSIONINFO
static const struct externalui_message controlevent_spawn_sequence[]
static void test_gettargetpath_bad(void)
static const struct access_res create_close[16]
static const struct externalui_message processmessage_internal_error_sequence[]
static void flush_sequence(void)
static UINT create_drlocator_table(MSIHANDLE hdb)
static const struct externalui_message processmessage_error_sequence[]
static void test_sourcedir(void)
static void test_MsiApplyMultiplePatches(void)
static const INSTALLLOGMODE MSITEST_INSTALLLOGMODE
static BOOL is_root(const char *path)
static UINT add_reglocator_entry(MSIHANDLE hdb, const char *sig, UINT root, const char *path, const char *name, UINT type)
static void _test_file_access(LPCSTR file, const struct access_res *ares, DWORD line)
static void test_MsiSetProperty(void)
static void test_ccpsearch(void)
static MSIHANDLE create_package_db(void)
static void test_createpackage(void)
static void test_launchconditions(void)
static void query_file_path(MSIHANDLE hpkg, LPCSTR file, LPSTR buff)
static const struct externalui_message toplevel_executeaction_install_sequence[]
static BOOL find_prop_in_property(MSIHANDLE hdb, LPCSTR prop, LPCSTR val, int len)
static UINT create_remove_file_table(MSIHANDLE hdb)
static UINT create_custom_action_table(MSIHANDLE hdb)
static UINT do_query(MSIHANDLE hdb, const char *query, MSIHANDLE *phrec)
static void test_emptypackage(void)
static UINT try_query_param(MSIHANDLE hdb, LPCSTR szQuery, MSIHANDLE hrec)
#define add_property_entry(hdb, values)
#define add_feature_components_entry(hdb, values)
static void test_featureparents(void)
static void test_shortlongsource(void)
#define add_drlocator_entry(hdb, values)
static UINT create_property_table(MSIHANDLE hdb)
static void test_condition(void)
static void test_appsearch_inilocator(void)
static const struct access_res create_commit[16]
#define add_feature_entry(hdb, values)
static const struct externalui_message closehandle_sequence[]
static const struct externalui_message toplevel_executeaction_costinitialize_sequence[]
static const struct externalui_message empty_sequence[]
#define add_launchcondition_entry(hdb, values)
static void test_costs(void)
static void test_appsearch_complocator(void)
#define update_ProductVersion_property(hdb, value)
#define add_controlevent_entry(hdb, values)
static const struct externalui_message processmessage_info_sequence[]
static void set_summary_dword(MSIHANDLE hdb, DWORD pid, DWORD value)
static const struct externalui_message doaction_custom_fullui_sequence[]
static LSTATUS package_RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey, REGSAM access)
static const struct externalui_message doaction_dialog_error_sequence[]
static const struct externalui_message doaction_custom_sequence[]
static const struct externalui_message processmessage_actiondata_sequence[]
#define test_file_access(file, ares)
static const struct externalui_message doaction_dialog_nonexistent_sequence[]
static UINT set_summary_info(MSIHANDLE hdb)
#define add_directory_entry(hdb, values)
static INT CALLBACK externalui_message_string_callback(void *context, UINT message, LPCSTR string)
static UINT create_dialog_table(MSIHANDLE hdb)
static void set_summary_str(MSIHANDLE hdb, DWORD pid, LPCSTR value)
static void search_absolute_directory(LPSTR absolute, LPCSTR relative)
static void test_top_level_action(void)
static void delete_win_ini(LPCSTR file)
static int sequence_count
static void create_test_file(const CHAR *name)
static UINT create_signature_table(MSIHANDLE hdb)
static const struct externalui_message openpackage_sequence[]
static void test_externalui_message(void)
static const struct externalui_message controlevent_spawn2_sequence[]
static UINT create_media_table(MSIHANDLE hdb)
static void create_test_guid(LPSTR prodcode, LPSTR squashed)
static void test_externalui(void)
#define add_upgrade_entry(hdb, values)
#define roundpos(a, b, r)
#define add_appsearch_entry(hdb, values)
static void test_states(void)
static UINT add_entry(const char *file, int line, const char *type, MSIHANDLE hdb, const char *values, const char *insert)
static const struct externalui_message doaction_dialog_sequence[]
static UINT create_file_table(MSIHANDLE hdb)
static void test_formatrecord2(void)
#define add_custom_action_entry(hdb, values)
static UINT create_ccpsearch_table(MSIHANDLE hdb)
INTERNETFEATURELIST feature
#define INSTALLPROPERTY_LOCALPACKAGEA
enum tagMSIINSTALLCONTEXT MSIINSTALLCONTEXT
@ INSTALLLOGMODE_INSTALLSTART
@ INSTALLLOGMODE_FILESINUSE
@ INSTALLLOGMODE_ACTIONDATA
@ INSTALLLOGMODE_ACTIONSTART
@ INSTALLLOGMODE_FATALEXIT
@ INSTALLLOGMODE_RESOLVESOURCE
@ INSTALLLOGMODE_COMMONDATA
@ INSTALLLOGMODE_INITIALIZE
@ INSTALLLOGMODE_TERMINATE
@ INSTALLLOGMODE_RMFILESINUSE
@ INSTALLLOGMODE_OUTOFDISKSPACE
@ INSTALLLOGMODE_SHOWDIALOG
@ INSTALLLOGMODE_INSTALLEND
INT(CALLBACK * INSTALLUI_HANDLERA)(LPVOID, UINT, LPCSTR)
@ INSTALLMESSAGE_ACTIONSTART
@ INSTALLMESSAGE_TERMINATE
@ INSTALLMESSAGE_ACTIONDATA
@ INSTALLMESSAGE_COMMONDATA
@ INSTALLMESSAGE_INITIALIZE
@ INSTALLMESSAGE_INSTALLSTART
@ INSTALLMESSAGE_SHOWDIALOG
@ INSTALLMESSAGE_INSTALLEND
@ MSIINSTALLCONTEXT_MACHINE
@ MSIINSTALLCONTEXT_USERUNMANAGED
@ MSIINSTALLCONTEXT_USERMANAGED
INT(CALLBACK * INSTALLUI_HANDLER_RECORD)(LPVOID, UINT, MSIHANDLE)
enum tagINSTALLUILEVEL INSTALLUILEVEL
enum tagINSTALLLOGMODE INSTALLLOGMODE
@ INSTALLUILEVEL_SOURCERESONLY
@ msidbLocatorTypeRawValue
@ msidbLocatorTypeDirectory
@ msidbLocatorTypeFileName
@ msidbSumInfoSourceTypeSFN
@ msidbSumInfoSourceTypeCompressed
static const BOOL is_64bit
UINT WINAPI MsiViewClose(MSIHANDLE hView)
UINT WINAPI MsiViewExecute(MSIHANDLE hView, MSIHANDLE hRec)
UINT WINAPI MsiDatabaseCommit(MSIHANDLE hdb)
UINT WINAPI MsiDatabaseOpenViewA(MSIHANDLE hdb, const char *szQuery, MSIHANDLE *phView)
UINT WINAPI MsiViewFetch(MSIHANDLE hView, MSIHANDLE *record)
MSICONDITION WINAPI MsiDatabaseIsTablePersistentA(MSIHANDLE hDatabase, const char *szTableName)
MSICONDITION WINAPI MsiEvaluateConditionW(MSIHANDLE, LPCWSTR)
#define MSIDBOPEN_CREATEDIRECT
MSICONDITION WINAPI MsiEvaluateConditionA(MSIHANDLE, LPCSTR)
#define PROCESSOR_ARCHITECTURE_AMD64
#define PROCESSOR_ARCHITECTURE_INTEL
#define FILE_ATTRIBUTE_DIRECTORY
#define MAKEINTRESOURCE(i)
DWORD WINAPI GetVersion()
_CRT_RESTORE_GCC_WARNINGS _CRT_DISABLE_GCC_WARNINGS _Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
WORD wProcessorArchitecture
#define INVALID_FILE_ATTRIBUTES
static const WCHAR props[]
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
DWORD WINAPI GetLogicalDrives(void)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
#define ERROR_UNKNOWN_PRODUCT
#define ERROR_INSTALL_FAILURE
#define ERROR_INSTALL_PACKAGE_INVALID
#define ERROR_INSTALL_USEREXIT
#define ERROR_SHARING_VIOLATION
#define ERROR_INVALID_HANDLE_STATE
#define ERROR_PATH_NOT_FOUND
#define ERROR_INSTALL_PACKAGE_REJECTED
#define ERROR_UNKNOWN_COMPONENT
#define ERROR_PRODUCT_VERSION
#define ERROR_UNKNOWN_FEATURE
#define ERROR_PATCH_PACKAGE_OPEN_FAILED
#define ERROR_BAD_QUERY_SYNTAX
#define ERROR_FUNCTION_FAILED
#define ERROR_FUNCTION_NOT_CALLED
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define HKEY_CLASSES_ROOT
int WINAPI GetSystemMetrics(_In_ int)