37static const char msifile[] =
"winetest-package.msi";
56#define GET_PROC(mod, func) \
57 p ## func = (void*)GetProcAddress(mod, #func);
82 trace(
"Could not check if the current user is an administrator\n");
93 0, 0, 0, 0, 0, 0, &
Group) ||
96 trace(
"Could not check if the current user is a power user\n");
121 if (pRegDeleteKeyExA)
122 return pRegDeleteKeyExA(
key, subkey,
access, 0 );
131 char *usersid =
NULL;
149 DWORD dwMaxSubkeyLen, dwMaxValueLen;
166 dwMaxLen =
max(dwMaxSubkeyLen, dwMaxValueLen);
170 if (!(lpszName =
malloc(dwMaxLen *
sizeof(
WCHAR))))
190 if (pRegDeleteKeyExW)
207 if (lpszName != szNameBuf)
free(lpszName);
253 ok(
hr ==
S_OK,
"Expected S_OK, got %#lx\n",
hr);
256 ok(
size == 39,
"Expected 39, got %#lx\n",
hr);
285 prod =
"3D0DAE300FACA1300AD792060BCDAA92";
287 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
288 "Installer\\UserData\\S-1-5-18\\Components\\%s", squashed);
290 "SOFTWARE\\Classes\\Installer\\"
291 "Products\\3D0DAE300FACA1300AD792060BCDAA92");
295 prod =
"7D2F387510109040002000060BECB6AB";
297 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
298 "Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
300 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
301 "Installer\\%s\\Installer\\Products\\"
302 "7D2F387510109040002000060BECB6AB", usersid);
306 prod =
"7D2F387510109040002000060BECB6AB";
308 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
309 "Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
311 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
312 "Installer\\Managed\\%s\\Installer\\Products\\"
313 "7D2F387510109040002000060BECB6AB", usersid);
349 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
350 "Installer\\UserData\\S-1-5-18\\Components\\%s", squashed);
352 "SOFTWARE\\Classes\\Installer\\"
353 "Products\\3D0DAE300FACA1300AD792060BCDAA92");
358 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
359 "Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
361 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
362 "Installer\\%s\\Installer\\Products\\"
363 "7D2F387510109040002000060BECB6AB", usersid);
368 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
369 "Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
371 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
372 "Installer\\Managed\\%s\\Installer\\Products\\"
373 "7D2F387510109040002000060BECB6AB", usersid);
424 "CREATE TABLE `Component` ( "
425 "`Component` CHAR(72) NOT NULL, "
426 "`ComponentId` CHAR(38), "
427 "`Directory_` CHAR(72) NOT NULL, "
428 "`Attributes` SHORT NOT NULL, "
429 "`Condition` CHAR(255), "
430 "`KeyPath` CHAR(72) "
431 "PRIMARY KEY `Component`)" );
439 "CREATE TABLE `Feature` ( "
440 "`Feature` CHAR(38) NOT NULL, "
441 "`Feature_Parent` CHAR(38), "
443 "`Description` CHAR(255), "
444 "`Display` SHORT NOT NULL, "
445 "`Level` SHORT NOT NULL, "
446 "`Directory_` CHAR(72), "
447 "`Attributes` SHORT NOT NULL "
448 "PRIMARY KEY `Feature`)" );
456 "CREATE TABLE `FeatureComponents` ( "
457 "`Feature_` CHAR(38) NOT NULL, "
458 "`Component_` CHAR(72) NOT NULL "
459 "PRIMARY KEY `Feature_`, `Component_` )" );
467 "CREATE TABLE `File` ("
468 "`File` CHAR(72) NOT NULL, "
469 "`Component_` CHAR(72) NOT NULL, "
470 "`FileName` CHAR(255) NOT NULL, "
471 "`FileSize` LONG NOT NULL, "
472 "`Version` CHAR(72), "
473 "`Language` CHAR(20), "
474 "`Attributes` SHORT, "
475 "`Sequence` SHORT NOT NULL "
476 "PRIMARY KEY `File`)" );
484 "CREATE TABLE `RemoveFile` ("
485 "`FileKey` CHAR(72) NOT NULL, "
486 "`Component_` CHAR(72) NOT NULL, "
487 "`FileName` CHAR(255) LOCALIZABLE, "
488 "`DirProperty` CHAR(72) NOT NULL, "
489 "`InstallMode` SHORT NOT NULL "
490 "PRIMARY KEY `FileKey`)" );
498 "CREATE TABLE `AppSearch` ("
499 "`Property` CHAR(72) NOT NULL, "
500 "`Signature_` CHAR(72) NOT NULL "
501 "PRIMARY KEY `Property`, `Signature_`)" );
509 "CREATE TABLE `RegLocator` ("
510 "`Signature_` CHAR(72) NOT NULL, "
511 "`Root` SHORT NOT NULL, "
512 "`Key` CHAR(255) NOT NULL, "
515 "PRIMARY KEY `Signature_`)" );
523 "CREATE TABLE `Signature` ("
524 "`Signature` CHAR(72) NOT NULL, "
525 "`FileName` CHAR(255) NOT NULL, "
526 "`MinVersion` CHAR(20), "
527 "`MaxVersion` CHAR(20), "
532 "`Languages` CHAR(255) "
533 "PRIMARY KEY `Signature`)" );
541 "CREATE TABLE `LaunchCondition` ("
542 "`Condition` CHAR(255) NOT NULL, "
543 "`Description` CHAR(255) NOT NULL "
544 "PRIMARY KEY `Condition`)" );
552 "CREATE TABLE `Property` ("
553 "`Property` CHAR(72) NOT NULL, "
555 "PRIMARY KEY `Property`)" );
563 "CREATE TABLE `InstallExecuteSequence` ("
564 "`Action` CHAR(72) NOT NULL, "
565 "`Condition` CHAR(255), "
567 "PRIMARY KEY `Action`)" );
568 ok(
r ==
ERROR_SUCCESS,
"Failed to create InstallExecuteSequence table: %u\n",
r);
575 "CREATE TABLE `InstallUISequence` ("
576 "`Action` CHAR(72) NOT NULL, "
577 "`Condition` CHAR(255), "
579 "PRIMARY KEY `Action`)" );
587 "CREATE TABLE `Media` ("
588 "`DiskId` SHORT NOT NULL, "
589 "`LastSequence` SHORT NOT NULL, "
590 "`DiskPrompt` CHAR(64), "
591 "`Cabinet` CHAR(255), "
592 "`VolumeLabel` CHAR(32), "
594 "PRIMARY KEY `DiskId`)" );
602 "CREATE TABLE `CCPSearch` ("
603 "`Signature_` CHAR(72) NOT NULL "
604 "PRIMARY KEY `Signature_`)" );
612 "CREATE TABLE `DrLocator` ("
613 "`Signature_` CHAR(72) NOT NULL, "
614 "`Parent` CHAR(72), "
617 "PRIMARY KEY `Signature_`, `Parent`, `Path`)" );
625 "CREATE TABLE `CompLocator` ("
626 "`Signature_` CHAR(72) NOT NULL, "
627 "`ComponentId` CHAR(38) NOT NULL, "
629 "PRIMARY KEY `Signature_`)" );
637 "CREATE TABLE `IniLocator` ("
638 "`Signature_` CHAR(72) NOT NULL, "
639 "`FileName` CHAR(255) NOT NULL, "
640 "`Section` CHAR(96)NOT NULL, "
641 "`Key` CHAR(128)NOT NULL, "
644 "PRIMARY KEY `Signature_`)" );
652 "CREATE TABLE `CustomAction` ("
653 "`Action` CHAR(72) NOT NULL, "
654 "`Type` SHORT NOT NULL, "
655 "`Source` CHAR(75), "
656 "`Target` CHAR(255) "
657 "PRIMARY KEY `Action`)" );
665 "CREATE TABLE `Dialog` ("
666 "`Dialog` CHAR(72) NOT NULL, "
667 "`HCentering` SHORT NOT NULL, "
668 "`VCentering` SHORT NOT NULL, "
669 "`Width` SHORT NOT NULL, "
670 "`Height` SHORT NOT NULL, "
671 "`Attributes` LONG, "
672 "`Title` CHAR(128) LOCALIZABLE, "
673 "`Control_First` CHAR(50) NOT NULL, "
674 "`Control_Default` CHAR(50), "
675 "`Control_Cancel` CHAR(50) "
676 "PRIMARY KEY `Dialog`)");
684 "CREATE TABLE `Control` ("
685 "`Dialog_` CHAR(72) NOT NULL, "
686 "`Control` CHAR(50) NOT NULL, "
687 "`Type` CHAR(20) NOT NULL, "
688 "`X` SHORT NOT NULL, "
689 "`Y` SHORT NOT NULL, "
690 "`Width` SHORT NOT NULL, "
691 "`Height` SHORT NOT NULL, "
692 "`Attributes` LONG, "
693 "`Property` CHAR(50), "
694 "`Text` CHAR(0) LOCALIZABLE, "
695 "`Control_Next` CHAR(50), "
696 "`Help` CHAR(255) LOCALIZABLE "
697 "PRIMARY KEY `Dialog_`, `Control`)");
705 "CREATE TABLE `ControlEvent` ("
706 "`Dialog_` CHAR(72) NOT NULL, "
707 "`Control_` CHAR(50) NOT NULL, "
708 "`Event` CHAR(50) NOT NULL, "
709 "`Argument` CHAR(255) NOT NULL, "
710 "`Condition` CHAR(255), "
712 "PRIMARY KEY `Dialog_`, `Control_`, `Event`, `Argument`, `Condition`)");
720 "CREATE TABLE `ActionText` ("
721 "`Action` CHAR(72) NOT NULL, "
722 "`Description` CHAR(64) LOCALIZABLE, "
723 "`Template` CHAR(128) LOCALIZABLE "
724 "PRIMARY KEY `Action`)");
732 "CREATE TABLE `Upgrade` ("
733 "`UpgradeCode` CHAR(38) NOT NULL, "
734 "`VersionMin` CHAR(20), "
735 "`VersionMax` CHAR(20), "
736 "`Language` CHAR(255), "
737 "`Attributes` SHORT, "
738 "`Remove` CHAR(255), "
739 "`ActionProperty` CHAR(72) NOT NULL "
740 "PRIMARY KEY `UpgradeCode`, `VersionMin`, `VersionMax`, `Language`)" );
759#define add_component_entry(hdb, values) add_entry(__FILE__, __LINE__, "Component", hdb, values, \
760 "INSERT INTO `Component` " \
761 "(`Component`, `ComponentId`, `Directory_`, " \
762 "`Attributes`, `Condition`, `KeyPath`) VALUES( %s )")
764#define add_directory_entry(hdb, values) add_entry(__FILE__, __LINE__, "Directory", hdb, values, \
765 "INSERT INTO `Directory` " \
766 "(`Directory`,`Directory_Parent`,`DefaultDir`) VALUES( %s )")
768#define add_feature_entry(hdb, values) add_entry(__FILE__, __LINE__, "Feature", hdb, values, \
769 "INSERT INTO `Feature` " \
770 "(`Feature`, `Feature_Parent`, `Title`, `Description`, " \
771 "`Display`, `Level`, `Directory_`, `Attributes`) VALUES( %s )")
773#define add_feature_components_entry(hdb, values) add_entry(__FILE__, __LINE__, "FeatureComponents", hdb, values, \
774 "INSERT INTO `FeatureComponents` " \
775 "(`Feature_`, `Component_`) VALUES( %s )")
777#define add_file_entry(hdb, values) add_entry(__FILE__, __LINE__, "File", hdb, values, \
778 "INSERT INTO `File` " \
779 "(`File`, `Component_`, `FileName`, `FileSize`, " \
780 "`Version`, `Language`, `Attributes`, `Sequence`) VALUES( %s )")
782#define add_appsearch_entry(hdb, values) add_entry(__FILE__, __LINE__, "AppSearch", hdb, values, \
783 "INSERT INTO `AppSearch` " \
784 "(`Property`, `Signature_`) VALUES( %s )")
786#define add_signature_entry(hdb, values) add_entry(__FILE__, __LINE__, "Signature", hdb, values, \
787 "INSERT INTO `Signature` " \
788 "(`Signature`, `FileName`, `MinVersion`, `MaxVersion`," \
789 " `MinSize`, `MaxSize`, `MinDate`, `MaxDate`, `Languages`) " \
792#define add_launchcondition_entry(hdb, values) add_entry(__FILE__, __LINE__, "LaunchCondition", hdb, values, \
793 "INSERT INTO `LaunchCondition` " \
794 "(`Condition`, `Description`) VALUES( %s )")
796#define add_property_entry(hdb, values) add_entry(__FILE__, __LINE__, "Property", hdb, values, \
797 "INSERT INTO `Property` (`Property`, `Value`) VALUES( %s )")
799#define update_ProductVersion_property(hdb, value) add_entry(__FILE__, __LINE__, "Property", hdb, value, \
800 "UPDATE `Property` SET `Value` = '%s' WHERE `Property` = 'ProductVersion'")
802#define update_ProductCode_property(hdb, value) add_entry(__FILE__, __LINE__, "Property", hdb, value, \
803 "UPDATE `Property` SET `Value` = '%s' WHERE `Property` = 'ProductCode'")
805#define add_install_execute_sequence_entry(hdb, values) add_entry(__FILE__, __LINE__, "InstallExecuteSequence", hdb, values, \
806 "INSERT INTO `InstallExecuteSequence` " \
807 "(`Action`, `Condition`, `Sequence`) VALUES( %s )")
809#define add_install_ui_sequence_entry(hdb, values) add_entry(__FILE__, __LINE__, "InstallUISequence", hdb, values, \
810 "INSERT INTO `InstallUISequence` " \
811 "(`Action`, `Condition`, `Sequence`) VALUES( %s )")
813#define add_media_entry(hdb, values) add_entry(__FILE__, __LINE__, "Media", hdb, values, \
814 "INSERT INTO `Media` " \
815 "(`DiskId`, `LastSequence`, `DiskPrompt`, " \
816 "`Cabinet`, `VolumeLabel`, `Source`) VALUES( %s )")
818#define add_ccpsearch_entry(hdb, values) add_entry(__FILE__, __LINE__, "CCPSearch", hdb, values, \
819 "INSERT INTO `CCPSearch` (`Signature_`) VALUES( %s )")
821#define add_drlocator_entry(hdb, values) add_entry(__FILE__, __LINE__, "DrLocator", hdb, values, \
822 "INSERT INTO `DrLocator` " \
823 "(`Signature_`, `Parent`, `Path`, `Depth`) VALUES( %s )")
825#define add_complocator_entry(hdb, values) add_entry(__FILE__, __LINE__, "CompLocator", hdb, values, \
826 "INSERT INTO `CompLocator` " \
827 "(`Signature_`, `ComponentId`, `Type`) VALUES( %s )")
829#define add_inilocator_entry(hdb, values) add_entry(__FILE__, __LINE__, "IniLocator", hdb, values, \
830 "INSERT INTO `IniLocator` " \
831 "(`Signature_`, `FileName`, `Section`, `Key`, `Field`, `Type`) " \
834#define add_custom_action_entry(hdb, values) add_entry(__FILE__, __LINE__, "CustomAction", hdb, values, \
835 "INSERT INTO `CustomAction` " \
836 "(`Action`, `Type`, `Source`, `Target`) VALUES( %s )")
838#define add_dialog_entry(hdb, values) add_entry(__FILE__, __LINE__, "Dialog", hdb, values, \
839 "INSERT INTO `Dialog` " \
840 "(`Dialog`, `HCentering`, `VCentering`, `Width`, `Height`, `Attributes`, `Control_First`) VALUES ( %s )")
842#define add_control_entry(hdb, values) add_entry(__FILE__, __LINE__, "Control", hdb, values, \
843 "INSERT INTO `Control` " \
844 "(`Dialog_`, `Control`, `Type`, `X`, `Y`, `Width`, `Height`, `Attributes`, `Text`) VALUES( %s )");
846#define add_controlevent_entry(hdb, values) add_entry(__FILE__, __LINE__, "ControlEvent", hdb, values, \
847 "INSERT INTO `ControlEvent` " \
848 "(`Dialog_`, `Control_`, `Event`, `Argument`, `Condition`, `Ordering`) VALUES( %s )");
850#define add_actiontext_entry(hdb, values) add_entry(__FILE__, __LINE__, "ActionText", hdb, values, \
851 "INSERT INTO `ActionText` " \
852 "(`Action`, `Description`, `Template`) VALUES( %s )");
854#define add_upgrade_entry(hdb, values) add_entry(__FILE__, __LINE__, "Upgrade", hdb, values, \
855 "INSERT INTO `Upgrade` " \
856 "(`UpgradeCode`, `VersionMin`, `VersionMax`, `Language`, `Attributes`, `Remove`, `ActionProperty`) VALUES( %s )");
862 "INSERT INTO `RegLocator` (`Signature_`, `Root`, `Key`, `Name`, `Type`) "
863 "VALUES( '%s', %u, '%s', '%s', %u )";
886 "Installation Database");
890 "Installation Database");
902 "{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}");
941 "CREATE TABLE `Directory` ( "
942 "`Directory` CHAR(255) NOT NULL, "
943 "`Directory_Parent` CHAR(255), "
944 "`DefaultDir` CHAR(255) NOT NULL "
945 "PRIMARY KEY `Directory`)" );
957 sprintf(szPackage,
"#%lu", hdb);
1009#define roundoffs(a, b, r) (((BYTE *)(b) - (BYTE *)(a) + ((r) - 1)) & ~((r) - 1))
1010#define roundpos(a, b, r) (((BYTE *)(a)) + roundoffs(a, b, r))
1069 return pSRSetRestorePointA(&spec,
status);
1076 res = pSRRemoveRestorePoint(seq_number);
1078 trace(
"Failed to remove the restore point: %#lx\n",
res);
1094 skip(
"Not enough rights to perform tests\n");
1116 skip(
"Not enough rights to perform tests\n");
1138 WCHAR bufferW[0x80];
1146 skip(
"Not enough rights to perform tests\n");
1207 ok(rec,
"MsiCreate record failed\n");
1228 ok ( hdb,
"failed to create package database\n" );
1233 add_component_entry( hdb,
"'RootComp', '{83e2694d-0864-4124-9323-6d37630912a1}', 'TARGETDIR', 8, '', 'RootFile'" );
1234 add_component_entry( hdb,
"'TestComp', '{A3FB59C8-C293-4F7E-B8C5-F0E1D8EEE4E5}', 'TestDir', 0, '', 'TestFile'" );
1247 add_file_entry( hdb,
"'RootFile', 'RootComp', 'rootfile.txt', 0, '', '1033', 8192, 1" );
1248 add_file_entry( hdb,
"'TestFile', 'TestComp', 'testfile.txt', 0, '', '1033', 8192, 1" );
1253 skip(
"Not enough rights to perform tests\n");
1288 sz =
sizeof tempdir - 1;
1301 "MsiSetTargetPath on file returned %d\n",
r );
1305 "MsiSetTargetPath on 'subdir' of file returned %d\n",
r );
1333 lstrcatA( tempdir,
"TestParent\\" );
1344 "Expected \"C:\\one\\two\\TestDir\\\", got \"%s\"\n",
buffer );
1349 "Expected C:\\one\\two\\TestDir\\testfile.txt, got %s\n",
buffer );
1395 skip(
"Not enough rights to perform tests\n");
2122 "wrong return val (%d)\n",
r);
2126 "wrong return val (%d)\n",
r);
2130 "wrong return val (%d)\n",
r);
2134 "wrong return val (%d)\n",
r);
2145 ok(!
r,
"'%s': got %u\n", prop,
r);
2169 skip(
"Not enough rights to perform tests\n");
2183 ok(!
r,
"got %u\n",
r);
2191 ok(!
r,
"got %u\n",
r);
2192 ok(sz == 0,
"got size %lu\n", sz);
2199 ok(sz == 0,
"got size %lu\n", sz);
2204 ok(!
r,
"got %u\n",
r);
2206 ok(sz == 0,
"got size %lu\n", sz);
2216 ok(!
r,
"got %u\n",
r);
2222 ok(!
r,
"got %u\n",
r);
2226 ok(!
r,
"got %u\n",
r);
2230 ok(!
r,
"got %u\n",
r);
2235 ok(!
r,
"got %u\n",
r);
2239 ok(!
r,
"got %u\n",
r);
2244 ok(!
r,
"got %u\n",
r);
2248 ok(!
r,
"got %u\n",
r);
2255 ok(!
r,
"got %u\n",
r);
2256 ok(sz == 3,
"got size %lu\n", sz);
2263 ok(sz == 3,
"got size %lu\n", sz);
2270 ok(sz == 3,
"got size %lu\n", sz);
2277 ok(sz == 3,
"got size %lu\n", sz);
2282 ok(!
r,
"got %u\n",
r);
2284 ok(sz == 3,
"got size %lu\n", sz);
2288 ok(!
r,
"got %u\n",
r);
2289 ok(sz == 3,
"got size %lu\n", sz);
2296 ok(sz == 3,
"got size %lu\n", sz);
2303 ok(sz == 3,
"got size %lu\n", sz);
2310 ok(sz == 3,
"got size %lu\n", sz);
2315 ok(!
r,
"got %u\n",
r);
2317 ok(sz == 3,
"got size %lu\n", sz);
2323 check_prop(hpkg,
"MetadataCompName",
"Photoshop.dll", 1);
2357 ok(sz ==
len,
"wrong size %lu\n", sz);
2379 ok( hdb,
"failed to create package\n");
2384 skip(
"Not enough rights to perform tests\n");
2394 query =
"CREATE TABLE `_Property` ( "
2395 "`foo` INT NOT NULL, `bar` INT LOCALIZABLE PRIMARY KEY `foo`)";
2404 ok( hdb,
"failed to create package\n");
2406 query =
"CREATE TABLE `_Property` ( "
2407 "`foo` INT NOT NULL, `bar` INT LOCALIZABLE PRIMARY KEY `foo`)";
2411 query =
"ALTER `_Property` ADD `foo` INTEGER";
2415 query =
"ALTER TABLE `_Property` ADD `foo` INTEGER";
2419 query =
"ALTER TABLE `_Property` ADD `extra` INTEGER";
2423 sprintf(package,
"#%lu", hdb);
2433 ok (hdb,
"failed to create package database\n");
2454 ok(found,
"prop should be in the _Property table\n");
2458 query =
"SELECT * FROM `_Property` WHERE `Property` = 'dantes'";
2463 ok(found ==
FALSE,
"dantes should not be in the _Property table\n");
2475 ok(found ==
TRUE,
"dantes should be in the _Property table\n");
2485 ok( sz ==
sizeof(
"\0np") - 1,
"got %lu\n", sz );
2488 ok(found ==
TRUE,
"prop2 should be in the _Property table\n");
2577 skip(
"Not enough rights to perform tests\n");
2608 "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n",
r);
2610 query =
"CREATE TABLE `Property` ( "
2611 "`Property` CHAR(72), `Value` CHAR(0) "
2612 "PRIMARY KEY `Property`)";
2616 query =
"CREATE TABLE `InstallExecuteSequence` ("
2617 "`Action` CHAR(72), `Condition` CHAR(0), `Sequence` INTEGER "
2618 "PRIMARY KEY `Action`)";
2626 "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n",
r);
2645 "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n",
r);
2650 "Expected ERROR_SUCCESS, got %d\n",
r);
2667 skip(
"Not enough rights to perform tests\n");
2677 ok(hrec,
"create record failed\n");
2693 ok( sz == 3,
"size wrong\n");
2701 ok( sz == 3,
"size wrong\n");
2711 ok( sz == 3,
"size wrong\n");
2719 ok( sz == 1,
"size wrong\n");
2728 ok( sz == 3,
"size wrong\n");
2738 ok( sz == 3,
"size wrong\n");
2760 ok ( hdb,
"failed to create package database\n");
2764 "'I am a really long directory'" );
2780 add_file_entry( hdb,
"'frontal_file', 'frontal', 'frontal.txt', 0, '', '1033', 8192, 1" );
2781 add_file_entry( hdb,
"'parietal_file', 'parietal', 'parietal.txt', 0, '', '1033', 8192, 1" );
2782 add_file_entry( hdb,
"'temporal_file', 'temporal', 'temporal.txt', 0, '', '1033', 8192, 1" );
2794 skip(
"Not enough rights to perform tests\n");
2821 ok( !
lstrcmpA(
buf,
"1: ringer " ),
"Expected '1: ringer ', got %s\n",
buf );
2827 ok( !
lstrcmpA(
buf,
"1: ringer " ),
"Expected '1: ringer ', got %s\n",
buf );
2842 ok( !
lstrcmpA(
buf,
"1: crazyval " ),
"Expected '1: crazyval ', got %s\n",
buf );
2933 ok( !
lstrcmpA(
buf,
"[Bracket Text]" ),
"Expected '[Bracket Text]', got %s\n",
buf);
2961 ok( !
memcmp(
buf,
"\0np",
sizeof(
"\0np") ),
"wrong value\n");
2962 ok(
size ==
sizeof(
"\0np") - 1,
"got %lu\n",
size );
2996 sprintf(
buf,
"%sI am a really long directory\\temporal.txt",
root );
3018 ok(
state == expected_state,
"%u: expected state %d got %d\n",
3021 ok(
action == expected_action,
"%u: expected action %d got %d\n",
3026 ok(
state == 0xdeadbee,
"%u: expected state 0xdeadbee got %d\n",
line,
state );
3044 ok(
state == expected_state,
"%u: expected state %d got %d\n",
3047 ok(
action == expected_action,
"%u: expected action %d got %d\n",
3052 ok(
state == 0xdeadbee,
"%u: expected state 0xdeadbee got %d\n",
3055 ok(
action == 0xdeadbee,
"%u: expected action 0xdeadbee got %d\n",
3062 static const char msifile2[] =
"winetest2-package.msi";
3063 static const char msifile3[] =
"winetest3-package.msi";
3064 static const char msifile4[] =
"winetest4-package.msi";
3066 static const WCHAR msifile3W[] =
L"winetest3-package.msi";
3067 static const WCHAR msifile4W[] =
L"winetest4-package.msi";
3069 DWORD cache_file_name_len;
3080 skip(
"process is limited\n");
3085 ok ( hdb,
"failed to create package database\n" );
3090 add_property_entry( hdb,
"'ProductCode', '{7262AC98-EEBD-4364-8CE3-D654F6A425B9}'" );
3095 add_property_entry( hdb,
"'UpgradeCode', '{3494EEEA-4221-4A66-802E-DED8916BC5C5}'" );
3121 add_component_entry( hdb,
"'alpha', '{467EC132-739D-4784-A37B-677AA43DBC94}', 'TARGETDIR', 0, '', 'alpha_file'" );
3124 add_component_entry( hdb,
"'beta', '{2C1F189C-24A6-4C34-B26B-994A6C026506}', 'TARGETDIR', 1, '', 'beta_file'" );
3127 add_component_entry( hdb,
"'gamma', '{C271E2A4-DE2E-4F70-86D1-6984AF7DE2CA}', 'TARGETDIR', 2, '', 'gamma_file'" );
3130 add_component_entry( hdb,
"'theta', '{4EB3129D-81A8-48D5-9801-75600FED3DD9}', 'TARGETDIR', 8, '', 'theta_file'" );
3136 add_component_entry( hdb,
"'delta', '{938FD4F2-C648-4259-A03C-7AA3B45643F3}', 'TARGETDIR', 0, '', 'delta_file'" );
3139 add_component_entry( hdb,
"'epsilon', '{D59713B6-C11D-47F2-A395-1E5321781190}', 'TARGETDIR', 1, '', 'epsilon_file'" );
3142 add_component_entry( hdb,
"'zeta', '{377D33AB-2FAA-42B9-A629-0C0DAE9B9C7A}', 'TARGETDIR', 2, '', 'zeta_file'" );
3145 add_component_entry( hdb,
"'iota', '{5D36F871-B5ED-4801-9E0F-C46B9E5C9669}', 'TARGETDIR', 8, '', 'iota_file'" );
3157 add_component_entry( hdb,
"'eta', '{DD89003F-0DD4-41B8-81C0-3411A7DA2695}', 'TARGETDIR', 1, '', 'eta_file'" );
3160 add_component_entry( hdb,
"'kappa', '{D6B93DC3-8DA5-4769-9888-42BFE156BB8B}', 'TARGETDIR', 1, '', 'kappa_file'" );
3166 add_component_entry( hdb,
"'lambda', '{6528C5E4-02A4-4636-A214-7A66A6C35B64}', 'TARGETDIR', 0, '', 'lambda_file'" );
3169 add_component_entry( hdb,
"'mu', '{97014BAB-6C56-4013-9A63-2BF913B42519}', 'TARGETDIR', 1, '', 'mu_file'" );
3172 add_component_entry( hdb,
"'nu', '{943DD0D8-5808-4954-8526-3B8493FEDDCD}', 'TARGETDIR', 2, '', 'nu_file'" );
3175 add_component_entry( hdb,
"'xi', '{D6CF9EF7-6FCF-4930-B34B-F938AEFF9BDB}', 'TARGETDIR', 8, '', 'xi_file'" );
3181 add_component_entry( hdb,
"'omicron', '{7B57521D-15DB-4141-9AA6-01D934A4433F}', 'TARGETDIR', 0, '', 'omicron_file'" );
3184 add_component_entry( hdb,
"'pi', '{FB85346B-378E-4492-8769-792305471C81}', 'TARGETDIR', 1, '', 'pi_file'" );
3187 add_component_entry( hdb,
"'rho', '{798F2047-7B0C-4783-8BB0-D703E554114B}', 'TARGETDIR', 2, '', 'rho_file'" );
3190 add_component_entry( hdb,
"'sigma', '{5CE9DDA8-B67B-4736-9D93-99D61C5B93E7}', 'TARGETDIR', 8, '', 'sigma_file'" );
3195 add_component_entry( hdb,
"'tau', '{07DEB510-677C-4A6F-A0A6-7CD8EFEA77ED}', 'TARGETDIR', 1, '', 'tau_file'" );
3200 add_component_entry( hdb,
"'phi', '{9F0594C5-35AD-43EA-94DD-8DF73FAA664D}', 'TARGETDIR', 1, '', 'phi_file'" );
3205 add_component_entry( hdb,
"'chi', '{E6B539AB-5DA9-4236-A2D2-E341A50B4C38}', 'TARGETDIR', 1, '', 'chi_file'" );
3210 add_component_entry( hdb,
"'psi', '{A06B23B5-746B-427A-8A6E-FD6AC8F46A95}', 'TARGETDIR', 1, '', 'psi_file'" );
3215 add_component_entry( hdb,
"'upsilon', '{557e0c04-ceba-4c58-86a9-4a73352e8cf6}', 'TARGETDIR', 1, '', 'upsilon_file'" );
3248 add_file_entry( hdb,
"'alpha_file', 'alpha', 'alpha.txt', 100, '', '1033', 8192, 1" );
3249 add_file_entry( hdb,
"'beta_file', 'beta', 'beta.txt', 0, '', '1033', 8192, 1" );
3250 add_file_entry( hdb,
"'gamma_file', 'gamma', 'gamma.txt', 0, '', '1033', 8192, 1" );
3251 add_file_entry( hdb,
"'theta_file', 'theta', 'theta.txt', 0, '', '1033', 8192, 1" );
3252 add_file_entry( hdb,
"'delta_file', 'delta', 'delta.txt', 0, '', '1033', 8192, 1" );
3253 add_file_entry( hdb,
"'epsilon_file', 'epsilon', 'epsilon.txt', 0, '', '1033', 8192, 1" );
3254 add_file_entry( hdb,
"'zeta_file', 'zeta', 'zeta.txt', 0, '', '1033', 8192, 1" );
3255 add_file_entry( hdb,
"'iota_file', 'iota', 'iota.txt', 0, '', '1033', 8192, 1" );
3258 add_file_entry( hdb,
"'eta_file', 'eta', 'eta.txt', 0, '', '1033', 16384, 1" );
3260 add_file_entry( hdb,
"'kappa_file', 'kappa', 'kappa.txt', 0, '', '1033', 8192, 1" );
3261 add_file_entry( hdb,
"'lambda_file', 'lambda', 'lambda.txt', 100, '', '1033', 8192, 1" );
3262 add_file_entry( hdb,
"'mu_file', 'mu', 'mu.txt', 100, '', '1033', 8192, 1" );
3263 add_file_entry( hdb,
"'nu_file', 'nu', 'nu.txt', 100, '', '1033', 8192, 1" );
3264 add_file_entry( hdb,
"'xi_file', 'xi', 'xi.txt', 100, '', '1033', 8192, 1" );
3265 add_file_entry( hdb,
"'omicron_file', 'omicron', 'omicron.txt', 100, '', '1033', 8192, 1" );
3266 add_file_entry( hdb,
"'pi_file', 'pi', 'pi.txt', 100, '', '1033', 8192, 1" );
3267 add_file_entry( hdb,
"'rho_file', 'rho', 'rho.txt', 100, '', '1033', 8192, 1" );
3268 add_file_entry( hdb,
"'sigma_file', 'sigma', 'sigma.txt', 100, '', '1033', 8192, 1" );
3269 add_file_entry( hdb,
"'tau_file', 'tau', 'tau.txt', 100, '', '1033', 8192, 1" );
3270 add_file_entry( hdb,
"'phi_file', 'phi', 'phi.txt', 100, '', '1033', 8192, 1" );
3271 add_file_entry( hdb,
"'chi_file', 'chi', 'chi.txt', 100, '', '1033', 8192, 1" );
3272 add_file_entry( hdb,
"'psi_file', 'psi', 'psi.txt', 100, '', '1033', 8192, 1" );
3273 add_file_entry( hdb,
"'upsilon_file', 'upsilon', 'upsilon.txt', 0, '', '1033', 16384, 1" );
3288 skip(
"Not enough rights to perform tests\n");
3472 add_property_entry( hdb,
"'ADDLOCAL', 'one,two,three,four,five,six,seven,eight,nine,ten,twelve'");
3546 add_property_entry( hdb,
"'ADDSOURCE', 'one,two,three,four,five,six,seven,eight,nine,ten'");
3623 add_property_entry( hdb,
"'ADDSOURCE', 'one,two,three,four,five,six,seven,eight,nine,ten'");
3702 cache_file_name_len =
sizeof(msi_cache_file);
3719 "'VBFeatureRequest', 38, NULL, 'Session.FeatureRequestState(\"three\") = 3'" );
3785 "Expected ERROR_SUCCESS, got %d\n",
r);
3830 add_upgrade_entry( hdb,
"'{3494EEEA-4221-4A66-802E-DED8916BC5C5}', NULL, '1.1.3', NULL, 0, NULL, 'OLDERVERSIONBEINGUPGRADED'");
3869 ok ( hdb,
"failed to create package database\n" );
3895 add_file_entry( hdb,
"'hydrogen_file', 'hydrogen', 'hydrogen.txt', 0, '', '1033', 8192, 1" );
3896 add_file_entry( hdb,
"'helium_file', 'helium', 'helium.txt', 0, '', '1033', 8192, 1" );
3897 add_file_entry( hdb,
"'lithium_file', 'lithium', 'lithium.txt', 0, '', '1033', 8192, 1" );
3898 add_file_entry( hdb,
"'beryllium_file', 'beryllium', 'beryllium.txt', 0, '', '1033', 16384, 1" );
3899 add_file_entry( hdb,
"'boron_file', 'boron', 'boron.txt', 0, '', '1033', 16384, 1" );
3900 add_file_entry( hdb,
"'carbon_file', 'carbon', 'carbon.txt', 0, '', '1033', 16384, 1" );
3901 add_file_entry( hdb,
"'oxygen_file', 'oxygen', 'oxygen.txt', 0, '', '1033', 16384, 1" );
3908 skip(
"Not enough rights to perform tests\n");
3938 installed =
action = 0xdeadbeef;
3953 installed =
action = 0xdeadbeef;
3974 installed =
action = 0xdeadbeef;
3983 installed =
action = 0xdeadbeef;
3992 installed =
action = 0xdeadbeef;
3998 ok(
DeleteFileA(
"hydrogen.txt"),
"Expected hydrogen.txt to exist\n");
3999 ok(
DeleteFileA(
"lithium.txt"),
"Expected lithium.txt to exist\n");
4000 ok(
DeleteFileA(
"beryllium.txt"),
"Expected beryllium.txt to exist\n");
4001 ok(
DeleteFileA(
"carbon.txt"),
"Expected carbon.txt to exist\n");
4002 ok(
DeleteFileA(
"helium.txt"),
"Expected helium.txt to exist\n");
4003 ok(
DeleteFileA(
"boron.txt"),
"Expected boron.txt to exist\n");
4004 ok(
DeleteFileA(
"oxygen.txt"),
"Expected oxygen.txt to exist\n");
4018 const char reg_expand_value[] =
"%systemroot%\\system32\\notepad.exe";
4021 ok ( hdb,
"failed to create package database\n" );
4044 skip(
"insufficient rights\n");
4053 sizeof(
"c:\\windows\\system32\\notepad.exe"));
4062 sizeof(
"c:\\windows\\system32\\notepad.exe"));
4073 add_signature_entry( hdb,
"'NewSignature2', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" );
4074 add_signature_entry( hdb,
"'NewSignature3', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" );
4075 add_signature_entry( hdb,
"'NewSignature4', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" );
4076 add_signature_entry( hdb,
"'NewSignature5', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" );
4081 skip(
"Not enough rights to perform tests\n");
4095 size =
sizeof(prop);
4098 ok(
lstrlenA(prop) != 0,
"Expected non-zero length\n");
4100 size =
sizeof(prop);
4104 size =
sizeof(prop);
4107 ok(
lstrlenA(prop) != 0,
"Expected non-zero length\n");
4109 size =
sizeof(prop);
4112 ok(
lstrlenA(prop) != 0,
"Expected non-zero length\n");
4114 size =
sizeof(prop);
4117 ok(
lstrlenA(prop) != 0,
"Expected non-zero length\n");
4140 skip(
"process is limited\n");
4147 "{A8AE6692-96BA-4198-8399-145D7D1D0D0E}",
NULL,
FALSE);
4151 "{1D2CE6F3-E81C-4949-AB81-78D7DAD2AF2E}", usersid,
FALSE);
4155 "{19E0B999-85F5-4973-A61B-DBE4D66ECB1D}", usersid,
FALSE);
4159 "{F0CCA976-27A3-4808-9DDD-1A6FD50A0D5A}",
NULL,
TRUE);
4163 "{C0ECD96F-7898-4410-9667-194BD8C1B648}",
NULL,
TRUE);
4167 "{DB20F535-9C26-4127-9C2B-CC45A8B51DA1}",
NULL,
FALSE);
4171 "{91B7359B-07F2-4221-AA8D-DE102BB87A5F}",
NULL,
FALSE);
4175 "{4A2E1B5B-4034-4177-833B-8CC35F1B3EF1}",
NULL,
FALSE);
4179 "{A204DF48-7346-4635-BA2E-66247DBAC9DF}",
NULL,
FALSE);
4183 "{EC30CE73-4CF9-4908-BABD-1ED82E1515FD}",
NULL,
FALSE);
4186 ok(hdb,
"Expected a valid database handle\n");
4246 add_signature_entry(hdb,
"'NewSignature10', 'FileName8.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4247 add_signature_entry(hdb,
"'NewSignature11', 'FileName9.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4248 add_signature_entry(hdb,
"'NewSignature12', 'ignored', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4253 skip(
"Not enough rights to perform tests\n");
4291 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4314 ok(!
lstrcmpA(prop,
"october"),
"Expected \"october\", got \"%s\"\n", prop);
4319 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4330 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4382 HKEY hklm, classes, hkcu, users;
4397 skip(
"Not enough rights to perform tests\n");
4403 (
const BYTE *)
"regszdata", 10);
4410 (
const BYTE *)
"regszdata", 10);
4417 "Expected ERROR_SUCCESS, got %ld\n",
res);
4422 (
const BYTE *)
"regszdata", 10);
4433 (
const BYTE *)
"regszdata", 10);
4447 (
const BYTE *)
"%PATH%", 7);
4451 (
const BYTE *)
"my%NOVAR%", 10);
4455 (
const BYTE *)
"one\0two\0", 9);
4465 (
const BYTE *)
"#regszdata", 11);
4488 (
const BYTE *)
"", 1);
4521 ok(hdb,
"Expected a valid database handle\n");
4679 add_signature_entry(hdb,
"'NewSignature21', 'FileName3.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4680 add_signature_entry(hdb,
"'NewSignature22', 'FileName4.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4681 add_signature_entry(hdb,
"'NewSignature23', 'ignored', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
4686 sprintf(
path,
"'NewSignature26', '%s', '', '', '', '', '', '', ''",
ptr);
4705 "Expected \"regszdata\", got \"%s\"\n", prop);
4710 ok(!
lstrcmpA(prop,
"#42"),
"Expected \"#42\", got \"%s\"\n", prop);
4715 ok(!
lstrcmpA(prop,
"#-42"),
"Expected \"#-42\", got \"%s\"\n", prop);
4717 memset(&si, 0,
sizeof(si));
4734 "Expected \"%s\", got \"%s\"\n", pathvar, pathdata);
4744 "my%NOVAR%"),
"Expected \"my%%NOVAR%%\", got \"%s\"\n", prop);
4751 ok(!
memcmp(prop,
"\0one\0two\0\0", 10),
4752 "Expected \"\\0one\\0two\\0\\0\"\n");
4765 "Expected \"##regszdata\", got \"%s\"\n", prop);
4776 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4787 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4798 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4804 "Expected \"regszdata\", got \"%s\"\n", prop);
4810 "Expected \"regszdata\", got \"%s\"\n", prop);
4818 "Expected \"regszdata\", got \"%s\"\n", prop);
4825 "Expected \"defvalue\", got \"%s\"\n", prop);
4830 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4835 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4848 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4879 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4884 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4889 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
4902 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5000 ok(hdb,
"Expected a valid database handle\n");
5057 add_signature_entry(hdb,
"'NewSignature10', 'FileName2.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5058 add_signature_entry(hdb,
"'NewSignature11', 'FileName3.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5059 add_signature_entry(hdb,
"'NewSignature12', 'ignored', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5064 skip(
"Not enough rights to perform tests\n");
5077 ok(!
lstrcmpA(prop,
"keydata"),
"Expected \"keydata\", got \"%s\"\n", prop);
5082 ok(!
lstrcmpA(prop,
"field2"),
"Expected \"field2\", got \"%s\"\n", prop);
5088 "Expected \"keydata,field2\", got \"%s\"\n", prop);
5099 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5126 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5139 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5173 for (
i = 0;
i < 26; absolute[0] =
'\0',
i++)
5175 if (!(drives & (1 <<
i)))
5178 absolute[0] =
'A' +
i;
5187 if (absolute[3 +
size - 1] !=
'\\')
5220 ok(hdb,
"Expected a valid database handle\n");
5266 sprintf(
path,
"'NewSignature7', 'NewSignature1', 'one\\two\\three', 1");
5291 sprintf(
path,
"'NewSignature13', 'NewSignature12', '', 0");
5300 add_signature_entry(hdb,
"'NewSignature8', 'FileName3.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5301 add_signature_entry(hdb,
"'NewSignature9', 'FileName4.dll', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5302 add_signature_entry(hdb,
"'NewSignature10', 'necessary', '1.1.1.1', '2.1.1.1', '', '', '', '', ''");
5307 skip(
"Not enough rights to perform tests\n");
5338 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5349 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5368 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5373 ok(!
lstrcmpA(prop,
""),
"Expected \"\", got \"%s\"\n", prop);
5386 ok(!prop[0],
"Expected \"\", got \"%s\"\n", prop);
5410 ok ( hdb,
"failed to create package database\n" );
5488 add_file_entry( hdb,
"'leo_file', 'leo', 'leo.txt', 100, '', '1033', 8192, 1" );
5489 add_file_entry( hdb,
"'virgo_file', 'virgo', 'virgo.txt', 0, '', '1033', 8192, 1" );
5490 add_file_entry( hdb,
"'libra_file', 'libra', 'libra.txt', 0, '', '1033', 8192, 1" );
5491 add_file_entry( hdb,
"'cassiopeia_file', 'cassiopeia', 'cassiopeia.txt', 0, '', '1033', 8192, 1" );
5492 add_file_entry( hdb,
"'cepheus_file', 'cepheus', 'cepheus.txt', 0, '', '1033', 8192, 1" );
5493 add_file_entry( hdb,
"'andromeda_file', 'andromeda', 'andromeda.txt', 0, '', '1033', 8192, 1" );
5494 add_file_entry( hdb,
"'canis_file', 'canis', 'canis.txt', 0, '', '1033', 8192, 1" );
5495 add_file_entry( hdb,
"'monoceros_file', 'monoceros', 'monoceros.txt', 0, '', '1033', 8192, 1" );
5496 add_file_entry( hdb,
"'lepus_file', 'lepus', 'lepus.txt', 0, '', '1033', 8192, 1" );
5497 add_file_entry( hdb,
"'delphinus_file', 'delphinus', 'delphinus.txt', 0, '', '1033', 8192, 1" );
5498 add_file_entry( hdb,
"'hydrus_file', 'hydrus', 'hydrus.txt', 0, '', '1033', 8192, 1" );
5503 skip(
"Not enough rights to perform tests\n");
5579 HKEY hkey1, hkey2, pathkey;
5596 ok( hdb,
"failed to create database\n");
5601 skip(
"Not enough rights to perform tests\n");
5674 trace(
"VersionDatabase = %s\n",
buf);
5799 check_prop(hpkg,
"ProgramFiles64Dir",
"", 0);
5820 ok( hdb,
"failed to create package database\n" );
5832 skip(
"Not enough rights to perform tests\n");
5868 ok(hdb,
"failed to create package database\n");
5885 skip(
"Not enough rights to perform tests\n");
5900 ok(!
lstrcmpA(prop,
"1"),
"Expected 1, got %s\n", prop);
5915 ok(hdb,
"failed to create package database\n");
5966 skip(
"Not enough rights to perform tests\n");
5992 "{E3619EED-305A-418C-B9C7-F7D7377F0934}",
NULL,
FALSE);
5994 "{D56B688D-542F-42Ef-90FD-B6DA76EE8119}",
NULL,
FALSE);
5996 "{A19E16C5-C75D-4699-8111-C4338C40C3CB}",
NULL,
FALSE);
5998 "{17762FA1-A7AE-4CC6-8827-62873C35361D}",
NULL,
FALSE);
6000 "{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}",
NULL,
FALSE);
6002 "{243C22B1-8C51-4151-B9D1-1AE5265E079E}",
NULL,
FALSE);
6004 "{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}",
NULL,
FALSE);
6006 "{0B499649-197A-48EF-93D2-AF1C17ED6E90}",
NULL,
FALSE);
6021 "Expected %s or empty string, got %s\n",
expected, prop);
6026 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6031 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6036 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6045 "Expected %s or empty string, got %s\n",
expected, prop);
6050 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6055 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6060 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6065 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6070 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6075 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6080 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6089 "Expected %s or empty string, got %s\n",
expected, prop);
6099 "Expected %s or empty string, got %s\n",
expected, prop);
6104 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6109 ok(!
lstrcmpA(prop,
""),
"Expected , got %s\n", prop);
6188 ok( hdb,
"failed to create database\n");
6202 skip(
"Not enough rights to perform tests\n");
6215 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
6217 "Expected path to be unchanged, got \"%s\"\n",
path);
6225 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
6227 "Expected path to be unchanged, got \"%s\"\n",
path);
6236 "Expected path to be unchanged, got \"%s\"\n",
path);
6245 "Expected path to be unchanged, got \"%s\"\n",
path);
6253 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6260 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6268 "Expected path to be unchanged, got \"%s\"\n",
path);
6277 "Expected path to be unchanged, got \"%s\"\n",
path);
6286 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6293 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6301 "Expected path to be unchanged, got \"%s\"\n",
path);
6310 "Expected path to be unchanged, got \"%s\"\n",
path);
6340 "Expected path to be unchanged, got \"%s\"\n",
path);
6399 "Expected path to be unchanged, got \"%s\"\n",
path);
6458 "Expected path to be unchanged, got \"%s\"\n",
path);
6517 "Expected path to be unchanged, got \"%s\"\n",
path);
6557 "Expected path to be unchanged, got \"%s\"\n",
path);
6570 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
6572 "Expected path to be unchanged, got \"%s\"\n",
path);
6580 "Expected path to be unchanged, got \"%s\"\n",
path);
6589 "Expected path with no backslash, got \"%s\"\n",
path);
6622 "Expected path to be unchanged, got \"%s\"\n",
path);
6643 "Expected path to be unchanged, got \"%s\"\n",
path);
6652 "Expected path to be unchanged, got \"%s\"\n",
path);
6661 "Expected path to be unchanged, got \"%s\"\n",
path);
6670 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6677 ok(
size == 0,
"Expected 0, got %lu\n",
size);
6685 "Expected path to be unchanged, got \"%s\"\n",
path);
6694 "Expected path to be unchanged, got \"%s\"\n",
path);
6964 ok( hdb,
"failed to create database\n");
6995 skip(
"Not enough rights to perform tests\n");
7297 ok( hdb,
"failed to create database\n");
7301 sprintf(package,
"#%lu", hdb);
7305 skip(
"Not enough rights to perform tests\n");
7318 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7326 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7339 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7347 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7358 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7366 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7377 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7385 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7429 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7434 sprintf(package,
"#%lu", hdb);
7448 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7456 "Expected path to be unchanged, got \"%s\"\n",
path);
7467 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7478 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7486 "Expected path to be unchanged, got \"%s\"\n",
path);
7497 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7511 ok(
size == 0,
"Expected 0, got %lu\n",
size);
7543 "Expected path to be unchanged, got \"%s\"\n",
path);
7571 "Expected path to be unchanged, got \"%s\"\n",
path);
7599 "Expected path to be unchanged, got \"%s\"\n",
path);
7627 "Expected path to be unchanged, got \"%s\"\n",
path);
7711 for (
i = 0;
i < 4;
i++)
7718 for (
j = 0;
j < 4;
j++)
7723 if (
j == 0) share = 0;
7734 "(%lu, handle, %d): Expected %d, got %d\n",
7747#define test_file_access(file, ares) _test_file_access(file, ares, __LINE__)
7785 MSIHANDLE hpkg = 0, hdb = 0, hsuminfo = 0;
7795 skip(
"Not enough rights to perform tests\n");
7806 ok(hdb != 0,
"Expected a valid database handle\n");
7833 "Expected \"_Property\", got \"%s\"\n",
buffer);
7850 "Expected \"_Property\", got \"%s\"\n",
buffer);
7861 "Expected MSICONDITION_FALSE, got %d\n",
condition);
7890 "Expected MSICONDITION_FALSE, got %d\n",
condition);
7919 "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n",
r);
7926 "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n",
r);
7933 "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n",
r);
7986 "CREATE TABLE `Directory` ( "
7987 "`Directory` CHAR(255) NOT NULL, "
7988 "`Directory_Parent` CHAR(255), "
7989 "`DefaultDir` CHAR(255) NOT NULL "
7990 "PRIMARY KEY `Directory`)");
8003 lstrcpyA(keypath,
"Software\\Classes\\Installer\\Products\\");
8009 skip(
"Not enough rights to perform tests\n");
8015 lstrcpyA(keypath,
"Software\\Microsoft\\Windows\\CurrentVersion\\");
8016 lstrcatA(keypath,
"Installer\\UserData\\S-1-5-18\\Products\\");
8022 skip(
"Not enough rights to perform tests\n");
8042 ok(hprod != 0 && hprod != 0xdeadbeef,
"Expected a valid product handle\n");
8049 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
8051 "Expected val to be unchanged, got \"%s\"\n",
val);
8058 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
8060 "Expected val to be unchanged, got %s\n",
wine_dbgstr_w(valW));
8068 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8070 "Expected val to be unchanged, got \"%s\"\n",
val);
8077 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8079 "Expected val to be unchanged, got %s\n",
wine_dbgstr_w(valW));
8088 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8095 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8103 "Expected \"%s\", got \"%s\"\n", prodcode,
val);
8133 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8135 "Expected val to be unchanged, got \"%s\"\n",
val);
8142 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8144 "Expected val to be unchanged, got %s\n",
wine_dbgstr_w(valW));
8154 "Expected first 3 chars of \"%s\", got \"%s\"\n", prodcode,
val);
8173 "Expected first 37 chars of \"%s\", got \"%s\"\n", prodcode,
val);
8192 "Expected \"%s\", got \"%s\"\n", prodcode,
val);
8211 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8218 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8229 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8236 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8247 "Expected \"%s\", got \"%s\"\n", prodcode,
val);
8283 skip(
"Not enough rights to perform tests\n");
8292 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
8297 "Expected ERROR_INVALID_HANDLE, got %d\n",
r);
8302 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8307 "Expected ERROR_INVALID_PARAMETER, got %d\n",
r);
8312 "Expected ERROR_FUNCTION_FAILED, got %d\n",
r);
8327 ok(
size == 3,
"Expected 3, got %lu\n",
size);
8338 ok(
size == 4,
"Expected 4, got %lu\n",
size);
8341 ok(hdb != 0,
"Expected a valid database handle\n");
8344 query =
"SELECT * FROM `_Property` WHERE `Property` = 'Prop'";
8347 "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n",
r);
8350 query =
"SELECT * FROM `Property` WHERE `Property` = 'Prop'";
8353 "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n",
r);
8366 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8381 ok(
size == 0,
"Expected 0, got %lu\n",
size);
8445 char package[12],
drive[3];
8451 ok( hdb,
"failed to create database\n" );
8454 add_property_entry( hdb,
"'ProductCode', '{379B1C47-40C1-42FA-A9BB-BEBB6F1B0172}'" );
8462 add_file_entry( hdb,
"'one.txt', 'one', 'one.txt', 4096, '', '', 8192, 1" );
8465 add_component_entry( hdb,
"'one', '{B2F86B9D-8447-4BC5-8883-750C45AA31CA}', 'TARGETDIR', 0, '', 'one.txt'" );
8466 add_component_entry( hdb,
"'two', '{62A09F6E-0B74-4829-BDB7-CAB66F42CCE8}', 'TARGETDIR', 0, '', ''" );
8485 sprintf( package,
"#%lu", hdb );
8489 skip(
"Not enough rights to perform tests\n");
8561 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8566 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8571 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8588 cost =
temp = 0xdead;
8591 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8592 ok(
drive[0],
"expected a drive\n" );
8593 ok( cost && cost != 0xdead,
"expected cost > 0, got %d\n", cost );
8594 ok( !
temp,
"expected temp == 0, got %d\n",
temp );
8598 cost =
temp = 0xdead;
8601 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8602 ok(
drive[0],
"expected a drive\n" );
8603 ok( !cost,
"expected cost == 0, got %d\n", cost );
8604 ok( !
temp,
"expected temp == 0, got %d\n",
temp );
8608 cost =
temp = 0xdead;
8611 ok(
len == 2,
"expected len == 2, got %lu\n",
len );
8612 ok(
drive[0],
"expected a drive\n" );
8613 ok( !cost,
"expected cost == 0, got %d\n", cost );
8614 ok(
temp &&
temp != 0xdead,
"expected temp > 0, got %d\n",
temp );
8629 ok( cost == 0xdead,
"got %d\n", cost );
8636 ok( !
r,
"got %u\n",
r);
8637 ok( cost == 8,
"got %d\n", cost );
8649 char buf[32], package[12];
8653 ok( hdb,
"failed to create database\n" );
8657 sprintf( package,
"#%lu", hdb );
8661 skip(
"Not enough rights to perform tests\n");
8708 ok(
r == 1,
"expected 1, got %u\n",
r);
8710 ok(
r == 12345,
"expected 12345, got %u\n",
r);
8729 skip(
"Not enough rights to perform tests\n");
8736 ok(hrecord,
"Expected a valid record\n");
8744 ok(
r == 0,
"expected 0, got %u\n",
r);
8754 ok(
r == 0,
"expected 0, got %u\n",
r);
8762 ok(
r == 0,
"expected 0, got %u\n",
r);
8769 ok(
r == 1,
"expected 1, got %u\n",
r);
8779 ok(
r == 0,
"expected 0, got %u\n",
r);
8841 ok_(
file,
line) (
FALSE,
"%s: in msg 0x%08x expecting field count %d got %d\n",
8851 ok_(
file,
line) (
FALSE,
"%s: in msg 0x%08x field %d: expected \"%s\", got \"%s\"\n",
8867 ok_(
file,
line) (
FALSE,
"%s: the msg 0x%08x was expected, but got msg 0x%08x instead\n",
8880 ok_(
file,
line) (
FALSE,
"%s: the msg sequence is not complete: expected %08x - actual %08x\n",
8885 if(
todo && !failcount)
8895#define ok_sequence(exp, contx, todo) \
8896 ok_sequence_((exp), (contx), (todo), __FILE__, __LINE__)
8930 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
8932 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
8933 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
8938 {
INSTALLMESSAGE_INFO, 3, {
"zero",
"one",
"two",
"three"}, {1, 1, 1, 1}},
8943 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"name",
"description",
"template"}, {0, 1, 1, 1}},
8948 {
INSTALLMESSAGE_ACTIONDATA, 3, {
"{{name: }}template",
"cherry",
"banana",
"guava"}, {1, 1, 1, 1}},
8953 {
INSTALLMESSAGE_USER, 3, {
"",
"1311",
"banana",
"guava"}, {0, 1, 1, 1}},
8958 {
INSTALLMESSAGE_INFO, 3, {
"DEBUG: Error [1]: Action not found: [2]",
"2726",
"banana",
"guava"}, {1, 1, 1, 1}},
8959 {
INSTALLMESSAGE_USER, 3, {
"internal error",
"2726",
"banana",
"guava"}, {1, 1, 1, 1}},
8964 {
INSTALLMESSAGE_USER, 3, {
"",
"2726",
"banana",
"guava"}, {0, 1, 1, 1}},
8969 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostInitialize",
"cost description",
"cost template"}, {0, 1, 1, 1}},
8976 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"description",
"template"}, {0, 1, 1, 1}},
8983 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
8991 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
8996 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
8999 {
INSTALLMESSAGE_INFO, 2, {
"DEBUG: Error [1]: Action not found: [2]",
"2726",
"custom"}, {1, 1, 1}},
9006 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"dialog",
"",
""}, {0, 1, 1, 1}},
9015 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"error",
"",
""}, {0, 1, 1, 1}},
9022 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"dialog",
"",
""}, {0, 1, 1, 1}},
9030 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"dialog",
"",
""}, {0, 1, 1, 1}},
9048 msg.field_count = 0;
9068 msg.field_count = -1;
9073 for (
i = 0;
i <=
msg.field_count;
i++)
9109 ok(hdb,
"failed to create database\n");
9115 r =
run_query(hdb,
"CREATE TABLE `Error` (`Error` SHORT NOT NULL, `Message` CHAR(0) PRIMARY KEY `Error`)");
9117 r =
run_query(hdb,
"INSERT INTO `Error` (`Error`, `Message`) VALUES (5, 'internal error')");
9135 skip(
"Not enough rights to perform tests\n");
9144 ok(hrecord,
"failed to create record\n");
9151 ok(
r == 1,
"Expected 1, got %d\n",
r);
9158 ok(
r == 1,
"Expected 1, got %d\n",
r);
9166 ok(
r == 1,
"Expected 1, got %d\n",
r);
9173 ok(
r == 1,
"Expected 1, got %d\n",
r);
9180 ok(
r == 0,
"Expected 0, got %d\n",
r);
9186 ok(
r == 1,
"Expected 1, got %d\n",
r);
9205 ok(hdb,
"failed to create database\n");
9273 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"spawn",
"",
""}, {0, 1, 1, 1}},
9278 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
9289 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"spawn2",
"",
""}, {0, 1, 1, 1}},
9294 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"custom",
"",
""}, {0, 1, 1, 1}},
9312 skip(
"interactive ControlEvent tests\n");
9326 ok(hdb,
"failed to create database\n");
9339 add_control_entry(hdb,
"'spawn', 'button', 'PushButton', 10, 10, 66, 17, 3, 'Click me'");
9340 add_control_entry(hdb,
"'spawn2', 'button', 'PushButton', 10, 10, 66, 17, 3, 'Click me'");
9341 add_control_entry(hdb,
"'child1', 'exit', 'PushButton', 10, 10, 66, 17, 3, 'Click me'");
9342 add_control_entry(hdb,
"'child2', 'exit', 'PushButton', 10, 10, 66, 17, 3, 'Click me'");
9381 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
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, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9394 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostInitialize",
"",
""}, {0, 1, 0, 1}},
9398 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"FileCost",
"",
""}, {0, 1, 0, 1}},
9402 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostFinalize",
"",
""}, {0, 1, 0, 1}},
9407 {
INSTALLMESSAGE_INSTALLEND, 3, {
"",
"",
"{7262AC98-EEBD-4364-8CE3-D654F6A425B9}",
"1"}, {1, 1, 1, 1}, 1},
9418 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9421 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"AppSearch",
"",
""}, {0, 1, 0, 0}},
9430 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"ExecuteAction",
"",
""}, {0, 1, 1, 1}},
9433 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9434 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9435 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9436 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9438 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9442 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostInitialize",
"",
""}, {0, 1, 0, 1}},
9446 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"FileCost",
"",
""}, {0, 1, 0, 1}},
9450 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostFinalize",
"",
""}, {0, 1, 0, 1}},
9455 {
INSTALLMESSAGE_INSTALLEND, 3, {
"",
"",
"{7262AC98-EEBD-4364-8CE3-D654F6A425B9}",
"1"}, {1, 1, 1, 1}, 1},
9466 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"ExecuteAction",
"",
""}, {0, 1, 1, 1}},
9469 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9470 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9471 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9472 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9474 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CostInitialize",
"",
""}, {0, 1, 0, 1}},
9489 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9490 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9492 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9493 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9495 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"INSTALL",
"",
""}, {0, 1, 1, 1}},
9498 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"AppSearch",
"",
""}, {0, 1, 0, 0}},
9514 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9515 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {1, 1, 1, 1}},
9517 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"0",
"1033",
"1252"}, {0, 1, 1, 1}},
9518 {
INSTALLMESSAGE_COMMONDATA, 3, {
"",
"1",
"",
""}, {0, 1, 0, 0}},
9520 {
INSTALLMESSAGE_ACTIONSTART, 3, {
"",
"CUSTOM",
"",
""}, {0, 1, 1, 1}},
9549 ok(hdb,
"failed to create database\n");
9632 if (pIsWow64Process)
9651 if (pSRSetRestorePointA && !pMsiGetComponentPathExA)
9695 if (pSRSetRestorePointA && !pMsiGetComponentPathExA &&
ret)
char * strcat(char *DstString, const char *SrcString)
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 * strcpy(char *DstString, const char *SrcString)
char * strchr(const char *String, int ch)
void ls(int argc, const char *argv[])
void user(int argc, const char *argv[])
static SID_IDENTIFIER_AUTHORITY NtAuthority
#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 RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
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 CheckTokenMembership(IN HANDLE ExistingTokenHandle, IN PSID SidToCheck, OUT PBOOL IsMember)
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 AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount, DWORD nSubAuthority0, DWORD nSubAuthority1, DWORD nSubAuthority2, DWORD nSubAuthority3, DWORD nSubAuthority4, DWORD nSubAuthority5, DWORD nSubAuthority6, DWORD nSubAuthority7, PSID *pSid)
PVOID WINAPI FreeSid(PSID pSid)
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)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
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)
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)
INSTALLSTATE WINAPI MsiGetComponentPathExA(LPCSTR product, LPCSTR comp, LPCSTR usersid, MSIINSTALLCONTEXT ctx, LPSTR buf, LPDWORD buflen)
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 unsigned char buff[32768]
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
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)
LANGID WINAPI GetUserDefaultLangID(void)
int WINAPI lstrcmpiA(LPCSTR lpString1, LPCSTR lpString2)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
int WINAPI lstrcmpA(LPCSTR 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 HINSTANCE hkernel32
#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 remove_restore_point(DWORD seq_number)
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 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 BOOL notify_system_change(DWORD event_type, STATEMGRSTATUS *status)
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[]
static void check_prop(MSIHANDLE hpkg, const char *prop, const char *expect, int match_case)
#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 char CURR_DIR[MAX_PATH]
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 BOOL is_process_limited(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 STATEMGRSTATUS *static void init_functionpointers(void)
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]
static UINT run_query(MSIHANDLE hdb, const char *query)
#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[]
static void create_file_data(LPCSTR name, LPCSTR data)
#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[]
#define GET_PROC(mod, func)
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
enum tagMSIINSTALLCONTEXT MSIINSTALLCONTEXT
#define INSTALLPROPERTY_LOCALPACKAGEA
@ 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
DWORD WINAPI GetVersion()
#define delete_key(r, p, s)
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
BOOL WINAPI SRSetRestorePointA(PRESTOREPOINTINFOA pRestorePtSpec, PSTATEMGRSTATUS pSMgrStatus)
DWORD WINAPI SRRemoveRestorePoint(DWORD dwNumber)
#define APPLICATION_INSTALL
#define BEGIN_NESTED_SYSTEM_CHANGE
#define END_NESTED_SYSTEM_CHANGE
CHAR szDescription[MAX_DESC]
#define INVALID_FILE_ATTRIBUTES
static const WCHAR props[]
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
enum _TOKEN_ELEVATION_TYPE TOKEN_ELEVATION_TYPE
@ TokenElevationTypeLimited
@ TokenElevationTypeDefault
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define HKEY_CLASSES_ROOT
int WINAPI GetSystemMetrics(_In_ int)
#define SECURITY_BUILTIN_DOMAIN_RID
#define SECURITY_NT_AUTHORITY
#define DOMAIN_ALIAS_RID_POWER_USERS
#define DOMAIN_ALIAS_RID_ADMINS