44#define REG_PROGRESS_VALUE 13200
45#define COMPONENT_PROGRESS_VALUE 24000
131 if (in_quotes &&
p[1] !=
'\"')
count--;
147 if (in_quotes)
count--;
152 if (!
count)
goto done;
167 if (in_quotes &&
p[1] !=
'\"')
count--;
197 if(quotes) *quotes =
count;
228 while (*
ptr ==
' ')
ptr++;
242 if (!preserve_case)
wcsupr( prop );
245 while (*ptr2 ==
' ') ptr2++;
252 WARN(
"unbalanced quotes\n");
284 while (*
cmd ==
' ')
cmd++;
293 while (*
cmd ==
' ')
cmd++;
297 if (found)
return cmd;
417 ERR(
"Error is retrieving action name\n");
441 if (package->need_reboot_now)
443 TRACE(
"action %s asked for immediate reboot, suspending installation\n",
473 TRACE(
"Execute Sequence already Run\n");
480 L"SELECT * FROM `InstallExecuteSequence` WHERE `Sequence` > 0 ORDER BY `Sequence`");
483 TRACE(
"Running the actions\n");
498 L"SELECT * FROM `InstallUISequence` WHERE `Sequence` > 0 ORDER BY `Sequence`",
502 TRACE(
"Running the actions\n");
650 TRACE(
"component not scheduled for installation: %s\n",
debugstr_w(component));
657 ERR(
"Unable to get folder id\n");
731 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
738 ERR(
"Unable to get folder id\n");
828 cl =
malloc(
sizeof(*cl) );
917 rc =
MSI_OpenQuery( package->db, &
view,
L"SELECT `Component_` FROM `FeatureComponents` WHERE `Feature_` = '%s'",
939 if (!
child->Feature_Parent)
1022 WARN(
"query failed\n");
1048 if (!
file->Component)
1146 WARN(
"query failed\n");
1159 const WCHAR *file_key;
1169 ERR(
"Failed to find target for patch in File table\n");
1185 TRACE(
"Patch loaded (file %s sequence %u)\n",
debugstr_w(patch->File->File), patch->Sequence);
1229 static const WCHAR select[] =
L"SELECT `Row`, `Column` FROM `_TransformView` WHERE `Table`='Component'";
1257 if (!
MSI_OpenQuery( package->
db, &
view,
L"SELECT * FROM `CreateFolder` WHERE `Directory_` = '%s'",
1279 LPWSTR p, tgt_short, tgt_long, src_short, src_long;
1299 if (tgt_short && !
wcscmp(
L".", tgt_short ))
1301 if (src_short && !
wcscmp(
L".", src_short ))
1305 tgt_long = tgt_short;
1308 src_short = tgt_short;
1309 src_long = tgt_long;
1313 src_long = src_short;
1411 ERR(
"Execution of script %i halted; action %s returned %u\n",
1424 ERR(
"Execution of script %i halted; action %s returned %u\n",
1608 TRACE(
"child %s (level %d request %d) follows disabled parent %s (level %d request %d)\n",
1609 debugstr_w(
fl->feature->Feature),
fl->feature->Level,
fl->feature->ActionRequest,
1628 TRACE(
"child %s (level %d request %d) follows parent %s (level %d request %d)\n",
1629 debugstr_w(
fl->feature->Feature),
fl->feature->Level,
fl->feature->ActionRequest,
1633 fl->feature->ActionRequest =
feature->ActionRequest;
1645 TRACE(
"Checking Install Level\n");
1719 cur->Action =
cur->Installed;
1720 cur->ActionRequest =
cur->Installed;
1742 if (!
cur->Feature_Parent)
1753 if (
feature->Feature_Parent)
continue;
1763 TRACE(
"examining feature %s (level %d installed %d request %d action %d)\n",
1783 switch (
feature->ActionRequest)
1896 TRACE(
"component %s (installed %d request %d action %d)\n",
1949 if (ms1 > ms2)
return 1;
1950 else if (ms1 < ms2)
return -1;
2063 WCHAR *font_version;
2073 if (
file->IsCompressed)
2094 free( file_version );
2103 free( font_version );
2128 while (*
p !=
' ' && (*
q = *
p))
2132 if (*
p !=
'\\' || *
q !=
'\\')
2146 if (
len == 0 ||
p[-1] ==
'\\' ||
p[
n] ==
'\\' )
2149 while (
n && (*
q++ = *
p++))
n--;
2151 while (
q -
ret > 0 &&
q[-1] ==
' ')
q--;
2152 if (
q -
ret > 0 &&
q[-1] !=
'\\')
2210 folder->ResolvedTarget = normalized_path;
2239 TRACE(
"Building directory properties\n");
2242 TRACE(
"Evaluating component conditions\n");
2261 TRACE(
"Evaluating feature conditions\n");
2273 TRACE(
"Calculating file cost\n");
2288 if (((primary_folder[0] >=
'A' && primary_folder[0] <=
'Z') ||
2289 (primary_folder[0] >=
'a' && primary_folder[0] <=
'z')) && primary_folder[1] ==
':')
2295 primary_folder[2] = 0;
2321 free( primary_folder );
2323 free( primary_key );
2377 TRACE(
"Uneven byte count\n");
2407 if ( (*
p <
'0') || (*
p >
'9') )
2413 if (deformated[0] ==
'-')
2426 if (
value[0] ==
'#')
2429 if (
value[1] ==
'%')
2452 ret =
L"HKEY_LOCAL_MACHINE\\";
2457 ret =
L"HKEY_CURRENT_USER\\";
2462 ret =
L"HKEY_CLASSES_ROOT\\";
2466 ret =
L"HKEY_CURRENT_USER\\";
2470 ret =
L"HKEY_LOCAL_MACHINE\\";
2474 ret =
L"HKEY_USERS\\";
2477 ERR(
"Unknown root %i\n",
root);
2569 for (
i = 0;
i < left_count;
i++)
2574 for (
i = 0;
i < right_count;
i++)
2587 unsigned int i,
j,
k;
2589 for (
i = 0;
i < new_count;
i++)
2591 for (
j = 0;
j < old_count;
j++)
2593 if (old[
j] && !
wcscmp(
new[
i], old[
j] ))
2596 for (
k =
j;
k < old_count - 1;
k++) { old[
k] = old[
k + 1]; }
2629 ERR(
"unhandled join op %u\n",
op);
2637 DWORD i, old_len = 0, new_len = 0, old_count = 0, new_count = 0;
2643 if (new_size /
sizeof(
WCHAR) - 1 > 1)
2645 new_ptr = (
const WCHAR *)new_value;
2646 new_len = new_size /
sizeof(
WCHAR) - 1;
2648 if (!new_ptr[0] && new_ptr[new_len - 1])
2654 else if (new_ptr[0] && !new_ptr[new_len - 1])
2659 else if (new_len > 2 && !new_ptr[0] && !new_ptr[new_len - 1])
2667 if (old_size /
sizeof(
WCHAR) - 1 > 1)
2670 old_len = old_size /
sizeof(
WCHAR) - 1;
2674 for (
i = 0;
i < old_count;
i++)
free( old[
i] );
2675 for (
i = 0;
i < new_count;
i++)
free(
new[
i] );
2694 HKEY root_key, hkey;
2695 DWORD type, old_type, new_size, old_size = 0;
2696 LPWSTR deformated, uikey;
2714 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
2778 if (deformated || new_size)
2830 res =
RegQueryInfoKeyW(
key, 0, 0, 0, &subkeys, 0, 0, &
values, 0, 0, 0, 0);
2849 if (!
p[1])
continue;
2906 LPWSTR deformated_key, deformated_name, ui_key_str;
2924 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
2950 lstrcpyW( ui_key_str, root_key_str );
2951 lstrcatW( ui_key_str, deformated_key );
2956 else delete_value( comp, hkey_root, deformated_key, deformated_name );
2957 free( deformated_key );
2966 free( deformated_name );
2974 LPWSTR deformated_key, deformated_name, ui_key_str;
2990 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
3013 lstrcpyW( ui_key_str, root_key_str );
3014 lstrcatW( ui_key_str, deformated_key );
3019 else delete_value( comp, hkey_root, deformated_key, deformated_name );
3020 free( deformated_key );
3029 free( deformated_name );
3075 TRACE(
"InstallValidate\n");
3096 TRACE(
"Feature: %s Installed %d Request %d Action %d\n",
3133 TRACE(
"Checking launch conditions\n");
3168 if (deformated_name)
3173 if (deformated_name)
3179 free(deformated_name);
3186 FIXME(
"UNIMPLEMENTED keypath as ODBC Source\n");
3279 if (
file->Component == comp)
3345 TRACE(
"Component %s (%s) Keypath=%s RefCount=%u Clients=%u Action=%u\n",
3378 L"ORDER BY `DiskId`",
file->Sequence)))
3420 WARN(
"failed to open component key %u\n", rc );
3425 if (
res)
WARN(
"failed to delete component value %ld\n",
res );
3486 ITypeLib_GetLibAttr(tl_struct->
ptLib, &
attr);
3489 ITypeLib_ReleaseTLibAttr(tl_struct->
ptLib,
attr);
3496 ITypeLib_ReleaseTLibAttr(tl_struct->
ptLib,
attr);
3497 ITypeLib_Release(tl_struct->
ptLib);
3539 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
3545 TRACE(
"component has no key path\n");
3573 ERR(
"Failed to register type library %s\n",
debugstr_w(tl_struct.path));
3577 ITypeLib_Release(tl_struct.ptLib);
3578 free(tl_struct.path);
3580 else ERR(
"Failed to load type library %s\n",
debugstr_w(tl_struct.source));
3583 free(tl_struct.source);
3590 ERR(
"failed to load type library: %#lx\n",
hr );
3594 ITypeLib_Release(tlib);
3636 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
3655 WARN(
"failed to unregister typelib: %#lx\n",
hr );
3698 if (!extension ||
wcsicmp( extension,
L".lnk" ))
3702 if (!new_filename)
goto done;
3751 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
3757 &IID_IShellLinkW, (
LPVOID *) &sl );
3761 ERR(
"CLSID_ShellLink not available\n");
3768 ERR(
"QueryInterface(IID_IPersistFile) failed\n");
3777 IShellLinkW_SetPath( sl,
path );
3782 FIXME(
"poorly handled shortcut format, advertised shortcut\n");
3784 IShellLinkW_SetPath( sl,
path );
3792 IShellLinkW_SetArguments(sl,deformated);
3817 IShellLinkW_SetIconLocation(sl,
path,
index);
3828 if (full_path) IShellLinkW_SetWorkingDirectory( sl, full_path );
3835 IPersistFile_Save(pf, link_file,
FALSE);
3842 IPersistFile_Release( pf );
3844 IShellLinkW_Release( sl );
3886 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
3929 ERR(
"Unable to get filename\n");
3952 ERR(
"Failed to get stream\n");
3957 }
while (sz == 1024);
4098 WARN(
"failed to open upgrade code key\n");
4140 HKEY patches_key =
NULL, product_patches_key =
NULL, product_key;
4198 ERR(
"unable to copy patch package %lu\n",
res );
4206 sizeof(patch->
state) );
4220 all_patches[
len] = 0;
4222 (
const BYTE *)all_patches, (
len + 1) *
sizeof(
WCHAR) );
4227 (
const BYTE *)all_patches, (
len + 1) *
sizeof(
WCHAR) );
4235 free( all_patches );
4260 WCHAR *package_code;
4276 TRACE(
"re-publishing product - new package\n");
4333 const WCHAR *dirprop;
4368 LPWSTR deformated_section, deformated_key, deformated_value,
fullname;
4381 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
4399 TRACE(
"Adding value %s to section %s in %s\n",
4410 if (returned[0] == 0)
4412 TRACE(
"Adding value %s to section %s in %s\n",
4421 FIXME(
"Append to existing section not yet implemented\n");
4432 free(deformated_key);
4433 free(deformated_value);
4434 free(deformated_section);
4459 LPWSTR deformated_section, deformated_key, deformated_value,
filename;
4472 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
4490 TRACE(
"Removing key %s from section %s in %s\n",
4511 free( deformated_key );
4512 free( deformated_value );
4513 free( deformated_section );
4521 LPWSTR deformated_section, deformated_key, deformated_value,
filename;
4534 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
4552 TRACE(
"Removing key %s from section %s in %s\n",
4572 free( deformated_key );
4573 free( deformated_value );
4574 free( deformated_section );
4607 static const WCHAR regW[] =
L"regsvr32.exe /s \"%s\"";
4608 static const WCHAR unregW[] =
L"regsvr32.exe /s /u \"%s\"";
4645 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(
file->Component->Component));
4695 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(
file->Component->Component));
4760 if (
feature->Level <= 0)
continue;
4892 static const WCHAR *propval[] =
4894 L"ARPAUTHORIZEDCDFPREFIX",
L"AuthorizedCDFPrefix",
4895 L"ARPCONTACT",
L"Contact",
4896 L"ARPCOMMENTS",
L"Comments",
4897 L"ProductName",
L"DisplayName",
4898 L"ARPHELPLINK",
L"HelpLink",
4899 L"ARPHELPTELEPHONE",
L"HelpTelephone",
4900 L"ARPINSTALLLOCATION",
L"InstallLocation",
4901 L"SourceDir",
L"InstallSource",
4902 L"Manufacturer",
L"Publisher",
4903 L"ARPREADME",
L"ReadMe",
4904 L"ARPSIZE",
L"Size",
4905 L"ARPURLINFOABOUT",
L"URLInfoAbout",
4906 L"ARPURLUPDATEINFO",
L"URLUpdateInfo",
4909 const WCHAR **
p = propval;
4934 static const WCHAR fmt_install[] =
L"MsiExec.exe /I[ProductCode]";
4935 static const WCHAR fmt_uninstall[] =
L"MsiExec.exe /X[ProductCode]";
4944 fmt = fmt_uninstall;
5018 free( upgrade_code );
5049 if ((
p =
wcsrchr( icon_path,
'\\' )))
5085 WARN(
"upgrade code not found\n" );
5091 res =
RegQueryInfoKeyW( hkey,
NULL,
NULL,
NULL,
NULL,
NULL, &
count,
NULL,
NULL,
NULL,
NULL,
NULL );
5098 res =
RegQueryInfoKeyW( hkey,
NULL,
NULL,
NULL,
NULL,
NULL, &
count,
NULL,
NULL,
NULL,
NULL,
NULL );
5105 res =
RegQueryInfoKeyW( hkey,
NULL,
NULL,
NULL,
NULL,
NULL, &
count,
NULL,
NULL,
NULL,
NULL,
NULL );
5181 ERR(
"Failed to install assembly\n");
5203 ERR(
"Failed to install patched assembly\n");
5306 static const WCHAR szPropKeys[][80] =
5313 static const WCHAR szRegKeys[][80] =
5343 for(
i = 0; szPropKeys[
i][0];
i++ )
5379 WCHAR *info_template;
5406 free(info_template);
5507 WCHAR productid_85[21], component_85[21], *
ret;
5513 productid_85[0] = 0;
5514 component_85[0] = 0;
5587 for (
p = existing; *
p;
p +=
len)
5593 if (!(output =
malloc( (sz + 1) *
sizeof(
WCHAR) )))
5601 for (
p = existing; *
p;
p +=
len)
5685 lstrcpyW( keypath,
L"Software\\Microsoft\\Installer\\Components\\" );
5691 WARN(
"unable to delete component key %ld\n",
res );
5726 SC_HANDLE hscm =
NULL, service =
NULL;
5730 DWORD serv_type, start_type, err_control;
5739 WARN(
"service component not found\n");
5745 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(comp));
5751 ERR(
"Failed to open the SC Manager!\n");
5775 err_control &= ~msidbServiceInstallErrorControlVital;
5781 ERR(
"Query failed\n");
5793 ERR(
"Failed to load the service file\n");
5812 start_type, err_control, image_path, load_order,
5825 else if (
sd.lpDescription)
5831 if (image_path !=
file->TargetPath)
free(image_path);
5911 SC_HANDLE scm =
NULL, service =
NULL;
5942 ERR(
"Failed to open the service control manager\n");
5994 WARN(
"service failed to start %lu\n",
status.dwCurrentState );
6042 0, &needed, &
count))
6048 dependencies =
malloc(needed);
6053 needed, &needed, &
count))
6078 SC_HANDLE scm =
NULL, service =
NULL;
6148 ERR(
"Failed to open the service control manager\n");
6171 free( display_name );
6199 SC_HANDLE scm =
NULL, service =
NULL;
6253 free( display_name );
6295 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
6308 ERR(
"ODBC Driver entry not found!\n");
6350 ERR(
"Failed to install SQL driver!\n");
6370 LPWSTR translator, translator_path,
ptr;
6387 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
6398 if (!translator_file)
6400 ERR(
"ODBC Translator entry not found!\n");
6433 ERR(
"Failed to install SQL translator!\n");
6445 free(translator_path);
6470 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
6490 WARN(
"Failed to install SQL data source!\n");
6555 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
6562 WARN(
"Failed to remove ODBC driver\n");
6566 FIXME(
"Usage count reached 0\n");
6594 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
6601 WARN(
"Failed to remove ODBC translator\n");
6605 FIXME(
"Usage count reached 0\n");
6636 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
6652 FIXME(
"Use ODBCSourceAttribute table\n");
6659 WARN(
"Failed to remove ODBC data source\n");
6708#define ENV_ACT_SETALWAYS 0x1
6709#define ENV_ACT_SETABSENT 0x2
6710#define ENV_ACT_REMOVE 0x4
6711#define ENV_ACT_REMOVEMATCH 0x8
6713#define ENV_MOD_MACHINE 0x20000000
6714#define ENV_MOD_APPEND 0x40000000
6715#define ENV_MOD_PREFIX 0x80000000
6716#define ENV_MOD_MASK 0xC0000000
6718#define check_flag_combo(x, y) ((x) & ~(y)) == (y)
6729 else if (*cptr ==
'+')
6731 else if (*cptr ==
'-')
6733 else if (*cptr ==
'!')
6735 else if (*cptr ==
'*')
6746 ERR(
"Missing environment variable\n");
6788 ERR(
"invalid flags: %#lx\n", *
flags );
6806 env =
L"System\\CurrentControlSet\\Control\\Session Manager\\Environment";
6811 env =
L"Environment";
6835 int action = 0, found = 0;
6845 TRACE(
"component not scheduled for installation %s\n",
debugstr_w(component));
6868 value = deformatted;
6952 while (*
q && *
q !=
';')
q++;
6966 TRACE(
"string already set\n");
6980 newval[len_value] =
';';
6981 p = newval + len_value + 1;
7055 TRACE(
"component not scheduled for removal %s\n",
debugstr_w(component));
7084 value = deformatted;
7119 if (!(new_value =
malloc(
size )))
goto done;
7125 len_new_value =
size /
sizeof(
WCHAR) - 1;
7129 while (*
q && *
q !=
';')
q++;
7134 memmove(
p,
q, (len_new_value - (
q - new_value) + 1) *
sizeof(
WCHAR) );
7141 if (!new_value[0] || !
value)
7166 free( deformatted );
7201 if (
key &&
template)
7205 WARN(
"Product key validation HACK, see CORE-14710\n");
7244 TRACE(
"%p\n", package);
7252 FIXME(
"%p\n", package);
7280 if (
count)
FIXME(
"ignored %lu rows in ODBCTranslator table\n",
count );
7313 swprintf(
cmd,
len,
L"msiexec /qn /i %s REMOVE=%s", product, features ? features :
L"ALL" );
7372 FIXME(
"migrate feature states from %s version min %s version max %s language %s\n",
7386 TRACE(
"product is installed, skipping action\n");
7391 TRACE(
"Preselected property is set, not migrating feature states\n");
7420 WCHAR *pathW, **path_list;
7433 for (
i = 0; path_list[
i] && path_list[
i][0];
i++)
7623 TRACE(
"scheduling rollback action\n");
7672 TRACE(
"Running the actions\n");
7687 ERR(
"failed to fetch action\n");
7766 file = szPackagePath;
7810 else free( productcode );
7814 TRACE(
"disabling rollback\n");
7843 WARN(
"installation failed, running rollback script\n");
ULONGLONG WINAPI GetTickCount64(VOID)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
UINT ACTION_AppSearch(MSIPACKAGE *package)
UINT ACTION_CCPSearch(MSIPACKAGE *package)
void msi_parse_version_string(LPCWSTR verStr, PDWORD ms, PDWORD ls)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static BOOL load_typelib(void)
void ls(int argc, const char *argv[])
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
#define RegCloseKey(hKey)
_In_ ULONG const _In_ FEATURE_NUMBER const Feature
LSTATUS WINAPI RegDeleteTreeW(_In_ HKEY, _In_opt_ LPCWSTR)
static LPCWSTR LPCWSTR LPCWSTR env
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
static const WCHAR szEmpty[]
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegDeleteKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ REGSAM samDesired, _In_ DWORD Reserved)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
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 RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
#define GetCurrentDirectoryW(x, y)
#define INVALID_HANDLE_VALUE
#define FILE_ATTRIBUTE_NORMAL
static const WCHAR version[]
static WCHAR * parse_value(const WCHAR *str, unsigned int len)
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
BOOL WINAPI GetDiskFreeSpaceExW(IN LPCWSTR lpDirectoryName OPTIONAL, OUT PULARGE_INTEGER lpFreeBytesAvailableToCaller, OUT PULARGE_INTEGER lpTotalNumberOfBytes, OUT PULARGE_INTEGER lpTotalNumberOfFreeBytes)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
BOOL WINAPI EnumResourceNamesW(HMODULE hmod, LPCWSTR type, ENUMRESNAMEPROCW lpfun, LONG_PTR lparam)
static UINT load_file_disk_id(MSIPACKAGE *package, MSIFILE *file)
static UINT iterate_patched_component(MSIRECORD *row, LPVOID param)
static UINT ACTION_RemoveIniValues(MSIPACKAGE *package)
static UINT ITERATE_WriteRegistryValues(MSIRECORD *row, LPVOID param)
static UINT add_folder_child(MSIFOLDER *parent, MSIFOLDER *child)
UINT msi_set_context(MSIPACKAGE *package)
static void remove_product_upgrade_code(MSIPACKAGE *package)
static UINT ACTION_RemoveExistingProducts(MSIPACKAGE *package)
static UINT ACTION_MigrateFeatureStates(MSIPACKAGE *package)
static UINT ACTION_RemoveODBC(MSIPACKAGE *package)
static UINT open_env_key(DWORD flags, HKEY *key)
static UINT ACTION_CreateShortcuts(MSIPACKAGE *package)
static UINT ACTION_InstallODBC(MSIPACKAGE *package)
static UINT ACTION_INSTALL(MSIPACKAGE *package)
#define REG_PROGRESS_VALUE
static void write_shared_dlls_count(MSICOMPONENT *comp, const WCHAR *path, INT count)
static UINT ITERATE_StopService(MSIRECORD *rec, LPVOID param)
static BOOL CALLBACK Typelib_EnumResNameProc(HMODULE hModule, LPCWSTR lpszType, LPWSTR lpszName, LONG_PTR lParam)
static UINT load_file_hash(MSIPACKAGE *package, MSIFILE *file)
static UINT ACTION_ProcessUISequence(MSIPACKAGE *package)
static UINT unpublish_icons(MSIPACKAGE *package)
static BOOL stop_service_dependents(SC_HANDLE scm, SC_HANDLE service)
static UINT ITERATE_UnregisterTypeLibraries(MSIRECORD *row, LPVOID param)
static void register_dll(const WCHAR *dll, BOOL unregister)
static UINT find_folder_children(MSIRECORD *row, LPVOID param)
static UINT ITERATE_RemoveRegistryValuesOnUninstall(MSIRECORD *row, LPVOID param)
INSTALLSTATE msi_get_component_action(MSIPACKAGE *package, MSICOMPONENT *comp)
int msi_compare_file_versions(VS_FIXEDFILEINFO *fi, const WCHAR *version)
static const WCHAR ** service_args_to_vector(WCHAR *args, DWORD *numargs)
static UINT publish_product_properties(MSIPACKAGE *package, HKEY hkey)
static UINT publish_icons(MSIPACKAGE *package)
static UINT ITERATE_UnpublishComponent(MSIRECORD *rec, LPVOID param)
static UINT ACTION_InstallAdminPackage(MSIPACKAGE *package)
static UINT ACTION_UnregisterTypeLibraries(MSIPACKAGE *package)
static UINT ACTION_RegisterProduct(MSIPACKAGE *package)
static int parse_prop(const WCHAR *str, WCHAR *value, int *quotes)
static void ui_actioninfo(MSIPACKAGE *package, const WCHAR *action, BOOL start, INT rc)
static int is_key_empty(const MSICOMPONENT *comp, HKEY root, const WCHAR *path)
static UINT ACTION_FileCost(MSIPACKAGE *package)
static UINT ITERATE_RegisterTypeLibraries(MSIRECORD *row, LPVOID param)
static UINT stop_service(LPCWSTR name)
static HMODULE load_library(MSIPACKAGE *package, const WCHAR *filename, DWORD flags)
static BYTE * reg_get_value(HKEY hkey, const WCHAR *name, DWORD *type, DWORD *size)
WCHAR ** msi_split_string(const WCHAR *str, WCHAR sep)
static void mark_patched_components(MSIPACKAGE *package)
static void stop_dummy_thread(struct dummy_thread *info)
static UINT ACTION_PublishComponents(MSIPACKAGE *package)
static UINT add_feature_child(MSIFEATURE *parent, MSIFEATURE *child)
static BYTE * parse_value(MSIPACKAGE *package, const WCHAR *value, DWORD len, DWORD *type, DWORD *size)
static void ACTION_GetComponentInstallStates(MSIPACKAGE *package)
static UINT ACTION_RemoveFolders(MSIPACKAGE *package)
static UINT ITERATE_RemoveODBCDataSource(MSIRECORD *rec, LPVOID param)
static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
UINT msi_load_all_components(MSIPACKAGE *package)
static void refcount_component(MSIPACKAGE *package, MSICOMPONENT *comp)
UINT MSI_InstallPackage(MSIPACKAGE *package, LPCWSTR szPackagePath, LPCWSTR szCommandLine)
static UINT ITERATE_InstallODBCTranslator(MSIRECORD *rec, LPVOID param)
static WCHAR * get_link_file(MSIPACKAGE *package, MSIRECORD *row)
static UINT ACTION_UnpublishFeatures(MSIPACKAGE *package)
static HKEY open_shared_dlls_key(MSICOMPONENT *comp, BOOL create, REGSAM access)
BOOL msi_is_global_assembly(MSICOMPONENT *comp)
static UINT ITERATE_RemoveODBCDriver(MSIRECORD *rec, LPVOID param)
static UINT ACTION_ProcessExecSequence(MSIPACKAGE *package)
DWORD WINAPI dummy_thread_proc(void *arg)
static UINT load_folder(MSIRECORD *row, LPVOID param)
static UINT load_media(MSIRECORD *row, LPVOID param)
static BOOL needs_ui_sequence(MSIPACKAGE *package)
static UINT ACTION_ProcessComponents(MSIPACKAGE *package)
static LPWSTR folder_split_path(LPWSTR p, WCHAR ch)
UINT msi_set_sourcedir_props(MSIPACKAGE *package, BOOL replace)
MSIFOLDER * msi_get_loaded_folder(MSIPACKAGE *package, const WCHAR *dir)
#define ENV_ACT_REMOVEMATCH
static UINT unimplemented_action_stub(MSIPACKAGE *package, LPCSTR action, LPCWSTR table)
#define ENV_ACT_SETALWAYS
static UINT ACTION_PublishFeatures(MSIPACKAGE *package)
static UINT ACTION_WriteIniValues(MSIPACKAGE *package)
static UINT ACTION_RegisterComPlus(MSIPACKAGE *package)
UINT ACTION_ForceReboot(MSIPACKAGE *package)
UINT MSI_Sequence(MSIPACKAGE *package, LPCWSTR table)
static BOOL check_publish(MSIPACKAGE *package)
static BOOL ui_sequence_exists(MSIPACKAGE *package)
static UINT ITERATE_BindImage(MSIRECORD *rec, LPVOID param)
UINT(* handler)(MSIPACKAGE *)
static UINT ACTION_UnregisterComPlus(MSIPACKAGE *package)
static BOOL is_full_uninstall(MSIPACKAGE *package)
static UINT ITERATE_SelfRegModules(MSIRECORD *row, LPVOID param)
static DWORD remove_duplicate_values(WCHAR **old, DWORD old_count, WCHAR **new, DWORD new_count)
static UINT ACTION_RMCCPSearch(MSIPACKAGE *package)
#define check_flag_combo(x, y)
static UINT ITERATE_InstallODBCDriver(MSIRECORD *rec, LPVOID param)
int msi_compare_font_versions(const WCHAR *ver1, const WCHAR *ver2)
static UINT ACTION_InstallFinalize(MSIPACKAGE *package)
static UINT ITERATE_InstallODBCDataSource(MSIRECORD *rec, LPVOID param)
static BOOL is_special_entry(const WCHAR *name)
static UINT ACTION_ValidateProductID(MSIPACKAGE *package)
static UINT ACTION_InstallExecute(MSIPACKAGE *package)
#define ENV_ACT_SETABSENT
WCHAR * msi_normalize_path(const WCHAR *in)
static UINT ITERATE_CostFinalizeConditions(MSIRECORD *row, LPVOID param)
static UINT publish_patches(MSIPACKAGE *package)
static UINT load_component(MSIRECORD *row, LPVOID param)
static BOOL check_unpublish(MSIPACKAGE *package)
static UINT ACTION_WriteEnvironmentStrings(MSIPACKAGE *package)
static WCHAR ** split_multi_string_values(const WCHAR *str, DWORD len, DWORD *count)
static UINT ACTION_AllocateRegistrySpace(MSIPACKAGE *package)
static UINT ACTION_InstallInitialize(MSIPACKAGE *package)
static UINT ITERATE_RemoveFolders(MSIRECORD *row, LPVOID param)
static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq)
static BOOL is_feature_selected(MSIFEATURE *feature, INT level)
static REGSAM get_registry_view(const MSICOMPONENT *comp)
static WCHAR * get_ini_file_name(MSIPACKAGE *package, MSIRECORD *row)
static void remove_persistent_folder(MSIFOLDER *folder)
static UINT load_patch(MSIRECORD *row, LPVOID param)
static UINT ACTION_StopServices(MSIPACKAGE *package)
UINT msi_validate_product_id(MSIPACKAGE *package)
static BOOL process_state_property(MSIPACKAGE *package, int level, LPCWSTR property, INSTALLSTATE state)
static UINT ITERATE_Actions(MSIRECORD *row, LPVOID param)
static UINT env_parse_flags(LPCWSTR *name, LPCWSTR *value, DWORD *flags)
static WCHAR * flatten_multi_string_values(WCHAR **left, DWORD left_count, WCHAR **right, DWORD right_count, DWORD *size)
static UINT ITERATE_WriteIniValues(MSIRECORD *row, LPVOID param)
static const struct @498 StandardActions[]
static UINT ITERATE_MigrateFeatureStates(MSIRECORD *rec, LPVOID param)
static UINT ITERATE_PublishComponent(MSIRECORD *rec, LPVOID param)
static UINT ACTION_DisableRollback(MSIPACKAGE *package)
static UINT ITERATE_RemoveExistingProducts(MSIRECORD *rec, LPVOID param)
static void disable_children(MSIFEATURE *feature, int level)
UINT MSI_SetFeatureStates(MSIPACKAGE *package)
static void ACTION_GetFeatureInstallStates(MSIPACKAGE *package)
static UINT load_folder_persistence(MSIPACKAGE *package, MSIFOLDER *folder)
static UINT ACTION_RemoveShortcuts(MSIPACKAGE *package)
void msi_ui_progress(MSIPACKAGE *package, int a, int b, int c, int d)
const WCHAR * action_rollback
static UINT load_patch_disk_id(MSIPACKAGE *package, MSIFILEPATCH *patch)
static UINT ACTION_RegisterTypeLibraries(MSIPACKAGE *package)
static void follow_parent(MSIFEATURE *feature)
static UINT ACTION_ExecuteAction(MSIPACKAGE *package)
static UINT load_all_files(MSIPACKAGE *package)
static UINT ITERATE_SelfUnregModules(MSIRECORD *row, LPVOID param)
MSIFEATURE * msi_get_loaded_feature(MSIPACKAGE *package, const WCHAR *Feature)
static UINT ACTION_CostFinalize(MSIPACKAGE *package)
static UINT ITERATE_RemoveIniValuesOnInstall(MSIRECORD *row, LPVOID param)
static UINT load_all_media(MSIPACKAGE *package)
static BYTE * build_multi_string_value(BYTE *old_value, DWORD old_size, BYTE *new_value, DWORD new_size, DWORD *size)
static UINT ITERATE_UnpublishIcon(MSIRECORD *row, LPVOID param)
static UINT ACTION_UnpublishComponents(MSIPACKAGE *package)
static UINT ITERATE_CreateFolders(MSIRECORD *row, LPVOID param)
static UINT ACTION_InstallSFPCatalogFile(MSIPACKAGE *package)
UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action)
WCHAR * msi_create_component_advertise_string(MSIPACKAGE *package, MSICOMPONENT *component, const WCHAR *feature)
static UINT iterate_load_featurecomponents(MSIRECORD *row, LPVOID param)
static UINT load_file(MSIRECORD *row, LPVOID param)
static void set_target_path(MSIPACKAGE *package, MSIFILE *file)
static UINT iterate_properties(MSIRECORD *record, void *param)
static BOOL process_overrides(MSIPACKAGE *package, int level)
static UINT ACTION_InstallValidate(MSIPACKAGE *package)
static UINT ACTION_WriteRegistryValues(MSIPACKAGE *package)
static UINT load_feature(MSIRECORD *row, LPVOID param)
static void remove_quotes(WCHAR *str)
static UINT ACTION_HandleStandardAction(MSIPACKAGE *package, LPCWSTR action)
static UINT ACTION_InstallServices(MSIPACKAGE *package)
static UINT ACTION_ScheduleReboot(MSIPACKAGE *package)
static UINT ACTION_LaunchConditions(MSIPACKAGE *package)
static UINT ITERATE_LaunchConditions(MSIRECORD *row, LPVOID param)
static UINT ACTION_BindImage(MSIPACKAGE *package)
static UINT ITERATE_WriteEnvironmentString(MSIRECORD *rec, LPVOID param)
static UINT ACTION_IsolateComponents(MSIPACKAGE *package)
UINT msi_parse_command_line(MSIPACKAGE *package, LPCWSTR szCommandLine, BOOL preserve_case)
static UINT ACTION_StartServices(MSIPACKAGE *package)
static UINT add_feature_component(MSIFEATURE *feature, MSICOMPONENT *comp)
static UINT execute_script(MSIPACKAGE *package, UINT script)
static void bind_image(MSIPACKAGE *package, const char *filename, const char *path)
static UINT ITERATE_RemoveRegistryValuesOnInstall(MSIRECORD *row, LPVOID param)
static INT ui_actionstart(MSIPACKAGE *package, LPCWSTR action, LPCWSTR description, LPCWSTR template)
MSICOMPONENT * msi_get_loaded_component(MSIPACKAGE *package, const WCHAR *Component)
static UINT calculate_file_cost(MSIPACKAGE *package)
static UINT ITERATE_RemoveIniValuesOnUninstall(MSIRECORD *row, LPVOID param)
static UINT ITERATE_RemoveODBCTranslator(MSIRECORD *rec, LPVOID param)
UINT msi_load_all_features(MSIPACKAGE *package)
static UINT ACTION_SelfUnregModules(MSIPACKAGE *package)
static UINT publish_upgrade_code(MSIPACKAGE *package)
static UINT ACTION_ResolveSource(MSIPACKAGE *package)
static WCHAR * join_multi_string_values(enum join_op op, WCHAR **old, DWORD old_count, WCHAR **new, DWORD new_count, DWORD *size)
static UINT ITERATE_PublishIcon(MSIRECORD *row, LPVOID param)
static UINT ITERATE_CreateShortcuts(MSIRECORD *row, LPVOID param)
static UINT publish_sourcelist(MSIPACKAGE *package, HKEY hkey)
static UINT get_shared_dlls_count(MSICOMPONENT *comp)
static WCHAR * create_temp_dir(MSIDATABASE *db)
static UINT ACTION_SelfRegModules(MSIPACKAGE *package)
static UINT ITERATE_RemoveShortcuts(MSIRECORD *row, LPVOID param)
void msi_resolve_target_folder(MSIPACKAGE *package, const WCHAR *name, BOOL load_prop)
static UINT ITERATE_RemoveEnvironmentString(MSIRECORD *rec, LPVOID param)
#define COMPONENT_PROGRESS_VALUE
static UINT ACTION_UnpublishProduct(MSIPACKAGE *package)
const WCHAR * msi_get_command_line_option(const WCHAR *cmd, const WCHAR *option, UINT *len)
WCHAR * msi_build_icon_path(MSIPACKAGE *package, const WCHAR *icon_name)
static UINT load_all_patches(MSIPACKAGE *package)
static UINT ACTION_SetODBCFolders(MSIPACKAGE *package)
static const WCHAR * get_root_key(MSIPACKAGE *package, INT root, HKEY *root_key)
static UINT ACTION_RemoveEnvironmentStrings(MSIPACKAGE *package)
static UINT ACTION_HandleCustomAction(MSIPACKAGE *package, LPCWSTR action)
static UINT ACTION_RegisterUser(MSIPACKAGE *package)
static UINT ACTION_CreateFolders(MSIPACKAGE *package)
WCHAR *WINAPIV msi_build_directory_name(DWORD count,...)
static void get_client_counts(MSIPACKAGE *package)
static UINT unpublish_feature(MSIPACKAGE *package, MSIFEATURE *feature)
static WCHAR * build_full_keypath(MSIPACKAGE *package, MSICOMPONENT *comp)
static UINT ACTION_RemoveRegistryValues(MSIPACKAGE *package)
static void start_dummy_thread(struct dummy_thread *info)
static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param)
static UINT ITERATE_DeleteService(MSIRECORD *rec, LPVOID param)
static WCHAR * get_install_location(MSIPACKAGE *package)
INSTALLSTATE msi_get_feature_action(MSIPACKAGE *package, MSIFEATURE *feature)
MSIFILE * msi_get_loaded_file(MSIPACKAGE *package, const WCHAR *key)
static UINT publish_install_properties(MSIPACKAGE *package, HKEY hkey)
static UINT ACTION_PublishProduct(MSIPACKAGE *package)
static UINT find_feature_children(MSIRECORD *row, LPVOID param)
static UINT load_all_folders(MSIPACKAGE *package)
static UINT ACTION_DeleteServices(MSIPACKAGE *package)
static ULONGLONG get_volume_space_required(MSIPACKAGE *package)
static UINT ACTION_CostInitialize(MSIPACKAGE *package)
static LPWSTR resolve_keypath(MSIPACKAGE *package, MSICOMPONENT *cmp)
UINT msi_schedule_action(MSIPACKAGE *package, UINT script, const WCHAR *action)
void ACTION_FinishCustomActions(const MSIPACKAGE *package)
UINT ACTION_CustomAction(MSIPACKAGE *package, const WCHAR *action)
INT ACTION_ShowDialog(MSIPACKAGE *package, const WCHAR *dialog)
void msi_dialog_check_messages(HANDLE handle)
BOOL msi_create_full_path(MSIPACKAGE *package, const WCHAR *path)
BOOL msi_remove_directory(MSIPACKAGE *package, const WCHAR *path)
HANDLE msi_create_file(MSIPACKAGE *package, const WCHAR *filename, DWORD access, DWORD sharing, DWORD creation, DWORD flags)
UINT ACTION_InstallFiles(MSIPACKAGE *package)
UINT ACTION_RemoveFiles(MSIPACKAGE *package)
UINT msi_patch_assembly(MSIPACKAGE *package, MSIASSEMBLY *assembly, MSIFILEPATCH *patch)
BOOL msi_delete_file(MSIPACKAGE *package, const WCHAR *filename)
WCHAR * msi_resolve_file_source(MSIPACKAGE *package, MSIFILE *file)
void msi_reduce_to_long_filename(WCHAR *filename)
VS_FIXEDFILEINFO * msi_get_disk_file_version(MSIPACKAGE *package, const WCHAR *filename)
UINT ACTION_PatchFiles(MSIPACKAGE *package)
DWORD msi_get_file_attributes(MSIPACKAGE *package, const WCHAR *path)
UINT ACTION_DuplicateFiles(MSIPACKAGE *package)
DWORD msi_get_disk_file_size(MSIPACKAGE *package, const WCHAR *filename)
UINT ACTION_MoveFiles(MSIPACKAGE *package)
UINT ACTION_RemoveDuplicateFiles(MSIPACKAGE *package)
WCHAR * msi_get_font_file_version(MSIPACKAGE *package, const WCHAR *filename)
UINT ACTION_UnregisterFonts(MSIPACKAGE *package)
UINT ACTION_RegisterFonts(MSIPACKAGE *package)
int msiobj_release(MSIOBJECTHDR *info)
const WCHAR * msi_get_target_folder(MSIPACKAGE *package, const WCHAR *name)
UINT WINAPI MsiQueryComponentStateW(LPCWSTR szProductCode, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, LPCWSTR szComponent, INSTALLSTATE *pdwState)
UINT msi_locate_product(LPCWSTR szProduct, MSIINSTALLCONTEXT *context)
INSTALLSTATE WINAPI MsiQueryFeatureStateW(LPCWSTR szProduct, LPCWSTR szFeature)
#define IDS_TEMP_INSTALLFILES
#define IDS_TEMP_REMOVEEXISTINGPRODUCTS
#define IDS_DESC_PATCHFILES
#define IDS_TEMP_INSTALLSFPCATALOGFILE
#define IDS_DESC_REMOVEODBC
#define IDS_DESC_WRITEINIVALUES
#define IDS_DESC_SETODBCFOLDERS
#define IDS_TEMP_DUPLICATEFILES
#define IDS_DESC_CREATESHORTCUTS
#define IDS_DESC_REGISTEREXTENSIONINFO
#define IDS_DESC_WRITEENVIRONMENTSTRINGS
#define IDS_TEMP_SELFUNREGMODULES
#define IDS_TEMP_REGISTERCOMPLUS
#define MSIERR_INSERTDISK
#define IDS_TEMP_SELFREGMODULES
#define IDS_DESC_REGISTERFONTS
#define IDS_DESC_UNREGISTERCOMPLUS
#define IDS_DESC_STOPSERVICES
#define IDS_DESC_SELFREGMODULES
#define IDS_DESC_PUBLISHPRODUCT
#define IDS_DESC_INSTALLODBC
#define IDS_DESC_REGISTERMIMEINFO
#define IDS_TEMP_REMOVEFILES
#define IDS_DESC_ALLOCATEREGISTRYSPACE
#define IDS_DESC_REMOVEINIVALUES
#define IDS_TEMP_UNPUBLISHFEATURES
#define IDS_DESC_UNREGISTERTYPELIBRARIES
#define IDS_TEMP_UNPUBLISHCOMPONENTS
#define IDS_DESC_LAUNCHCONDITIONS
#define IDS_DESC_APPSEARCH
#define IDS_DESC_RMCCPSEARCH
#define IDS_TEMP_DELETESERVICES
#define IDS_TEMP_REMOVESHORTCUTS
#define IDS_DESC_MOVEFILES
#define IDS_DESC_REMOVEREGISTRYVALUES
#define IDS_DESC_UNPUBLISHPRODUCT
#define IDS_DESC_FILECOST
#define MSIERR_INFO_ACTIONENDED
#define IDS_DESC_MSIPUBLISHASSEMBLIES
#define IDS_DESC_REGISTERCLASSINFO
#define IDS_TEMP_REMOVEINIVALUES
#define IDS_TEMP_REGISTERFONTS
#define IDS_DESC_REGISTERPRODUCT
#define IDS_DESC_STARTSERVICES
#define IDS_TEMP_UNREGISTERTYPELIBRARIES
#define IDS_DESC_COSTFINALIZE
#define IDS_DESC_UNREGISTERMIMEINFO
#define IDS_DESC_BINDIMAGE
#define IDS_TEMP_WRITEENVIRONMENTSTRINGS
#define IDS_DESC_REMOVEDUPLICATEFILES
#define IDS_TEMP_UNREGISTERCOMPLUS
#define IDS_DESC_UNPUBLISHCOMPONENTS
#define IDS_TEMP_REMOVEDUPLICATEFILES
#define IDS_TEMP_MSIUNPUBLISHASSEMBLIES
#define IDS_DESC_REGISTERCOMPLUS
#define IDS_DESC_MIGRATEFEATURESTATES
#define IDS_DESC_REMOVEEXISTINGPRODUCTS
#define IDS_TEMP_PUBLISHCOMPONENTS
#define IDS_TEMP_BINDIMAGE
#define IDS_TEMP_UNREGISTERCLASSINFO
#define IDS_TEMP_STOPSERVICES
#define IDS_TEMP_INSTALLSERVICES
#define IDS_TEMP_UNREGISTEREXTENSIONINFO
#define IDS_DESC_INSTALLSERVICES
#define IDS_TEMP_MOVEFILES
#define IDS_TEMP_REMOVEREGISTRYVALUES
#define IDS_DESC_UNREGISTERPROGIDINFO
#define IDS_DESC_UNPUBLISHFEATURES
#define IDS_DESC_MSIUNPUBLISHASSEMBLIES
#define IDS_DESC_PUBLISHCOMPONENTS
#define IDS_TEMP_FINDRELATEDPRODUCTS
#define IDS_TEMP_CREATESHORTCUTS
#define IDS_DESC_WRITEREGISTRYVALUES
#define IDS_TEMP_REGISTERCLASSINFO
#define IDS_TEMP_PATCHFILES
#define IDS_DESC_INSTALLSFPCATALOGFILE
#define IDS_TEMP_UNREGISTERFONTS
#define IDS_DESC_UNREGISTERCLASSINFO
#define IDS_TEMP_REGISTERTYPELIBRARIES
#define IDS_DESC_PUBLISHFEATURES
#define IDS_DESC_REMOVEFOLDERS
#define IDS_TEMP_WRITEINIVALUES
#define IDS_TEMP_MSIPUBLISHASSEMBLIES
#define IDS_TEMP_REGISTERPROGIDINFO
#define IDS_DESC_DUPLICATEFILES
#define IDS_DESC_CCPSEARCH
#define IDS_DESC_SELFUNREGMODULES
#define IDS_DESC_INSTALLFILES
#define IDS_DESC_INSTALLADMINPACKAGE
#define IDS_TEMP_UNREGISTERPROGIDINFO
#define IDS_DESC_REGISTERTYPELIBRARIES
#define IDS_TEMP_REMOVEFOLDERS
#define IDS_DESC_CREATEFOLDERS
#define IDS_TEMP_CREATEFOLDERS
#define IDS_TEMP_WRITEREGISTRYVALUES
#define IDS_TEMP_STARTSERVICES
#define IDS_TEMP_ALLOCATEREGISTRYSPACE
#define IDS_DESC_UNREGISTEREXTENSIONINFO
#define MSIERR_INFO_LOGGINGSTART
#define IDS_DESC_REGISTERUSER
#define IDS_DESC_FINDRELATEDPRODUCTS
#define IDS_DESC_REMOVESHORTCUTS
#define MSIERR_INFO_ACTIONSTART
#define IDS_DESC_DELETESERVICES
#define IDS_DESC_REMOVEFILES
#define IDS_DESC_UNREGISTERFONTS
#define IDS_TEMP_INSTALLADMINPACKAGE
#define IDS_TEMP_APPSEARCH
#define IDS_TEMP_REMOVEENVIRONMENTSTRINGS
#define IDS_DESC_REGISTERPROGIDINFO
#define IDS_DESC_COSTINITIALIZE
#define IDS_TEMP_MIGRATEFEATURESTATES
#define IDS_TEMP_REGISTERMIMEINFO
#define IDS_DESC_INSTALLVALIDATE
#define IDS_TEMP_PUBLISHFEATURES
#define IDS_DESC_PROCESSCOMPONENTS
#define IDS_DESC_REMOVEENVIRONMENTSTRINGS
#define IDS_TEMP_UNREGISTERMIMEINFO
UINT WINAPI MsiSourceListSetInfoW(const WCHAR *szProduct, const WCHAR *szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, const WCHAR *szProperty, const WCHAR *szValue)
UINT WINAPI MsiSourceListAddMediaDiskW(const WCHAR *szProduct, const WCHAR *szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwDiskId, const WCHAR *szVolumeLabel, const WCHAR *szDiskPrompt)
UINT WINAPI MsiSourceListGetInfoW(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCWSTR szProperty, LPWSTR szValue, LPDWORD pcchValue)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT WINAPI RegisterTypeLib(ITypeLib *ptlib, const WCHAR *szFullPath, const WCHAR *szHelpDir)
HRESULT WINAPI LoadTypeLibEx(LPCOLESTR szFile, REGKIND regkind, ITypeLib **pptLib)
HRESULT WINAPI UnRegisterTypeLib(REFGUID libid, WORD wVerMajor, WORD wVerMinor, LCID lcid, SYSKIND syskind)
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
#define check(expected, result)
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
GLuint GLuint GLsizei GLenum type
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLdouble GLdouble GLdouble GLdouble q
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLenum GLenum GLvoid * values
GLuint GLint GLboolean GLint GLenum access
GLboolean GLboolean GLboolean GLboolean a
GLuint GLenum GLsizei GLsizei GLint GLint GLboolean packed
GLsizeiptr const GLvoid GLenum usage
GLsizei const GLuint * paths
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 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
static LPSTR strdupWtoA(LPCWSTR str)
BOOL WINAPI BindImage(PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath)
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static const WCHAR desc[]
static const struct access_res create[16]
#define cmp(status, error)
static APTTYPEQUALIFIER * qualifier
static CHAR filenameA[MAX_PATH]
static OLECHAR OLECHAR *static SYSKIND
INTERNETFEATURELIST feature
struct @1673::@1674 driver
UINT ACTION_MsiUnpublishAssemblies(MSIPACKAGE *package)
MSIASSEMBLY * msi_load_assembly(MSIPACKAGE *package, MSICOMPONENT *comp)
UINT ACTION_MsiPublishAssemblies(MSIPACKAGE *package)
UINT msi_install_assembly(MSIPACKAGE *package, MSICOMPONENT *comp)
UINT ACTION_UnregisterMIMEInfo(MSIPACKAGE *package)
UINT ACTION_UnregisterExtensionInfo(MSIPACKAGE *package)
UINT ACTION_RegisterMIMEInfo(MSIPACKAGE *package)
UINT ACTION_RegisterExtensionInfo(MSIPACKAGE *package)
UINT ACTION_UnregisterClassInfo(MSIPACKAGE *package)
UINT ACTION_RegisterClassInfo(MSIPACKAGE *package)
UINT ACTION_UnregisterProgIdInfo(MSIPACKAGE *package)
UINT ACTION_RegisterProgIdInfo(MSIPACKAGE *package)
static const WCHAR INSTALLPROPERTY_PACKAGENAMEW[]
static const WCHAR INSTALLPROPERTY_MEDIAPACKAGEPATHW[]
static const WCHAR INSTALLPROPERTY_AUTHORIZED_LUA_APPW[]
static const WCHAR INSTALLPROPERTY_PACKAGECODEW[]
struct _MSIFILEHASHINFO MSIFILEHASHINFO
static const WCHAR INSTALLPROPERTY_PRODUCTIDW[]
static const WCHAR INSTALLPROPERTY_VERSIONMAJORW[]
static const WCHAR INSTALLPROPERTY_DISKPROMPTW[]
static const WCHAR INSTALLPROPERTY_LOCALPACKAGEW[]
static const WCHAR INSTALLPROPERTY_PRODUCTNAMEW[]
static const WCHAR INSTALLPROPERTY_LASTUSEDSOURCEW[]
@ INSTALLMESSAGE_ACTIONSTART
@ INSTALLMESSAGE_PROGRESS
@ INSTALLMESSAGE_ACTIONDATA
@ INSTALLMESSAGE_COMMONDATA
@ INSTALLMESSAGE_INSTALLSTART
@ INSTALLMESSAGE_INSTALLEND
static const WCHAR INSTALLPROPERTY_PRODUCTICONW[]
@ INSTALLSTATE_INVALIDARG
@ INSTALLSTATE_ADVERTISED
@ MSIINSTALLCONTEXT_MACHINE
@ MSIINSTALLCONTEXT_USERUNMANAGED
@ MSIINSTALLCONTEXT_USERMANAGED
static const WCHAR INSTALLPROPERTY_INSTALLDATEW[]
static const WCHAR INSTALLPROPERTY_INSTANCETYPEW[]
static const WCHAR INSTALLPROPERTY_VERSIONW[]
static const WCHAR INSTALLPROPERTY_VERSIONMINORW[]
static const WCHAR INSTALLPROPERTY_LANGUAGEW[]
@ msidbComponentAttributes64bit
@ msidbComponentAttributesSharedDllRefCount
@ msidbComponentAttributesOptional
@ msidbComponentAttributesRegistryKeyPath
@ msidbComponentAttributesPermanent
@ msidbComponentAttributesSourceOnly
@ msidbComponentAttributesODBCDataSource
@ msidbPatchAttributesNonVital
@ msidbUpgradeAttributesMigrateFeatures
@ msidbUpgradeAttributesOnlyDetect
@ msidbFeatureAttributesFavorAdvertise
@ msidbFeatureAttributesFollowParent
@ msidbFeatureAttributesFavorSource
@ msidbIniFileActionRemoveLine
@ msidbIniFileActionAddLine
@ msidbIniFileActionCreateLine
@ msidbFileAttributesCompressed
@ msidbFileAttributesPatchAdded
@ msidbFileAttributesNoncompressed
@ msidbODBCDataSourceRegistrationPerUser
@ msidbODBCDataSourceRegistrationPerMachine
@ msidbSumInfoSourceTypeAdminImage
@ msidbSumInfoSourceTypeCompressed
@ msidbServiceInstallErrorControlVital
@ msidbServiceControlEventStart
@ msidbServiceControlEventUninstallDelete
@ msidbServiceControlEventUninstallStop
@ msidbServiceControlEventDelete
@ msidbServiceControlEventStop
@ msidbServiceControlEventUninstallStart
int MSI_RecordGetInteger(MSIRECORD *, UINT)
UINT MSIREG_DeleteUserUpgradeCodesKey(LPCWSTR szUpgradeCode)
UINT MSIREG_DeleteUpgradeCodesKey(const WCHAR *)
UINT MSI_ViewExecute(MSIQUERY *, MSIRECORD *)
UINT MSIREG_OpenProductKey(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
#define MSI_INITIAL_MEDIA_TRANSFORM_DISKID
static const BOOL is_64bit
LONG msi_reg_set_val_dword(HKEY hkey, LPCWSTR name, DWORD val)
static int cost_from_size(int size)
BOOL squash_guid(LPCWSTR in, LPWSTR out)
UINT MSIREG_DeleteLocalClassesFeaturesKey(LPCWSTR szProductCode)
UINT msi_set_last_used_source(LPCWSTR product, LPCWSTR usersid, MSIINSTALLCONTEXT context, DWORD options, LPCWSTR value)
#define INSTALLUILEVEL_MASK
UINT msi_get_string_table_codepage(const string_table *st)
UINT ACTION_FindRelatedProducts(MSIPACKAGE *package)
UINT MSIREG_OpenUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid, HKEY *key, BOOL create)
UINT MSIREG_DeleteUninstallKey(const WCHAR *, enum platform)
void msi_reset_source_folders(MSIPACKAGE *package)
const WCHAR * msi_record_get_string(const MSIRECORD *, UINT, int *)
BOOL encode_base85_guid(GUID *, LPWSTR)
UINT MSIREG_OpenUserDataProductPatchesKey(LPCWSTR product, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
UINT MSI_RecordSetInteger(MSIRECORD *, UINT, int)
UINT MSIREG_OpenClassesUpgradeCodesKey(LPCWSTR szUpgradeCode, HKEY *key, BOOL create)
LONG msi_reg_set_val_multi_str(HKEY hkey, LPCWSTR name, LPCWSTR value)
WCHAR * msi_dup_record_field(MSIRECORD *row, INT index)
UINT msi_apply_patches(MSIPACKAGE *package)
UINT MSIREG_OpenInstallProps(LPCWSTR szProduct, MSIINSTALLCONTEXT dwContext, LPCWSTR szUserSid, HKEY *key, BOOL create)
UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid)
UINT MSIREG_DeleteClassesUpgradeCodesKey(LPCWSTR szUpgradeCode)
int msi_get_property_int(MSIDATABASE *package, LPCWSTR prop, int def)
UINT MSI_DatabaseOpenViewW(MSIDATABASE *, LPCWSTR, MSIQUERY **)
INT MSI_ProcessMessageVerbatim(MSIPACKAGE *, INSTALLMESSAGE, MSIRECORD *)
UINT MSI_RecordReadStream(MSIRECORD *, UINT, char *, LPDWORD)
UINT MSIREG_OpenUserComponentsKey(LPCWSTR szComponent, HKEY *key, BOOL create)
UINT MSIREG_OpenUninstallKey(const WCHAR *, enum platform, HKEY *, BOOL)
UINT MSIREG_DeleteUserProductKey(LPCWSTR szProduct)
MSICONDITION MSI_EvaluateConditionW(MSIPACKAGE *, LPCWSTR)
UINT msi_set_original_database_property(MSIDATABASE *, const WCHAR *)
const WCHAR * MSI_RecordGetString(const MSIRECORD *, UINT)
LONG msi_reg_set_val_str(HKEY hkey, LPCWSTR name, LPCWSTR value)
UINT WINAPIV MSI_OpenQuery(MSIDATABASE *, MSIQUERY **, LPCWSTR,...)
@ FOLDER_STATE_UNINITIALIZED
UINT MSIREG_DeleteUserDataProductKey(LPCWSTR, MSIINSTALLCONTEXT)
UINT MSIREG_OpenFeaturesKey(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
UINT MSIREG_OpenUserUpgradeCodesKey(LPCWSTR szProduct, HKEY *key, BOOL create)
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int)
MSIRECORD *WINAPIV MSI_QueryGetRecord(MSIDATABASE *db, LPCWSTR query,...)
UINT msi_get_property(MSIDATABASE *, LPCWSTR, LPWSTR, LPDWORD)
WCHAR * msi_get_package_code(MSIDATABASE *db)
UINT MSIREG_OpenUpgradeCodesKey(LPCWSTR szProduct, HKEY *key, BOOL create)
static void msi_revert_fs_redirection(MSIPACKAGE *package)
BOOL MSI_RecordIsNull(MSIRECORD *, UINT)
UINT MSIREG_DeleteLocalClassesProductKey(LPCWSTR szProductCode)
WCHAR * msi_dup_property(MSIDATABASE *db, const WCHAR *prop)
static void msi_disable_fs_redirection(MSIPACKAGE *package)
INT MSI_ProcessMessage(MSIPACKAGE *, INSTALLMESSAGE, MSIRECORD *)
WCHAR * msi_strdupW(const WCHAR *value, int len)
UINT MSIREG_DeleteUserFeaturesKey(LPCWSTR szProduct)
UINT MSI_ViewFetch(MSIQUERY *, MSIRECORD **)
UINT MSIREG_OpenUserDataPatchKey(LPCWSTR szPatch, MSIINSTALLCONTEXT dwContext, HKEY *key, BOOL create)
void msi_free_action_script(MSIPACKAGE *package, UINT script)
UINT MSIREG_OpenUserDataProductKey(LPCWSTR szProduct, MSIINSTALLCONTEXT dwContext, LPCWSTR szUserSid, HKEY *key, BOOL create)
WCHAR * msi_reg_get_val_str(HKEY hkey, const WCHAR *name)
UINT MSI_RecordSetStringW(MSIRECORD *, UINT, LPCWSTR)
MSIRECORD * MSI_CreateRecord(UINT)
UINT MSIREG_OpenUserDataFeaturesKey(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
UINT MSIREG_DeleteProductKey(LPCWSTR szProduct)
UINT MSIREG_DeleteUserDataPatchKey(LPCWSTR patch, MSIINSTALLCONTEXT context)
UINT msi_apply_transforms(MSIPACKAGE *package)
WCHAR * msi_get_error_message(MSIDATABASE *, int)
UINT MSI_IterateRecords(MSIQUERY *, LPDWORD, record_func, LPVOID)
#define SQUASHED_GUID_SIZE
void msi_adjust_privilege_properties(MSIPACKAGE *)
MSIRECORD * MSI_CloneRecord(MSIRECORD *)
DWORD msi_version_str_to_dword(LPCWSTR p)
#define FILE_ATTRIBUTE_DIRECTORY
IN ULONG IN UCHAR Condition
#define ODBC_INSTALL_COMPLETE
#define ODBC_REMOVE_SYS_DSN
const GUID IID_IPersistFile
#define IsEqualGUID(rguid1, rguid2)
#define delete_tree(r, p, s)
#define open_key(r, p, s, k)
#define delete_value(k, n)
#define delete_key(r, p, s)
static unsigned int file_size
INT replace(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], DWORD dwFlags, BOOL *doMore)
BOOL WINAPI DeleteService(SC_HANDLE hService)
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
BOOL WINAPI ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, LPWSTR lpDisplayName, LPDWORD lpcchBuffer)
SC_HANDLE WINAPI CreateServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, LPCWSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCWSTR lpBinaryPathName, LPCWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCWSTR lpDependencies, LPCWSTR lpServiceStartName, LPCWSTR lpPassword)
BOOL WINAPI StartServiceW(SC_HANDLE hService, DWORD dwNumServiceArgs, LPCWSTR *lpServiceArgVectors)
BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE hService, DWORD dwInfoLevel, LPVOID lpInfo)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
BOOL WINAPI EnumDependentServicesW(SC_HANDLE hService, DWORD dwServiceState, LPENUM_SERVICE_STATUSW lpServices, DWORD cbBufSize, LPDWORD pcbBytesNeeded, LPDWORD lpServicesReturned)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
_CRTIMP wchar_t *__cdecl wcsupr(_Inout_z_ wchar_t *_Str)
_Check_return_ _CRTIMP wchar_t *__cdecl wcsdup(_In_z_ const wchar_t *_Str)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
unsigned int hasLocalFeature
unsigned int hasAdvertisedFeature
unsigned int hasSourceFeature
INSTALLSTATE ActionRequest
UINT action_progress_increment
struct list sourcelist_media
MSIINSTALLCONTEXT Context
LPWSTR * script_actions[SCRIPT_MAX]
unsigned char need_reboot_at_end
unsigned char need_rollback
int script_actions_count[SCRIPT_MAX]
struct list sourcelist_info
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define INVALID_FILE_ATTRIBUTES
static const WCHAR props[]
BOOL WINAPI SQLConfigDataSourceW(HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes)
BOOL WINAPI SQLInstallDriverExW(LPCWSTR lpszDriver, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
BOOL WINAPI SQLRemoveDriverW(LPCWSTR drivername, BOOL remove_dsn, LPDWORD usage_count)
BOOL WINAPI SQLRemoveTranslatorW(const WCHAR *translator, DWORD *usage_count)
BOOL WINAPI SQLInstallTranslatorExW(LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
DWORD WINAPI GetLastError(void)
#define LOAD_LIBRARY_AS_DATAFILE
#define ERROR_INVALID_COMMAND_LINE
#define ERROR_INSTALL_FAILURE
#define ERROR_INSTALL_USEREXIT
#define ERROR_SERVICE_ALREADY_RUNNING
#define ERROR_INVALID_HANDLE_STATE
#define ERROR_INSTALL_PACKAGE_REJECTED
#define ERROR_SUCCESS_REBOOT_REQUIRED
#define ERROR_INSTALL_ALREADY_RUNNING
#define ERROR_SERVICE_EXISTS
#define ERROR_FUNCTION_FAILED
#define ERROR_INSTALL_SUSPEND
#define ERROR_FUNCTION_NOT_CALLED
#define ERROR_INVALID_DATA
static const char appdata[]
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define HKEY_CLASSES_ROOT
#define SERVICE_QUERY_STATUS
#define SERVICE_CONFIG_DESCRIPTION
#define SC_MANAGER_CONNECT
#define SERVICE_START_PENDING
#define SERVICE_CONTROL_STOP
#define SERVICE_ENUMERATE_DEPENDENTS
#define SERVICES_ACTIVE_DATABASEW
#define SC_MANAGER_ALL_ACCESS
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define IS_INTRESOURCE(i)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
LPWSTR WINAPI CharUpperW(_Inout_ LPWSTR)
#define SERVICE_BOOT_START
#define SERVICE_SYSTEM_START