40 #include "winemsi_s.h" 88 #define SECT_HDR_SIZE (sizeof(PROPERTYSECTIONHEADER)) 104 IStorage_Release( si->
storage );
108 #define PID_DICTIONARY_MSI 0 109 #define PID_CODEPAGE_MSI 1 110 #define PID_SECURITY_MSI 19 118 case PID_CODEPAGE_MSI:
143 case PID_SECURITY_MSI:
171 if (!pPropVariantChangeType)
173 ERR(
"PropVariantChangeType function missing!\n");
200 ERR(
"unknown property ID %lu\n", idofs[
i].propid );
207 ERR(
"propid %lu has unknown type\n", idofs[
i].propid );
219 ERR(
"not enough data\n");
223 property.vt = propdata->
type;
228 str[ propdata->
u.
str.len - 1 ] = 0;
229 property.pszVal =
str;
232 property.filetime = propdata->
u.
ft;
234 property.iVal = propdata->
u.
i2;
236 property.lVal = propdata->
u.
i4;
261 TRACE(
"%p %p\n", si, stm);
265 r = IStream_Read( stm, &set_hdr, sz, &
count );
271 ERR(
"property set not big-endian %04X\n", set_hdr.
wByteOrder);
275 sz =
sizeof format_hdr;
276 r = IStream_Read( stm, &format_hdr, sz, &
count );
286 r = IStream_Seek( stm, ofs, STREAM_SEEK_SET,
NULL );
292 r = IStream_Read( stm, §ion_hdr, sz, &
count );
314 ERR(
"failed to read properties %lu %lu\n",
count, sz );
345 return (7 +
len) & ~3;
389 memset( &set_hdr, 0, sz );
395 r = IStream_Write( stm, &set_hdr, sz, &
count );
400 sz =
sizeof format_hdr;
402 format_hdr.
dwOffset =
sizeof format_hdr +
sizeof set_hdr;
403 r = IStream_Write( stm, &format_hdr, sz, &
count );
408 section_hdr.
cbSection =
sizeof section_hdr;
425 memcpy( &
data[sz], §ion_hdr,
sizeof section_hdr );
426 sz +=
sizeof section_hdr;
451 IStorage_AddRef( stg );
464 TRACE(
"%p, %u\n", stg, uiUpdateCount);
476 IStream_Release( stm );
503 IStream_Release( stm );
521 TRACE(
"%lu, %s, %u, %p\n", hDatabase,
debugstr_w(szDatabase), uiUpdateCount, pHandle );
526 if( szDatabase && szDatabase[0] )
546 ret = remote_DatabaseGetSummaryInformation(remote, uiUpdateCount, &remote_suminfo);
590 TRACE(
"%lu, %s, %u, %p\n", hDatabase,
debugstr_a(szDatabase), uiUpdateCount, pHandle );
610 TRACE(
"%lu, %p\n", hSummaryInfo, pCount );
623 ret = remote_SummaryInfoGetPropertyCount( remote, pCount );
650 *puiDataType = prop->vt;
656 *piValue = prop->iVal;
660 *piValue = prop->lVal;
678 if (
len >= *pcchValueBuf)
685 *pftValue = prop->filetime;
690 FIXME(
"Unknown property variant type\n");
715 if( prop->vt !=
VT_I4 )
729 ERR(
"no summary information!\n");
744 TRACE(
"%lu, %u, %p, %p, %p, %p, %p\n",
handle, uiProperty, puiDataType, piValue, pftValue, szValueBuf,
749 if (puiDataType) *puiDataType =
VT_EMPTY;
763 r = remote_SummaryInfoGetProperty( remote, uiProperty, puiDataType, piValue, pftValue, &
buf );
781 str.str.a = szValueBuf;
783 r =
get_prop( si, uiProperty, puiDataType, piValue, pftValue, &
str, pcchValueBuf );
795 TRACE(
"%lu, %u, %p, %p, %p, %p, %p\n",
handle, uiProperty, puiDataType, piValue, pftValue, szValueBuf,
800 if (puiDataType) *puiDataType =
VT_EMPTY;
814 r = remote_SummaryInfoGetProperty( remote, uiProperty, puiDataType, piValue, pftValue, &
buf );
830 str.str.w = szValueBuf;
832 r =
get_prop( si, uiProperty, puiDataType, piValue, pftValue, &
str, pcchValueBuf );
843 TRACE(
"%p, %u, %u, %d, %p, %p\n", si, uiProperty,
type, iValue, pftValue,
str );
854 else if( prop->vt !=
type )
868 prop->filetime = *pftValue;
914 TRACE(
"%lu, %u, %u, %d, %p, %s\n",
handle, uiProperty, uiDataType, iValue, pftValue,
debugstr_w(szValue) );
922 WARN(
"MsiSummaryInfoSetProperty not allowed during a custom action!\n");
938 FILETIME *pftValue,
const char *szValue )
944 TRACE(
"%lu, %u, %u, %d, %p, %s\n",
handle, uiProperty, uiDataType, iValue, pftValue,
debugstr_a(szValue) );
952 WARN(
"MsiSummaryInfoSetProperty not allowed during a custom action!\n");
975 r = IStorage_CreateStream( si->
storage,
L"\5SummaryInformation", grfMode, 0, 0, &stm );
979 IStream_Release( stm );
990 memset( <, 0,
sizeof(lt) );
997 if (*
end !=
'/')
return;
1001 if (*
end !=
'/')
return;
1005 if (*
end !=
' ')
return;
1011 if (*
end !=
':')
return;
1015 if (*
end !=
':')
return;
1031 case PID_CODEPAGE_MSI:
1038 case PID_SECURITY_MSI:
1066 WARN(
"unhandled prop id %u\n", *
pid);
1087 for (
i = 0;
i < num_records;
i++)
1089 for (
j = 0;
j < num_columns;
j += 2)
1096 r =
parse_prop( records[
i][
j], records[
i][
j + 1], &
pid, &int_value, &ft_value, &str_value );
1116 static const char fmt_systemtime[] =
"%04u/%02u/%02u %02u:%02u:%02u";
1118 static const char fmt_begin[] =
"%u\t";
1119 static const char data_end[] =
"\r\n";
1120 static const char fmt_int[] =
"%u";
1179 FIXME(
"Unknown property variant type\n" );
1265 WCHAR *package_code;
1277 ERR(
"Unable to open summary information stream %u\n",
r);
1288 WARN(
"Unable to query revision number %u\n",
r);
1295 str.str.w = package_code;
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 * u
#define ERROR_INVALID_PARAMETER
UINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, const WCHAR *szValue)
#define MSIDBOPEN_READONLY
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
MSIHANDLE msi_get_remote(MSIHANDLE handle)
LPWSTR msi_suminfo_dup_string(MSISUMMARYINFO *si, UINT uiProperty)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
static UINT save_prop(MSISUMMARYINFO *si, HANDLE handle, UINT row)
#define ERROR_UNKNOWN_PROPERTY
UINT msi_get_stream(MSIDATABASE *, const WCHAR *, IStream **) DECLSPEC_HIDDEN
union PROPERTY_DATA::@493 u
static UINT write_property_to_data(const PROPVARIANT *prop, LPBYTE data)
static UINT msi_set_prop(MSISUMMARYINFO *si, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, awcstring *str)
static DWORD write_filetime(LPBYTE data, DWORD ofs, const FILETIME *ft)
#define WideCharToMultiByte
#define STGM_SHARE_EXCLUSIVE
static UINT get_property_count(const PROPVARIANT *property)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS flags
#define midl_user_allocate
static void free_prop(PROPVARIANT *prop)
GLdouble GLdouble GLdouble r
GLuint GLuint GLsizei count
UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
#define MSIHANDLETYPE_SUMMARYINFO
#define ERROR_INVALID_HANDLE
UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE handle, UINT uiProperty, UINT *puiDataType, INT *piValue, FILETIME *pftValue, WCHAR *szValueBuf, DWORD *pcchValueBuf)
#define ERROR_DATATYPE_MISMATCH
static HRESULT(WINAPI *pPropVariantChangeType)(PROPVARIANT *ppropvarDest
UINT WINAPI MsiGetSummaryInformationW(MSIHANDLE hDatabase, const WCHAR *szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
#define ERROR_NOT_ENOUGH_MEMORY
struct tagPROPERTYIDOFFSET PROPERTYIDOFFSET
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)
#define MSIHANDLETYPE_DATABASE
UINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE db, MSIHANDLE db_ref, const char *transform, int error, int validation)
static REFPROPVARIANT propvarSrc
UINT msi_load_suminfo_properties(MSIPACKAGE *package)
static void * msi_alloc_zero(size_t len) __WINE_ALLOC_SIZE(1)
UINT msi_get_db_suminfo(MSIDATABASE *db, UINT uiUpdateCount, MSISUMMARYINFO **ret)
UINT msi_strncpyW(const WCHAR *str, int len, WCHAR *buf, DWORD *sz)
_In_ DWORD _In_ DWORD dwOffset
UINT msi_strncpyWtoA(const WCHAR *str, int lenW, char *buf, DWORD *sz, BOOL remote)
static const CHAR suminfo[]
const FMTID FMTID_SummaryInformation
#define sprintf(buf, format,...)
GLenum GLuint GLenum GLsizei const GLchar * buf
void * alloc_msiobject(UINT type, UINT size, msihandledestructor destroy)
UINT msi_export_suminfo(MSIDATABASE *db, HANDLE handle)
#define ERROR_WRITE_FAULT
#define ERROR_FUNCTION_FAILED
UINT __cdecl s_remote_SummaryInfoGetProperty(MSIHANDLE suminfo, UINT property, UINT *type, INT *value, FILETIME *ft, LPWSTR *buf)
struct tagPROPERTYSECTIONHEADER PROPERTYSECTIONHEADER
static UINT load_summary_info(MSISUMMARYINFO *si, IStream *stm)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
LONG WINAPI rpc_filter(EXCEPTION_POINTERS *eptr)
static UINT propvar_changetype(PROPVARIANT *changed, PROPVARIANT *property, VARTYPE vt)
static DWORD write_string(LPBYTE data, DWORD ofs, LPCSTR str)
static void MSI_CloseSummaryInfo(MSIOBJECTHDR *arg)
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
struct _FILETIME FILETIME
WINE_DEFAULT_DEBUG_CHANNEL(msi)
static UINT get_type(UINT uiProperty)
static UINT suminfo_persist(MSISUMMARYINFO *si)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
static MSISUMMARYINFO * create_suminfo(IStorage *stg, UINT update_count)
LPWSTR msi_get_suminfo_product(IStorage *stg)
UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, const char *szValue)
int JSAMPARRAY int int num_rows
#define MSIDBOPEN_TRANSACT
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int msiobj_release(MSIOBJECTHDR *info)
UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE hSummaryInfo, UINT *pCount)
UINT WINAPI MsiCreateTransformSummaryInfoW(MSIHANDLE db, MSIHANDLE db_ref, const WCHAR *transform, int error, int validation)
#define memcpy(s1, s2, n)
PROPVARIANT property[MSI_MAX_PROPS]
GLsizei const GLfloat * value
struct tagFORMATIDOFFSET FORMATIDOFFSET
UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase, const char *szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
static DWORD write_dword(LPBYTE data, DWORD ofs, DWORD val)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
int WINAPI lstrlenA(LPCSTR lpString)
static DOUBLE utc(DOUBLE time, DateInstance *date)
static UINT set_prop(MSISUMMARYINFO *si, UINT uiProperty, UINT type, INT iValue, FILETIME *pftValue, awcstring *str)
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 IPropertySystem propsys
INT msi_suminfo_get_int32(MSISUMMARYINFO *si, UINT uiProperty)
union awcstring::@488 str
MSIHANDLE alloc_msihandle(MSIOBJECTHDR *obj)
static UINT get_prop(MSISUMMARYINFO *si, UINT uiProperty, UINT *puiDataType, INT *piValue, FILETIME *pftValue, awstring *str, DWORD *pcchValueBuf)
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
static UINT save_summary_info(const MSISUMMARYINFO *si, IStream *stm)
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int) DECLSPEC_HIDDEN
#define MultiByteToWideChar
UINT msi_get_suminfo(IStorage *stg, UINT uiUpdateCount, MSISUMMARYINFO **ret)
UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE handle)
static void parse_filetime(LPCWSTR str, FILETIME *ft)
static void * msi_alloc(size_t len) __WINE_ALLOC_SIZE(1)
GLuint GLenum GLenum transform
static UINT parse_prop(LPCWSTR prop, LPCWSTR value, UINT *pid, INT *int_value, FILETIME *ft_value, awcstring *str_value)
#define GetProcAddress(x, y)
UINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE handle, UINT uiProperty, UINT *puiDataType, INT *piValue, FILETIME *pftValue, char *szValueBuf, DWORD *pcchValueBuf)
GLuint GLuint GLsizei GLenum type
BOOL WINAPI TzSpecificLocalTimeToSystemTime(LPTIME_ZONE_INFORMATION lpTimeZoneInformation, LPSYSTEMTIME lpLocalTime, LPSYSTEMTIME lpUniversalTime)
#define GetExceptionCode()
void * msihandle2msiinfo(MSIHANDLE handle, UINT type)
UINT msi_add_suminfo(MSIDATABASE *db, LPWSTR **records, int num_records, int num_columns)
static void read_properties_from_data(PROPVARIANT *prop, LPBYTE data, DWORD sz)
UINT __cdecl s_remote_SummaryInfoGetPropertyCount(MSIHANDLE suminfo, UINT *count)
static WCHAR * strdupAtoW(const char *str)
struct tagPROPERTYSETHEADER PROPERTYSETHEADER
MSIHANDLE alloc_msi_remote_handle(MSIHANDLE remote)
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