37 #include "wine/unicode.h" 109 static const WCHAR media[] = {
'M',
'e',
'd',
'i',
'a',0};
122 static const WCHAR net[] = {
'N',
'e',
't',0};
135 static const WCHAR URL[] = {
'U',
'R',
'L',0};
160 TRACE(
"(%s, %s, %d, %d, %d, %p, %p, %p, %p, %p)\n",
debugstr_a(szProductCodeOrPatchCode),
162 szVolumeLabel, pcchVolumeLabel, szDiskPrompt, pcchDiskPrompt);
164 if (szDiskPrompt && !pcchDiskPrompt)
167 if (szProductCodeOrPatchCode) product =
strdupAtoW(szProductCodeOrPatchCode);
168 if (szUserSid) usersid =
strdupAtoW(szUserSid);
179 if (prompt) *prompt =
'\0';
181 dwIndex, pdwDiskId,
volume, pcchVolumeLabel,
182 prompt, pcchDiskPrompt);
186 if (szVolumeLabel && pcchVolumeLabel)
212 static const WCHAR fmt[] = {
'#',
'%',
'd',0};
221 TRACE(
"(%s, %s, %d, %d, %d, %p, %p, %p, %p)\n",
debugstr_w(szProductCodeOrPatchCode),
223 pcchVolumeLabel, szDiskPrompt, pcchDiskPrompt);
225 if (!szProductCodeOrPatchCode || !
squash_guid( szProductCodeOrPatchCode, squashed_pc ))
234 if (szDiskPrompt && !pcchDiskPrompt)
240 if (dwIndex !=
index)
296 if (
size >= *pcchVolumeLabel)
298 else if (szVolumeLabel)
301 *pcchVolumeLabel =
size;
318 if (
size >= *pcchDiskPrompt)
320 else if (szDiskPrompt)
323 *pcchDiskPrompt =
size;
351 TRACE(
"(%s, %s, %d, %d, %d, %p, %p)\n",
debugstr_a(szProductCodeOrPatch),
360 if (dwIndex !=
index)
363 if (szProductCodeOrPatch) product =
strdupAtoW(szProductCodeOrPatch);
364 if (szUserSid) usersid =
strdupAtoW(szUserSid);
385 if (pcchSource && *pcchSource >=
len)
391 *pcchSource =
len - 1;
402 else if (dwIndex >
index)
423 TRACE(
"(%s, %s, %d, %d, %d, %p, %p)\n",
debugstr_w(szProductCodeOrPatch),
429 if (!szProductCodeOrPatch || !
squash_guid( szProductCodeOrPatch, squashed_pc ))
444 if (dwIndex !=
index)
476 else if (dwIndex >
index)
497 if (szValue && !pcchValue)
500 if (szProduct) product =
strdupAtoW(szProduct);
501 if (szUserSid) usersid =
strdupAtoW(szUserSid);
520 if (*pcchValue >=
len)
525 *pcchValue =
len - 1;
543 static const WCHAR mediapack[] = {
'M',
'e',
'd',
'i',
'a',
'P',
'a',
'c',
'k',
'a',
'g',
'e',0};
551 if (!szProduct || !
squash_guid( szProduct, squashed_pc ))
554 if (szValue && !pcchValue)
647 *pcchValue = *pcchValue *
sizeof(
WCHAR);
649 (
LPBYTE)szValue, pcchValue);
658 *pcchValue = (*pcchValue - 1) /
sizeof(
WCHAR);
660 szValue[*pcchValue] =
'\0';
686 if (szProduct) product =
strdupAtoW(szProduct);
687 if (szUserSid) usersid =
strdupAtoW(szUserSid);
713 static const WCHAR format[] = {
'%',
'c',
';',
'%',
'i',
';',
'%',
's',0};
770 static const WCHAR media_package[] = {
'M',
'e',
'd',
'i',
'a',
'P',
'a',
'c',
'k',
'a',
'g',
'e',0};
779 if (!szProduct || !
squash_guid( szProduct, squashed_pc ))
793 FIXME(
"Unhandled options MSICODE_PATCH\n");
799 property = media_package;
865 if (!szProduct || !
squash_guid( szProduct, squashed_pc ))
868 if (!szUserName || !*szUserName)
972 static const WCHAR fmt[] = {
'%',
'i',0};
1059 static const WCHAR fmt[] = {
'%',
'i',0};
1060 HKEY sourcekey, typekey;
1062 struct list sourcelist;
1071 if (!szProduct || !
squash_guid( szProduct, squashed_pc ))
1082 FIXME(
"Unhandled options MSICODE_PATCH\n");
1107 ERR(
"can't open subkey %u\n", rc);
1135 else if (dwIndex >
count || dwIndex == 0)
1190 if (szProduct) product =
strdupAtoW(szProduct);
1191 if (szUserSid) usersid =
strdupAtoW(szUserSid);
1193 if (szDiskPrompt) prompt =
strdupAtoW(szDiskPrompt);
1196 dwDiskId,
volume, prompt);
1213 static const WCHAR fmt[] = {
'%',
'i',0};
1214 HKEY sourcekey, mediakey;
1223 if (!szProduct || !
squash_guid( szProduct, squashed_pc ))
1229 if ((szVolumeLabel && !*szVolumeLabel) || (szDiskPrompt && !*szDiskPrompt))
1237 FIXME(
"Unhandled options MSICODE_PATCH\n");
#define ERROR_INVALID_PARAMETER
static const WCHAR szSemiColon[]
static const WCHAR INSTALLPROPERTY_PACKAGENAMEW[]
#define ERROR_UNKNOWN_PROPERTY
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
UINT WINAPI MsiSourceListAddSourceExA(LPCSTR szProduct, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCSTR szSource, DWORD dwIndex)
UINT WINAPI MsiSourceListGetInfoW(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCWSTR szProperty, LPWSTR szValue, LPDWORD pcchValue)
enum tagMSIINSTALLCONTEXT MSIINSTALLCONTEXT
#define WideCharToMultiByte
#define ERROR_NO_MORE_ITEMS
static WCHAR * strdupW(const WCHAR *src)
GLdouble GLdouble GLdouble r
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
static const WCHAR INSTALLPROPERTY_MEDIAPACKAGEPATHW[]
__WINE_SERVER_LIST_INLINE void list_add_after(struct list *elem, struct list *to_add)
GLuint GLuint GLsizei count
struct tagMediaInfo media_info
__WINE_SERVER_LIST_INLINE void list_add_head(struct list *list, struct list *elem)
static void add_source_to_list(struct list *sourcelist, media_info *info, DWORD *index)
UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR szProductCodeOrPatchCode, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwIndex, LPDWORD pdwDiskId, LPWSTR szVolumeLabel, LPDWORD pcchVolumeLabel, LPWSTR szDiskPrompt, LPDWORD pcchDiskPrompt)
BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR *StringSid)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
static const WCHAR INSTALLPROPERTY_LASTUSEDSOURCEW[]
UINT WINAPI MsiSourceListClearAllA(LPCSTR szProduct, LPCSTR szUserName, DWORD dwReserved)
UINT WINAPI MsiSourceListEnumSourcesA(LPCSTR szProductCodeOrPatch, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwIndex, LPSTR szSource, LPDWORD pcchSource)
__WINE_SERVER_LIST_INLINE struct list * list_head(const struct list *list)
UINT WINAPI MsiSourceListAddSourceExW(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCWSTR szSource, DWORD dwIndex)
static UINT OpenSourceKey(LPCWSTR szProduct, HKEY *key, DWORD dwOptions, MSIINSTALLCONTEXT context, BOOL create)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
LONG WINAPI RegCloseKey(HKEY hKey)
#define ERROR_FUNCTION_FAILED
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
WINE_DEFAULT_DEBUG_CHANNEL(dbghelp)
UINT msi_set_last_used_source(LPCWSTR product, LPCWSTR usersid, MSIINSTALLCONTEXT context, DWORD options, LPCWSTR value)
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)
UINT WINAPI MsiSourceListAddSourceA(LPCSTR szProduct, LPCSTR szUserName, DWORD dwReserved, LPCSTR szSource)
static const WCHAR INSTALLPROPERTY_DISKPROMPTW[]
WINE_UNICODE_INLINE long int atolW(const WCHAR *str)
LONG msi_reg_set_val_str(HKEY hkey, LPCWSTR name, LPCWSTR value) DECLSPEC_HIDDEN
static const WCHAR szSourceList[]
UINT MSIREG_OpenPatchesKey(LPCWSTR szPatch, HKEY *key, BOOL create) DECLSPEC_HIDDEN
UINT WINAPI MsiSourceListSetInfoA(LPCSTR szProduct, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCSTR szProperty, LPCSTR szValue)
#define ERROR_UNKNOWN_PATCH
UINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR szProductCodeOrPatch, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwIndex, LPWSTR szSource, LPDWORD pcchSource)
UINT MSIREG_OpenProductKey(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT context, HKEY *key, BOOL create) DECLSPEC_HIDDEN
static const WCHAR szEmpty[]
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
static const WCHAR szForwardSlash[]
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
#define ERROR_BAD_CONFIGURATION
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
static UINT OpenMediaSubkey(HKEY rootkey, HKEY *key, BOOL create)
UINT WINAPI MsiSourceListClearSourceA(LPCSTR szProductCodeOrPatchCode, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCSTR szSource)
#define ERROR_UNKNOWN_PRODUCT
static UINT fill_source_list(struct list *sourcelist, HKEY sourcekey, DWORD *count)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
_In_opt_ PVOID _In_ ULONG _In_ PVOID context
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)
static const WCHAR szSource[]
UINT WINAPI MsiSourceListClearAllExW(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions)
UINT WINAPI MsiSourceListClearAllW(LPCWSTR szProduct, LPCWSTR szUserName, DWORD dwReserved)
static const WCHAR INSTALLPROPERTY_LASTUSEDTYPEW[]
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
static void free_source_list(struct list *sourcelist)
static UINT OpenNetworkSubkey(HKEY rootkey, HKEY *key, BOOL create)
UINT WINAPI MsiSourceListSetInfoW(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCWSTR szProperty, LPCWSTR szValue)
WINE_UNICODE_INLINE WCHAR * strrchrW(const WCHAR *str, WCHAR ch)
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
#define SQUASHED_GUID_SIZE
UINT WINAPI MsiSourceListClearSourceW(LPCWSTR szProductCodeOrPatchCode, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCWSTR szSource)
GLsizei GLsizei GLchar * source
HLOCAL NTAPI LocalFree(HLOCAL hMem)
static BOOL squash_guid(LPCWSTR in, LPWSTR out)
static const WCHAR szProperty[]
static const WCHAR szOne[]
UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR szProduct, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwDiskId, LPCSTR szVolumeLabel, LPCSTR szDiskPrompt)
static const WCHAR szBackSlash[]
__WINE_SERVER_LIST_INLINE void list_add_before(struct list *elem, struct list *to_add)
UINT WINAPI MsiSourceListGetInfoA(LPCSTR szProduct, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCSTR szProperty, LPSTR szValue, LPDWORD pcchValue)
static UINT OpenURLSubkey(HKEY rootkey, HKEY *key, BOOL create)
UINT MSIREG_OpenUserPatchesKey(LPCWSTR szPatch, HKEY *key, BOOL create) DECLSPEC_HIDDEN
static BOOL msi_free(void *mem)
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
__WINE_SERVER_LIST_INLINE void list_init(struct list *list)
static void * msi_alloc(size_t len) __WINE_ALLOC_SIZE(1)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
GLuint GLuint GLsizei GLenum type
UINT WINAPI MsiSourceListClearAllExA(LPCSTR szProduct, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions)
UINT WINAPI MsiSourceListEnumMediaDisksA(LPCSTR szProductCodeOrPatchCode, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwIndex, LPDWORD pdwDiskId, LPSTR szVolumeLabel, LPDWORD pcchVolumeLabel, LPSTR szDiskPrompt, LPDWORD pcchDiskPrompt)
UINT WINAPI MsiSourceListAddSourceW(LPCWSTR szProduct, LPCWSTR szUserName, DWORD dwReserved, LPCWSTR szSource)
BOOL WINAPI LookupAccountNameW(LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSID Sid, LPDWORD cbSid, LPWSTR ReferencedDomainName, LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse)
static const struct access_res create[16]
UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwDiskId, LPCWSTR szVolumeLabel, LPCWSTR szDiskPrompt)
static WCHAR * strdupAtoW(const char *str)
WINE_UNICODE_INLINE int atoiW(const WCHAR *str)
GLuint const GLchar * name