32 #include "wine/unicode.h" 56 int x1 = 0,
x2 = 0, x3 = 0, x4 = 0;
74 if (
ls) *
ls = x3 << 16 | x4;
87 's',
'e',
'l',
'e',
'c',
't',
' ',
'*',
' ',
89 'S',
'i',
'g',
'n',
'a',
't',
'u',
'r',
'e',
' ',
90 'w',
'h',
'e',
'r',
'e',
' ',
'S',
'i',
'g',
'n',
'a',
't',
'u',
'r',
'e',
' ',
'=',
' ',
92 LPWSTR minVersion, maxVersion,
p;
96 TRACE(
"package %p, sig %p\n", package, sig);
98 memset(sig, 0,
sizeof(*sig));
141 TRACE(
"Found file name %s for Signature_ %s;\n",
233 'S',
'E',
'L',
'E',
'C',
'T',
' ',
'*',
' ',
235 '`',
'C',
'o',
'm',
'p',
'L',
'o',
'c',
'a',
't',
'o',
'r',
'`',
' ',
236 'W',
'H',
'E',
'R',
'E',
' ',
'`',
'S',
'i',
'g',
'n',
'a',
't',
'u',
'r',
'e',
'_',
'`',
' ',
'=',
' ',
237 '\'',
'%',
's',
'\'',0};
238 static const WCHAR sigquery[] = {
239 'S',
'E',
'L',
'E',
'C',
'T',
' ',
'*',
' ',
'F',
'R',
'O',
'M',
' ',
240 '`',
'S',
'i',
'g',
'n',
'a',
't',
'u',
'r',
'e',
'`',
' ',
241 'W',
'H',
'E',
'R',
'E',
' ',
'`',
'S',
'i',
'g',
'n',
'a',
't',
'u',
'r',
'e',
'`',
' ',
'=',
' ',
242 '\'',
'%',
's',
'\'',0};
320 static const WCHAR dwordFmt[] = {
'#',
'%',
'd',
'\0' };
321 static const WCHAR binPre[] = {
'#',
'x',
'\0' };
322 static const WCHAR binFmt[] = {
'%',
'0',
'2',
'X',
'\0' };
333 (*appValue)[0] =
'#';
359 for (
i = 0;
i < sz;
i++,
ptr += 2)
363 WARN(
"unimplemented for values of type %d\n", regType);
374 'S',
'E',
'L',
'E',
'C',
'T',
' ',
'*',
' ',
'F',
'R',
'O',
'M',
' ',
375 'R',
'e',
'g',
'L',
'o',
'c',
'a',
't',
'o',
'r',
' ',
'W',
'H',
'E',
'R',
'E',
' ',
376 'S',
'i',
'g',
'n',
'a',
't',
'u',
'r',
'e',
'_',
' ',
'=',
' ',
'\'',
'%',
's',
'\'',0};
377 const WCHAR *keyPath, *valueName;
381 DWORD sz = 0, regType;
419 WARN(
"Unknown root key %d\n",
root);
426 TRACE(
"RegOpenKeyW returned %d\n", rc);
436 TRACE(
"RegQueryValueExW returned %d\n", rc);
446 TRACE(
"RegQueryValueExW returned %d\n", rc);
485 FIXME(
"unimplemented for type %d (key path %s, value %s)\n",
527 's',
'e',
'l',
'e',
'c',
't',
' ',
'*',
' ',
529 'I',
'n',
'i',
'L',
'o',
'c',
'a',
't',
'o',
'r',
' ',
530 'w',
'h',
'e',
'r',
'e',
' ',
531 'S',
'i',
'g',
'n',
'a',
't',
'u',
'r',
'e',
'_',
' ',
'=',
' ',
'\'',
'%',
's',
'\'',0};
613 if (!deformatted ||
strlenW(deformatted) >
len - 1)
664 if (!languages || !languages[0])
return TRUE;
668 for (
i = 0;
i < num_ids;
i++)
671 for (
j = 0;
j <
len /
sizeof(
struct lang);
j++)
675 if (!found)
goto done;
706 TRACE(
"comparing file version %d.%d.%d.%d:\n",
715 TRACE(
"less than minimum version %d.%d.%d.%d\n",
726 TRACE(
"greater than maximum version %d.%d.%d.%d\n",
759 if (findData->ftCreationTime.dwHighDateTime <
762 && findData->ftCreationTime.dwLowDateTime <
768 if (findData->ftCreationTime.dwHighDateTime >
771 && findData->ftCreationTime.dwLowDateTime >
804 static const WCHAR starDotStarW[] = {
'*',
'.',
'*',0 };
873 sig, subpath,
depth - 1);
880 if (*appValue !=
buf)
907 else if (
path[0] ==
'\\' &&
path[1] ==
'\\')
945 if (!(drives & (1 <<
i)))
948 pathWithDrive[0] =
'A' +
i;
953 sizeof(pathWithDrive) /
sizeof(pathWithDrive[0]) - 3);
957 pathWithDrive,
depth);
977 TRACE(
"returning %d\n", rc);
987 's',
'e',
'l',
'e',
'c',
't',
' ',
'*',
' ',
989 'D',
'r',
'L',
'o',
'c',
'a',
't',
'o',
'r',
' ',
990 'w',
'h',
'e',
'r',
'e',
' ',
991 'S',
'i',
'g',
'n',
'a',
't',
'u',
'r',
'e',
'_',
' ',
'=',
' ',
'\'',
'%',
's',
'\'',0};
1063 TRACE(
"returning %d\n", rc);
1129 'S',
'E',
'L',
'E',
'C',
'T',
' ',
'*',
' ',
'F',
'R',
'O',
'M',
' ',
1130 'A',
'p',
'p',
'S',
'e',
'a',
'r',
'c',
'h',0};
1136 TRACE(
"Skipping AppSearch action: already done in UI sequence\n");
1159 static const WCHAR success[] = {
'C',
'C',
'P',
'_',
'S',
'u',
'c',
'c',
'e',
's',
's',0};
1182 'S',
'E',
'L',
'E',
'C',
'T',
' ',
'*',
' ',
'F',
'R',
'O',
'M',
' ',
1183 'C',
'C',
'P',
'S',
'e',
'a',
'r',
'c',
'h',0};
1189 TRACE(
"Skipping AppSearch action: already done in UI sequence\n");
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
struct tagMSISIGNATURE MSISIGNATURE
#define memmove(s1, s2, n)
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
UINT MSI_RecordSetStringW(MSIRECORD *, UINT, LPCWSTR) DECLSPEC_HIDDEN
static UINT ACTION_AppSearchGetSignature(MSIPACKAGE *package, MSISIGNATURE *sig, LPCWSTR name)
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
static UINT ACTION_FileMatchesSig(const MSISIGNATURE *sig, const WIN32_FIND_DATAW *findData, LPCWSTR fullFilePath, BOOL *matches)
#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)
#define HKEY_CURRENT_USER
GLuint GLuint GLsizei count
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
UINT MSI_RecordGetStringW(MSIRECORD *, UINT, LPWSTR, LPDWORD) DECLSPEC_HIDDEN
UINT ACTION_AppSearch(MSIPACKAGE *package)
BOOL msi_action_is_unique(const MSIPACKAGE *package, const WCHAR *action)
static UINT ACTION_AppSearchDr(MSIPACKAGE *package, LPWSTR *appValue, MSISIGNATURE *sig)
#define INVALID_HANDLE_VALUE
static BOOL match_languages(const void *version, const WCHAR *languages)
static UINT ACTION_AppSearchComponents(MSIPACKAGE *package, LPWSTR *appValue, MSISIGNATURE *sig)
static void * msi_realloc(void *mem, size_t len) __WINE_ALLOC_SIZE(2)
static IMAGE_SECTION_HEADER section
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
static UINT ACTION_CheckDirectory(MSIPACKAGE *package, LPCWSTR dir, LPWSTR *appValue)
static UINT ACTION_AppSearchSigName(MSIPACKAGE *package, LPCWSTR sigName, MSISIGNATURE *sig, LPWSTR *appValue)
void ls(int argc, const char *argv[])
GLenum GLuint GLenum GLsizei const GLchar * buf
static void ACTION_ExpandAnyPath(MSIPACKAGE *package, WCHAR *src, WCHAR *dst, size_t len)
UINT MSI_OpenQuery(MSIDATABASE *, MSIQUERY **, LPCWSTR,...) DECLSPEC_HIDDEN
static void ACTION_FreeSignature(MSISIGNATURE *sig)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
LONG WINAPI RegCloseKey(HKEY hKey)
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
static UINT ACTION_AppSearchIni(MSIPACKAGE *package, LPWSTR *appValue, MSISIGNATURE *sig)
BOOL MSI_RecordIsNull(MSIRECORD *, UINT) DECLSPEC_HIDDEN
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
INT MSI_ProcessMessage(MSIPACKAGE *, INSTALLMESSAGE, MSIRECORD *) DECLSPEC_HIDDEN
static void ACTION_ConvertRegValue(DWORD regType, const BYTE *value, DWORD sz, LPWSTR *appValue)
WINE_DEFAULT_DEBUG_CHANNEL(msi)
static const WCHAR version[]
void msi_reset_folders(MSIPACKAGE *package, BOOL source) DECLSPEC_HIDDEN
const WCHAR * MSI_RecordGetString(const MSIRECORD *, UINT) DECLSPEC_HIDDEN
void msi_parse_version_string(LPCWSTR verStr, PDWORD ms, PDWORD ls)
static UINT ACTION_FileVersionMatches(const MSISIGNATURE *sig, LPCWSTR filePath, BOOL *matches)
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
#define FILE_ATTRIBUTE_DIRECTORY
WINE_UNICODE_INLINE WCHAR toupperW(WCHAR ch)
static const WCHAR lang[]
static const WCHAR szLangResource[]
INSTALLSTATE WINAPI MsiLocateComponentW(LPCWSTR szComponent, LPWSTR lpPathBuf, LPDWORD pcchBuf)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
MSIRECORD * MSI_QueryGetRecord(MSIDATABASE *db, LPCWSTR query,...) DECLSPEC_HIDDEN
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
UINT ACTION_CCPSearch(MSIPACKAGE *package)
static UINT ACTION_RecurseSearchDirectory(MSIPACKAGE *package, LPWSTR *appValue, MSISIGNATURE *sig, LPCWSTR dir, int depth)
#define success(from, fromstr, to, tostr)
GLdouble GLdouble GLdouble GLdouble q
#define INVALID_FILE_ATTRIBUTES
int msiobj_release(MSIOBJECTHDR *info)
static const WCHAR szSourceDir[]
static UINT ACTION_AppSearchReg(MSIPACKAGE *package, LPWSTR *appValue, MSISIGNATURE *sig)
GLint GLint GLsizei GLsizei GLsizei depth
MSIRECORD * MSI_CreateRecord(UINT) DECLSPEC_HIDDEN
static const WCHAR szAppSearch[]
DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR filename, LPDWORD handle)
static const WCHAR szDot[]
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
static BOOL ACTION_IsFullPath(LPCWSTR path)
static UINT iterate_appsearch(MSIRECORD *row, LPVOID param)
WINE_UNICODE_INLINE WCHAR * strrchrW(const WCHAR *str, WCHAR ch)
DWORD WINAPI GetLogicalDrives(VOID)
int MSI_RecordGetInteger(MSIRECORD *, UINT) DECLSPEC_HIDDEN
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
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
static LANGID * parse_languages(const WCHAR *languages, DWORD *num_ids)
WCHAR * msi_dup_record_field(MSIRECORD *row, INT index) DECLSPEC_HIDDEN
static LPWSTR app_search_file(LPWSTR path, MSISIGNATURE *sig)
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
static const WCHAR szOne[]
static const WCHAR szBackSlash[]
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int) DECLSPEC_HIDDEN
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
BOOL WINAPI GetFileVersionInfoW(LPCWSTR filename, DWORD handle, DWORD datasize, LPVOID data)
static const WCHAR szCCPSearch[]
static BOOL msi_free(void *mem)
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
static LPWSTR get_ini_field(LPWSTR buf, int field)
static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param)
static void * msi_alloc(size_t len) __WINE_ALLOC_SIZE(1)
static IOleDocumentView * view
static UINT ACTION_SearchDirectory(MSIPACKAGE *package, MSISIGNATURE *sig, LPCWSTR path, int depth, LPWSTR *appValue)
#define HKEY_CLASSES_ROOT
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
GLuint GLuint GLsizei GLenum type
static const WCHAR szDotDot[]
UINT MSI_IterateRecords(MSIQUERY *, LPDWORD, record_func, LPVOID) DECLSPEC_HIDDEN
WINE_UNICODE_INLINE int atoiW(const WCHAR *str)
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
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
UINT msi_register_unique_action(MSIPACKAGE *package, const WCHAR *action)
BOOL WINAPI VerQueryValueW(LPCVOID pBlock, LPCWSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen)
#define HKEY_LOCAL_MACHINE
BOOL WINAPI FindClose(HANDLE hFindFile)
GLuint const GLchar * name