55 int x1 = 0,
x2 = 0, x3 = 0, x4 = 0;
73 if (
ls) *
ls = x3 << 16 | x4;
85 WCHAR *minVersion, *maxVersion, *
p;
89 TRACE(
"package %p, sig %p\n", package, sig);
91 memset(sig, 0,
sizeof(*sig));
134 TRACE(
"Found file name %s for Signature_ %s;\n",
250 rec =
MSI_QueryGetRecord(package->
db,
L"SELECT * FROM `Signature` WHERE `Signature` = '%s'", signature);
309 (*appValue)[0] =
'#';
335 for (
i = 0;
i < sz;
i++,
ptr += 2)
339 WARN(
"unimplemented for values of type %lu\n", regType );
348 const WCHAR *keyPath, *valueName;
353 DWORD sz = 0, regType;
393 WARN(
"Unknown root key %d\n",
root);
400 TRACE(
"RegOpenKeyExW returned %d\n", rc);
410 TRACE(
"RegQueryValueExW returned %d\n", rc);
420 TRACE(
"RegQueryValueExW returned %d\n", rc);
459 FIXME(
"unimplemented for type %d (key path %s, value %s)\n",
579 if (!deformatted ||
lstrlenW(deformatted) >
len - 1)
631 if (!languages || !languages[0])
return TRUE;
635 for (
i = 0;
i < num_ids;
i++)
638 for (
j = 0;
j <
len /
sizeof(
struct lang);
j++)
642 if (!found)
goto done;
673 TRACE(
"comparing file version %d.%d.%d.%d:\n",
682 TRACE(
"less than minimum version %d.%d.%d.%d\n",
693 TRACE(
"greater than maximum version %d.%d.%d.%d\n",
726 if (findData->ftCreationTime.dwHighDateTime <
729 && findData->ftCreationTime.dwLowDateTime <
735 if (findData->ftCreationTime.dwHighDateTime >
738 && findData->ftCreationTime.dwLowDateTime >
817 wcscmp( findData.cFileName,
L"." ) &&
818 wcscmp( findData.cFileName,
L".." ))
827 if (!
wcscmp( findData.cFileName,
L"." ) ||
828 !
wcscmp( findData.cFileName,
L".." ))
841 if (*appValue !=
buf)
867 else if (
path[0] ==
'\\' &&
path[1] ==
'\\')
903 if (!(drives & (1 <<
i)))
906 pathWithDrive[0] =
'A' +
i;
932 TRACE(
"returning %d\n", rc);
1009 TRACE(
"returning %d\n", rc);
1029 rc =
search_dr( package, appValue, sig );
1078 TRACE(
"Skipping AppSearch action: already done in UI sequence\n");
1125 TRACE(
"Skipping AppSearch action: already done in UI sequence\n");
static BOOL match_languages(const void *version, const WCHAR *languages)
static UINT ITERATE_AppSearch(MSIRECORD *row, LPVOID param)
static UINT search_sig_name(MSIPACKAGE *, const WCHAR *, MSISIGNATURE *, WCHAR **)
static LANGID * parse_languages(const WCHAR *languages, DWORD *num_ids)
UINT ACTION_AppSearch(MSIPACKAGE *package)
static void free_signature(MSISIGNATURE *sig)
static UINT check_directory(MSIPACKAGE *package, const WCHAR *dir, WCHAR **appValue)
static UINT search_components(MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig)
static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param)
UINT ACTION_CCPSearch(MSIPACKAGE *package)
static UINT search_reg(MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig)
static UINT search_dr(MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig)
static BOOL is_full_path(const WCHAR *path)
static UINT recurse_search_directory(MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig, const WCHAR *dir, int depth)
void msi_parse_version_string(LPCWSTR verStr, PDWORD ms, PDWORD ls)
static UINT file_matches_sig(MSIPACKAGE *package, const MSISIGNATURE *sig, const WIN32_FIND_DATAW *findData, const WCHAR *fullFilePath, BOOL *matches)
struct tagMSISIGNATURE MSISIGNATURE
static UINT search_ini(MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig)
static WCHAR * search_file(MSIPACKAGE *package, WCHAR *path, MSISIGNATURE *sig)
static void expand_any_path(MSIPACKAGE *package, WCHAR *src, WCHAR *dst, size_t len)
static UINT get_signature(MSIPACKAGE *package, MSISIGNATURE *sig, const WCHAR *name)
static UINT search_directory(MSIPACKAGE *, MSISIGNATURE *, const WCHAR *, int, WCHAR **)
static UINT file_version_matches(MSIPACKAGE *package, const MSISIGNATURE *sig, const WCHAR *filePath, BOOL *matches)
static LPWSTR get_ini_field(LPWSTR buf, int field)
static void convert_reg_value(DWORD regType, const BYTE *value, DWORD sz, WCHAR **appValue)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static WCHAR * strdupW(const WCHAR *src)
void ls(int argc, const char *argv[])
#define RegCloseKey(hKey)
static void free_signature(struct d3dcompiler_shader_signature *sig)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
#define INVALID_HANDLE_VALUE
#define ERROR_NO_MORE_ITEMS
static const WCHAR version[]
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
BOOL WINAPI FindClose(HANDLE hFindFile)
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
UINT msi_register_unique_action(MSIPACKAGE *package, const WCHAR *action)
BOOL msi_action_is_unique(const MSIPACKAGE *package, const WCHAR *action)
DWORD msi_get_file_version_info(MSIPACKAGE *package, const WCHAR *path, DWORD buflen, BYTE *buffer)
HANDLE msi_find_first_file(MSIPACKAGE *package, const WCHAR *filename, WIN32_FIND_DATAW *data)
DWORD msi_get_file_attributes(MSIPACKAGE *package, const WCHAR *path)
BOOL msi_find_next_file(MSIPACKAGE *package, HANDLE handle, WIN32_FIND_DATAW *data)
int msiobj_release(MSIOBJECTHDR *info)
INSTALLSTATE WINAPI MsiLocateComponentW(LPCWSTR szComponent, LPWSTR lpPathBuf, LPDWORD pcchBuf)
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
BOOL WINAPI VerQueryValueW(LPCVOID pBlock, LPCWSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen)
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
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLuint GLsizei GLenum type
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
GLdouble GLdouble GLdouble GLdouble q
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLint GLboolean GLint GLenum access
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
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memmove(s1, s2, n)
@ INSTALLMESSAGE_ACTIONDATA
@ msidbLocatorTypeRawValue
@ msidbLocatorTypeDirectory
@ msidbLocatorTypeFileName
@ msidbRegistryRootClassesRoot
@ msidbRegistryRootLocalMachine
@ msidbRegistryRootCurrentUser
static void * msi_realloc(void *mem, size_t len) __WINE_ALLOC_SIZE(2)
WCHAR * msi_dup_record_field(MSIRECORD *row, INT index) DECLSPEC_HIDDEN
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int) DECLSPEC_HIDDEN
MSIRECORD *WINAPIV MSI_QueryGetRecord(MSIDATABASE *db, LPCWSTR query,...) DECLSPEC_HIDDEN
UINT MSI_IterateRecords(MSIQUERY *, LPDWORD, record_func, LPVOID) DECLSPEC_HIDDEN
UINT MSI_RecordGetStringW(MSIRECORD *, UINT, LPWSTR, LPDWORD) DECLSPEC_HIDDEN
static void msi_free(void *mem)
int MSI_RecordGetInteger(MSIRECORD *, UINT) DECLSPEC_HIDDEN
void msi_reset_source_folders(MSIPACKAGE *package) DECLSPEC_HIDDEN
const WCHAR * MSI_RecordGetString(const MSIRECORD *, UINT) DECLSPEC_HIDDEN
INT MSI_ProcessMessage(MSIPACKAGE *, INSTALLMESSAGE, MSIRECORD *) DECLSPEC_HIDDEN
static void * msi_alloc(size_t len) __WINE_ALLOC_SIZE(1)
MSIRECORD * MSI_CreateRecord(UINT) DECLSPEC_HIDDEN
BOOL MSI_RecordIsNull(MSIRECORD *, UINT) DECLSPEC_HIDDEN
UINT WINAPIV MSI_OpenQuery(MSIDATABASE *, MSIQUERY **, LPCWSTR,...) DECLSPEC_HIDDEN
UINT MSI_RecordSetStringW(MSIRECORD *, UINT, LPCWSTR) DECLSPEC_HIDDEN
#define FILE_ATTRIBUTE_DIRECTORY
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define INVALID_FILE_ATTRIBUTES
static const WCHAR lang[]
DWORD WINAPI GetLogicalDrives(void)
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define HKEY_CLASSES_ROOT