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",
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;
939 TRACE(
"returning %d\n", rc);
1016 TRACE(
"returning %d\n", rc);
1036 rc =
search_dr( package, appValue, sig );
1085 TRACE(
"Skipping AppSearch action: already done in UI sequence\n");
1132 TRACE(
"Skipping AppSearch action: already done in UI sequence\n");
static UINT search_reg(MSIPACKAGE *package, WCHAR **appValue, struct signature *sig)
static BOOL match_languages(const void *version, const WCHAR *languages)
static UINT search_dr(MSIPACKAGE *package, WCHAR **appValue, struct signature *sig)
static UINT ITERATE_AppSearch(MSIRECORD *row, LPVOID param)
static LANGID * parse_languages(const WCHAR *languages, DWORD *num_ids)
UINT ACTION_AppSearch(MSIPACKAGE *package)
static UINT check_directory(MSIPACKAGE *package, const WCHAR *dir, WCHAR **appValue)
static WCHAR * search_file(MSIPACKAGE *package, WCHAR *path, struct signature *sig)
static UINT file_version_matches(MSIPACKAGE *package, const struct signature *sig, const WCHAR *filePath, BOOL *matches)
static UINT search_components(MSIPACKAGE *package, WCHAR **appValue, struct signature *sig)
static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param)
static void free_signature(struct signature *sig)
UINT ACTION_CCPSearch(MSIPACKAGE *package)
static UINT search_directory(MSIPACKAGE *, struct signature *, const WCHAR *, int, WCHAR **)
static BOOL is_full_path(const WCHAR *path)
static UINT get_signature(MSIPACKAGE *package, struct signature *sig, const WCHAR *name)
void msi_parse_version_string(LPCWSTR verStr, PDWORD ms, PDWORD ls)
static UINT search_sig_name(MSIPACKAGE *, const WCHAR *, struct signature *, WCHAR **)
static void expand_any_path(MSIPACKAGE *package, WCHAR *src, WCHAR *dst, size_t len)
static UINT file_matches_sig(MSIPACKAGE *package, const struct signature *sig, const WIN32_FIND_DATAW *findData, const WCHAR *fullFilePath, BOOL *matches)
static LPWSTR get_ini_field(LPWSTR buf, int field)
static UINT search_ini(MSIPACKAGE *package, WCHAR **appValue, struct signature *sig)
static UINT recurse_search_directory(MSIPACKAGE *package, WCHAR **appValue, struct signature *sig, const WCHAR *dir, int depth)
static void convert_reg_value(DWORD regType, const BYTE *value, DWORD sz, WCHAR **appValue)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
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)
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
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 count
GLuint GLuint GLsizei GLenum type
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)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memmove(s1, s2, n)
@ INSTALLMESSAGE_ACTIONDATA
@ msidbLocatorTypeRawValue
@ msidbLocatorTypeDirectory
@ msidbLocatorTypeFileName
@ msidbRegistryRootClassesRoot
@ msidbRegistryRootLocalMachine
@ msidbRegistryRootCurrentUser
int MSI_RecordGetInteger(MSIRECORD *, UINT)
void msi_reset_source_folders(MSIPACKAGE *package)
WCHAR * msi_dup_record_field(MSIRECORD *row, INT index)
const WCHAR * MSI_RecordGetString(const MSIRECORD *, UINT)
UINT WINAPIV MSI_OpenQuery(MSIDATABASE *, MSIQUERY **, LPCWSTR,...)
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int)
MSIRECORD *WINAPIV MSI_QueryGetRecord(MSIDATABASE *db, LPCWSTR query,...)
BOOL MSI_RecordIsNull(MSIRECORD *, UINT)
INT MSI_ProcessMessage(MSIPACKAGE *, INSTALLMESSAGE, MSIRECORD *)
UINT MSI_RecordSetStringW(MSIRECORD *, UINT, LPCWSTR)
MSIRECORD * MSI_CreateRecord(UINT)
UINT MSI_IterateRecords(MSIQUERY *, LPDWORD, record_func, LPVOID)
UINT MSI_RecordGetStringW(MSIRECORD *, UINT, LPWSTR, LPDWORD)
#define FILE_ATTRIBUTE_DIRECTORY
#define PathAddBackslashW
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP wchar_t *__cdecl wcsdup(_In_z_ const wchar_t *_Str)
#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