111 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
112 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
113 0xff,0x00,0xff,0xff,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,
114 0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0xff,0xff,0xff,0x16,0xff,0x17,
115 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
116 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0xff,0x34,0x35,0x36,
117 0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,
118 0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0xff,0x53,0x54,0xff,
122 "!$%&'()*+,-.0123456789=?@ABCDEFGHIJKLMNO" 123 "PQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwx" 140 for(
i=0;
i<20;
i++ )
167 unsigned int x, *
p,
i;
169 p = (
unsigned int*)
guid;
305 WCHAR keypath[0x200];
313 lstrcpyW(keypath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");
349 lstrcpyW(keypath,
L"Software\\Classes\\Installer\\Products\\");
355 lstrcpyW( keypath,
L"Software\\Microsoft\\Installer\\Products\\" );
364 ERR(
"Failed to retrieve user SID\n");
370 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\%s\\Installer\\Products\\%s",
371 szUserSid, squashed_pc );
385 lstrcpyW( keypath,
L"Software\\Microsoft\\Installer\\Products\\" );
397 lstrcpyW( keypath,
L"Software\\Microsoft\\Installer\\Patches\\" );
416 lstrcpyW(keypath,
L"Software\\Classes\\Installer\\Features\\");
422 lstrcpyW(keypath,
L"Software\\Microsoft\\Installer\\Features\\");
431 ERR(
"Failed to retrieve user SID\n");
437 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\%s\\Installer\\Features\\%s",
438 szUserSid, squashed_pc );
452 lstrcpyW( keypath,
L"Software\\Microsoft\\Installer\\Features\\" );
465 lstrcpyW(keypath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Features\\");
475 static const WCHAR fmtW[] =
476 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Products\\%s\\Features";
493 ERR(
"Failed to retrieve user SID\n");
514 lstrcpyW(keypath,
L"Software\\Microsoft\\Installer\\Components\\");
521 lstrcpyW(keypath,
L"Software\\Classes\\Installer\\Components\\");
528 static const WCHAR fmtW[] =
529 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Components\\%s";
540 ERR(
"Failed to retrieve user SID\n");
554 static const WCHAR fmtW[] =
555 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Components";
568 ERR(
"Failed to retrieve user SID\n");
584 static const WCHAR fmtW[] =
585 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Products\\%s";
600 ERR(
"Failed to retrieve user SID\n");
612 static const WCHAR fmtW[] =
613 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Patches\\%s";
626 ERR(
"Failed to retrieve user SID\n");
638 static const WCHAR fmtW[] =
639 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Patches";
654 ERR(
"Failed to retrieve user SID\n");
668 static const WCHAR fmtW[] =
669 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Products\\%s\\Patches";
682 ERR(
"Failed to retrieve user SID\n");
694 static const WCHAR fmtW[] =
695 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Products\\%s\\InstallProperties";
710 ERR(
"Failed to retrieve user SID\n");
722 static const WCHAR fmtW[] =
723 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\%s\\Products";
738 ERR(
"Failed to retrieve user SID\n");
776 lstrcpyW( keypath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Patches\\" );
791 lstrcpyW( keypath,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UpgradeCodes\\" );
805 lstrcpyW(keypath,
L"Software\\Microsoft\\Installer\\UpgradeCodes\\");
836 lstrcpyW(keypath,
L"Software\\Microsoft\\Installer\\UpgradeCodes\\");
883 lstrcpyW(keypath,
L"Software\\Classes\\Installer\\UpgradeCodes\\");
932 GUID product, component;
935 szFeature, szComponent, pUsed);
942 if (!(
p =
wcschr( &szDescriptor[20],
'>' )))
943 p =
wcschr( &szDescriptor[20],
'<' );
947 len = (
p - &szDescriptor[20]);
975 len =
p - szDescriptor + 1;
976 if (*
p ==
'>')
len += 20;
979 if (pUsed) *pUsed =
len;
994 szFeature, szComponent, pUsed);
997 if( szDescriptor && !
str )
1080 HKEY hkeyProduct = 0;
1130 TRACE(
"%s, %#lx, %lu, %p, %p, %p, %p\n",
debugstr_a(user_sid),
ctx,
index,
guid, installed_ctx,
1156 DWORD i = 0, len_component;
1158 HKEY key_components;
1161 L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components",
1162 0,
access, &key_components ))
1202 DWORD i = 0,
j = 0, len_component, len_user;
1204 HKEY key_users, key_components;
1248 if (*sid_len < len_user + 1)
1250 *sid_len = len_user + 1;
1255 *sid_len = len_user;
1260 if (installed_ctx) *installed_ctx =
ctx;
1280 installed_ctx,
sid, sid_len );
1286 installed_ctx,
sid, sid_len );
1306 static DWORD last_index;
1308 TRACE(
"%s, %#lx, %lu, %p, %p, %p, %p\n",
debugstr_w(user_sid),
ctx,
index,
guid, installed_ctx,
1317 if (!
index) last_index = 0;
1363 if (!szComponent || !*szComponent || !szProduct)
1398 FIXME(
"%s, %s, %#lx, %lu, %p, %p, %p, %p\n",
debugstr_a(component),
debugstr_a(usersid),
ctx,
index,
1399 installed_product, installed_ctx,
sid, sid_len );
1407 FIXME(
"%s, %s, %#lx, %lu, %p, %p, %p, %p\n",
debugstr_w(component),
debugstr_w(usersid),
ctx,
index,
1408 installed_product, installed_ctx,
sid, sid_len );
1415 DWORD name_sz, val_sz, name_max, val_max,
type, ofs;
1420 TRACE(
"%s, %lu, %p, %p, %p, %p\n",
debugstr_w(szComponent), iIndex, lpQualBuf, pcchQual, lpAppBuf, pcchAppBuf );
1455 ERR(
"component data has wrong type (%lu)\n",
type );
1460 if (name_sz + 1 >= name_max)
1469 if (val_sz > val_max)
1471 val_max = val_sz +
sizeof (
WCHAR);
1478 ERR(
"should be enough data, but isn't %lu %lu\n", name_sz, val_sz );
1506 DWORD *pcchQualifierBuf,
char *lpApplicationDataBuf,
1507 DWORD *pcchApplicationDataBuf )
1513 TRACE(
"%s, %lu, %p, %p, %p, %p\n",
debugstr_a(szComponent), iIndex, lpQualifierBuf, pcchQualifierBuf,
1514 lpApplicationDataBuf, pcchApplicationDataBuf );
1517 if (szComponent && !comp)
1521 qual.
str.
a = lpQualifierBuf;
1524 appdata.str.a = lpApplicationDataBuf;
1527 &qual, pcchQualifierBuf, &
appdata, pcchApplicationDataBuf );
1536 DWORD *pcchQualifierBuf,
WCHAR *lpApplicationDataBuf,
1537 DWORD *pcchApplicationDataBuf )
1541 TRACE(
"%s, %lu, %p, %p, %p, %p\n",
debugstr_w(szComponent), iIndex, lpQualifierBuf, pcchQualifierBuf,
1542 lpApplicationDataBuf, pcchApplicationDataBuf );
1545 qual.
str.
w = lpQualifierBuf;
1548 appdata.str.w = lpApplicationDataBuf;
1558 WCHAR *lpProductBuf )
1567 if (
NULL == szUpgradeCode)
1569 if (
NULL == lpProductBuf)
1589 char *lpProductBuf )
1599 szwUpgradeCode =
strdupAtoW( szUpgradeCode );
1600 if( !szwUpgradeCode )
1605 iProductIndex, productW );
1619 DWORD dwIndex,
char *szPatchCode,
char *szTargetProductCode,
1621 DWORD *pcchTargetUserSid )
1628 TRACE(
"%s, %s, %#lx, %lu, %lu, %p, %p, %p, %p, %p\n",
debugstr_a(szProductCode),
debugstr_a(szUserSid),
1629 dwContext, dwFilter, dwIndex, szPatchCode, szTargetProductCode, pdwTargetProductContext, szTargetUserSid,
1630 pcchTargetUserSid );
1632 if (szTargetUserSid && !pcchTargetUserSid)
1635 if (szProductCode) prodcode =
strdupAtoW(szProductCode);
1636 if (szUserSid) usersid =
strdupAtoW(szUserSid);
1639 patch, targprod, pdwTargetProductContext,
1649 if (!szTargetUserSid)
1651 if (pcchTargetUserSid)
1652 *pcchTargetUserSid =
len;
1665 patch, targprod, pdwTargetProductContext,
1674 if (*pcchTargetUserSid <
len + 1)
1677 *pcchTargetUserSid =
len *
sizeof(
WCHAR);
1680 *pcchTargetUserSid =
len;
1695 HKEY prod, hkey = 0;
1703 usersid, &prod,
FALSE);
1742 HKEY prod, patchkey = 0;
1743 HKEY localprod = 0, localpatch = 0;
1884 lstrcpynW(targetsid, usersid, *sidsize);
1893 *sidsize *=
sizeof(
WCHAR);
1923 dwIndex,
idx, szPatchCode,
1924 szTargetProductCode,
1925 pdwTargetProductContext, szTargetUserSid,
1926 pcchTargetUserSid, szTransforms);
1935 dwIndex,
idx, szPatchCode,
1936 szTargetProductCode,
1937 pdwTargetProductContext, szTargetUserSid,
1938 pcchTargetUserSid, szTransforms);
1947 dwIndex,
idx, szPatchCode,
1948 szTargetProductCode,
1949 pdwTargetProductContext, szTargetUserSid,
1950 pcchTargetUserSid, szTransforms);
1966 DWORD *pcchTargetUserSid )
1972 static DWORD last_index;
1974 TRACE(
"%s, %s, %#lx, %lu, %lu, %p, %p, %p, %p, %p)\n",
debugstr_w(szProductCode),
debugstr_w(szUserSid),
1975 dwContext, dwFilter, dwIndex, szPatchCode, szTargetProductCode, pdwTargetProductContext, szTargetUserSid,
1976 pcchTargetUserSid );
1978 if (!szProductCode || !
squash_guid( szProductCode, squashed_pc ))
1981 if (szUserSid && !
wcscmp( szUserSid,
L"S-1-5-18" ))
1994 if (dwIndex && dwIndex - last_index != 1)
2001 dwIndex, &
idx, szPatchCode, szTargetProductCode,
2002 pdwTargetProductContext, szTargetUserSid,
2003 pcchTargetUserSid,
NULL);
2006 last_index = dwIndex;
2017 DWORD *pcchTransformsBuf )
2023 TRACE(
"%s, %lu, %p, %p, %p\n",
debugstr_a(szProduct), iPatchIndex, lpPatchBuf, lpTransformsBuf,
2024 pcchTransformsBuf );
2026 if (!szProduct || !lpPatchBuf || !lpTransformsBuf || !pcchTransformsBuf)
2033 len = *pcchTransformsBuf;
2054 lpTransformsBuf[*pcchTransformsBuf - 1] =
'\0';
2055 *pcchTransformsBuf =
len * 2;
2058 *pcchTransformsBuf =
strlen( lpTransformsBuf );
2071 DWORD *pcchTransformsBuf )
2078 TRACE(
"%s, %lu, %p, %p, %p)\n",
debugstr_w(szProduct), iPatchIndex, lpPatchBuf, lpTransformsBuf,
2079 pcchTransformsBuf );
2081 if (!szProduct || !
squash_guid( szProduct, squashed_pc ))
2084 if (!lpPatchBuf || !lpTransformsBuf || !pcchTransformsBuf)
2103 lstrcpynW(lpTransformsBuf, transforms, *pcchTransformsBuf);
2104 if (*pcchTransformsBuf <=
lstrlenW(transforms))
2107 *pcchTransformsBuf =
lstrlenW(transforms);
2110 *pcchTransformsBuf =
lstrlenW(transforms);
2124 TRACE(
"%s, %s, %#lx, %lu, %p, %p, %p, %p\n",
debugstr_a(product),
debugstr_a(usersid),
ctx,
index,
2125 installed_product, installed_ctx,
sid, sid_len );
2129 if (usersid && !(usersidW =
strdupAtoW( usersid )))
2141 installed_ctx, sidW, sid_len );
2185 if (sid_len && *sid_len < 1)
2192 if (installed_product)
unsquash_guid( product, installed_product );
2210 const WCHAR *subkey;
2212 DWORD i = 0,
j = 0, len_product, len_user;
2214 HKEY key_users, key_products;
2218 subkey =
L"\\Installer\\Products";
2224 subkey =
L"\\Software\\Microsoft\\Installer\\Products";
2269 if (sid_len && *sid_len <= len_user)
2271 *sid_len = len_user;
2276 if (installed_product)
unsquash_guid( product, installed_product );
2277 if (installed_ctx) *installed_ctx =
ctx;
2281 *sid_len = len_user;
2311 idx, installed_product, installed_ctx,
sid, sid_len );
2317 idx, installed_product, installed_ctx,
sid, sid_len );
2332 static DWORD last_index;
2334 TRACE(
"%s, %s, %#lx, %lu, %p, %p, %p, %p\n",
debugstr_w(product),
debugstr_w(usersid),
ctx,
index,
2335 installed_product, installed_ctx,
sid, sid_len );
2343 if (!
index) last_index = 0;
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LPWSTR msi_reg_get_val_str(HKEY hkey, LPCWSTR name)
LONG msi_reg_set_val_str(HKEY hkey, LPCWSTR name, LPCWSTR value)
LONG msi_reg_set_val_multi_str(HKEY hkey, LPCWSTR name, LPCWSTR value)
#define ERROR_INVALID_PARAMETER
UINT WINAPI MsiEnumComponentsA(DWORD index, char *lpguid)
INTERNETFEATURELIST feature
LONG msi_reg_set_subkey_val(HKEY hkey, LPCWSTR path, LPCWSTR name, LPCWSTR val)
UINT WINAPI MsiDecomposeDescriptorW(LPCWSTR szDescriptor, LPWSTR szProduct, LPWSTR szFeature, LPWSTR szComponent, LPDWORD pUsed)
BOOL unsquash_guid(LPCWSTR in, LPWSTR out)
UINT WINAPI MsiEnumProductsA(DWORD index, char *lpguid)
enum tagMSIINSTALLCONTEXT MSIINSTALLCONTEXT
#define WideCharToMultiByte
WINE_DEFAULT_DEBUG_CHANNEL(msi)
#define ERROR_NO_MORE_ITEMS
ACPI_SIZE strlen(const char *String)
static UINT msi_check_product_patches(LPCWSTR prodcode, LPCWSTR usersid, MSIINSTALLCONTEXT context, DWORD filter, DWORD index, DWORD *idx, LPWSTR patch, LPWSTR targetprod, MSIINSTALLCONTEXT *targetctx, LPWSTR targetsid, DWORD *sidsize, LPWSTR *transforms)
GLdouble GLdouble GLdouble r
UINT WINAPI MsiEnumComponentsW(DWORD index, WCHAR *lpguid)
UINT WINAPI MsiEnumRelatedProductsA(const char *szUpgradeCode, DWORD dwReserved, DWORD iProductIndex, char *lpProductBuf)
#define HKEY_CURRENT_USER
DWORD WINAPI GetLastError(VOID)
UINT WINAPI MsiDecomposeDescriptorA(LPCSTR szDescriptor, LPSTR szProduct, LPSTR szFeature, LPSTR szComponent, LPDWORD pUsed)
GLint GLint GLint GLint GLint x
UINT MSIREG_OpenClassesUpgradeCodesKey(LPCWSTR szUpgradeCode, HKEY *key, BOOL create)
UINT MSIREG_OpenUserComponentsKey(LPCWSTR szComponent, HKEY *key, BOOL create)
static void msi_free(void *mem)
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
static UINT fetch_user_component(const WCHAR *usersid, DWORD ctx, DWORD index, DWORD *idx, WCHAR guid[39], MSIINSTALLCONTEXT *installed_ctx, LPWSTR sid, LPDWORD sid_len)
UINT MSIREG_DeleteUpgradeCodesKey(const WCHAR *code)
BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR *StringSid)
UINT msi_strcpy_to_awstring(const WCHAR *str, int len, awstring *awbuf, DWORD *sz)
LONG msi_reg_set_val_dword(HKEY hkey, LPCWSTR name, DWORD val)
UINT MSIREG_OpenUserDataPatchKey(LPCWSTR szPatch, MSIINSTALLCONTEXT dwContext, HKEY *key, BOOL create)
UINT MSIREG_DeleteLocalClassesFeaturesKey(LPCWSTR szProductCode)
UINT WINAPI MsiEnumPatchesW(const WCHAR *szProduct, DWORD iPatchIndex, WCHAR *lpPatchBuf, WCHAR *lpTransformsBuf, DWORD *pcchTransformsBuf)
static UINT fetch_machine_component(DWORD ctx, DWORD index, DWORD *idx, WCHAR guid[39], MSIINSTALLCONTEXT *installed_ctx, LPWSTR sid, LPDWORD sid_len)
static UINT fetch_user_product(const WCHAR *match, const WCHAR *usersid, DWORD ctx, DWORD index, DWORD *idx, WCHAR installed_product[GUID_SIZE], MSIINSTALLCONTEXT *installed_ctx, WCHAR *sid, DWORD *sid_len)
UINT MSIREG_OpenUpgradeCodesKey(LPCWSTR szUpgradeCode, HKEY *key, BOOL create)
#define ERROR_FUNCTION_FAILED
UINT MSIREG_DeleteUserUpgradeCodesKey(LPCWSTR szUpgradeCode)
#define ERROR_ACCESS_DENIED
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
UINT WINAPI MsiEnumClientsW(const WCHAR *szComponent, DWORD index, WCHAR *szProduct)
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
#define MAX_FEATURE_CHARS
static UINT enum_components(const WCHAR *usersid, DWORD ctx, DWORD index, DWORD *idx, WCHAR guid[39], MSIINSTALLCONTEXT *installed_ctx, LPWSTR sid, LPDWORD sid_len)
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)
DWORD msi_version_str_to_dword(LPCWSTR p)
static const WCHAR version[]
UINT WINAPI MsiEnumPatchesExW(const WCHAR *szProductCode, const WCHAR *szUserSid, DWORD dwContext, DWORD dwFilter, DWORD dwIndex, WCHAR *szPatchCode, WCHAR *szTargetProductCode, MSIINSTALLCONTEXT *pdwTargetProductContext, WCHAR *szTargetUserSid, DWORD *pcchTargetUserSid)
static const char appdata[]
#define ERROR_FILE_NOT_FOUND
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
UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid)
static UINT MSI_EnumComponentQualifiers(const WCHAR *szComponent, DWORD iIndex, awstring *lpQualBuf, DWORD *pcchQual, awstring *lpAppBuf, DWORD *pcchAppBuf)
UINT MSIREG_OpenUserUpgradeCodesKey(LPCWSTR szUpgradeCode, HKEY *key, BOOL create)
UINT WINAPI MsiEnumProductsExA(const char *product, const char *usersid, DWORD ctx, DWORD index, char installed_product[GUID_SIZE], MSIINSTALLCONTEXT *installed_ctx, char *sid, DWORD *sid_len)
BOOL decode_base85_guid(LPCWSTR str, GUID *guid)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
#define ERROR_BAD_CONFIGURATION
UINT WINAPI MsiEnumComponentsExW(const WCHAR *user_sid, DWORD ctx, DWORD index, WCHAR guid[39], MSIINSTALLCONTEXT *installed_ctx, WCHAR *sid, DWORD *sid_len)
UINT MSIREG_DeleteUserProductKey(LPCWSTR szProduct)
UINT MSIREG_OpenInstallProps(LPCWSTR szProduct, MSIINSTALLCONTEXT dwContext, LPCWSTR szUserSid, HKEY *key, BOOL create)
#define ERROR_UNKNOWN_PRODUCT
UINT MSIREG_OpenPatchesKey(LPCWSTR szPatch, HKEY *key, BOOL create)
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
UINT MSIREG_OpenUserDataFeaturesKey(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
UINT MSIREG_OpenFeaturesKey(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
UINT WINAPI MsiEnumPatchesA(const char *szProduct, DWORD iPatchIndex, char *lpPatchBuf, char *lpTransformsBuf, DWORD *pcchTransformsBuf)
BOOL msi_reg_get_val_dword(HKEY hkey, LPCWSTR name, DWORD *val)
_In_opt_ PVOID _In_ ULONG _In_ PVOID context
static const unsigned char table_dec85[0x80]
UINT MSIREG_OpenUserPatchesKey(LPCWSTR szPatch, HKEY *key, BOOL create)
UINT WINAPI MsiEnumComponentsExA(const char *user_sid, DWORD ctx, DWORD index, CHAR guid[39], MSIINSTALLCONTEXT *installed_ctx, char *sid, DWORD *sid_len)
static WCHAR * get_user_sid(void)
#define memcpy(s1, s2, n)
#define GetCurrentProcess()
GLsizei const GLfloat * value
UINT WINAPI MsiEnumComponentQualifiersW(const WCHAR *szComponent, DWORD iIndex, WCHAR *lpQualifierBuf, DWORD *pcchQualifierBuf, WCHAR *lpApplicationDataBuf, DWORD *pcchApplicationDataBuf)
enum tagMSIPATCHSTATE MSIPATCHSTATE
UINT MSIREG_OpenProductKey(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
int _cdecl swprintf(const WCHAR *,...)
UINT WINAPI MsiEnumFeaturesW(const WCHAR *szProduct, DWORD index, WCHAR *szFeature, WCHAR *szParent)
UINT MSIREG_OpenUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid, HKEY *key, BOOL create)
LSTATUS WINAPI RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey)
UINT WINAPI MsiEnumProductsW(DWORD index, WCHAR *lpguid)
static UINT MSIREG_OpenInstallerFeaturesKey(LPCWSTR szProduct, HKEY *key, BOOL create)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static UINT msi_enum_patches(LPCWSTR szProductCode, LPCWSTR szUserSid, DWORD dwContext, DWORD dwFilter, DWORD dwIndex, DWORD *idx, LPWSTR szPatchCode, LPWSTR szTargetProductCode, MSIINSTALLCONTEXT *pdwTargetProductContext, LPWSTR szTargetUserSid, LPDWORD pcchTargetUserSid, LPWSTR *szTransforms)
static UINT msi_get_patch_state(LPCWSTR prodcode, LPCWSTR usersid, MSIINSTALLCONTEXT context, LPWSTR patch, MSIPATCHSTATE *state)
#define SQUASHED_GUID_SIZE
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
GLuint GLint GLboolean GLint GLenum access
HLOCAL NTAPI LocalFree(HLOCAL hMem)
UINT MSIREG_DeleteUserDataPatchKey(LPCWSTR patch, MSIINSTALLCONTEXT context)
#define ERROR_UNKNOWN_COMPONENT
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
UINT WINAPI MsiEnumClientsExA(const char *component, const char *usersid, DWORD ctx, DWORD index, char installed_product[GUID_SIZE], MSIINSTALLCONTEXT *installed_ctx, char *sid, DWORD *sid_len)
UINT MSIREG_DeleteUserDataProductKey(LPCWSTR szProduct, MSIINSTALLCONTEXT context)
UINT MSIREG_OpenUserDataProductPatchesKey(LPCWSTR product, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
BOOL encode_base85_guid(GUID *guid, LPWSTR str)
static void * msi_alloc(size_t len) __WINE_ALLOC_SIZE(1)
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
UINT WINAPI MsiEnumFeaturesA(const char *szProduct, DWORD index, char *szFeature, char *szParent)
UINT MSIREG_DeleteProductKey(LPCWSTR szProduct)
UINT WINAPI MsiEnumClientsA(const char *szComponent, DWORD index, char *szProduct)
static UINT fetch_machine_product(const WCHAR *match, DWORD index, DWORD *idx, WCHAR installed_product[GUID_SIZE], MSIINSTALLCONTEXT *installed_ctx, WCHAR *sid, DWORD *sid_len)
UINT WINAPI MsiEnumProductsExW(const WCHAR *product, const WCHAR *usersid, DWORD ctx, DWORD index, WCHAR installed_product[GUID_SIZE], MSIINSTALLCONTEXT *installed_ctx, WCHAR *sid, DWORD *sid_len)
UINT WINAPI MsiEnumComponentQualifiersA(const char *szComponent, DWORD iIndex, char *lpQualifierBuf, DWORD *pcchQualifierBuf, char *lpApplicationDataBuf, DWORD *pcchApplicationDataBuf)
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)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
GLuint GLuint GLsizei GLenum type
UINT MSIREG_DeleteUserFeaturesKey(LPCWSTR szProduct)
UINT MSIREG_DeleteClassesUpgradeCodesKey(LPCWSTR szUpgradeCode)
static UINT enum_products(const WCHAR *product, const WCHAR *usersid, DWORD ctx, DWORD index, DWORD *idx, WCHAR installed_product[GUID_SIZE], MSIINSTALLCONTEXT *installed_ctx, WCHAR *sid, DWORD *sid_len)
UINT WINAPI MsiEnumRelatedProductsW(const WCHAR *szUpgradeCode, DWORD dwReserved, DWORD iProductIndex, WCHAR *lpProductBuf)
static const struct access_res create[16]
UINT WINAPI MsiEnumClientsExW(const WCHAR *component, const WCHAR *usersid, DWORD ctx, DWORD index, WCHAR installed_product[GUID_SIZE], MSIINSTALLCONTEXT *installed_ctx, WCHAR *sid, DWORD *sid_len)
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
void user(int argc, const char *argv[])
UINT MSIREG_DeleteLocalClassesProductKey(LPCWSTR szProductCode)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static WCHAR * strdupAtoW(const char *str)
static const char table_enc85[]
UINT MSIREG_OpenUserDataProductKey(LPCWSTR szProduct, MSIINSTALLCONTEXT dwContext, LPCWSTR szUserSid, HKEY *key, BOOL create)
UINT MSIREG_DeleteUninstallKey(const WCHAR *product, enum platform platform)
BOOL squash_guid(LPCWSTR in, LPWSTR out)
UINT WINAPI MsiEnumPatchesExA(const char *szProductCode, const char *szUserSid, DWORD dwContext, DWORD dwFilter, DWORD dwIndex, char *szPatchCode, char *szTargetProductCode, MSIINSTALLCONTEXT *pdwTargetProductContext, char *szTargetUserSid, DWORD *pcchTargetUserSid)
UINT MSIREG_OpenUninstallKey(const WCHAR *product, enum platform platform, HKEY *key, BOOL create)
#define HKEY_LOCAL_MACHINE
#define KEY_ENUMERATE_SUB_KEYS
#define ERROR_INSUFFICIENT_BUFFER