24 #define NONAMELESSUNION 33 #include "wine/unicode.h" 40 #include "msiserver.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 %d\n", idofs[
i].propid );
207 ERR(
"propid %d 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.u.pszVal =
str;
232 property.u.filetime = propdata->
u.
ft;
234 property.u.iVal = propdata->
u.
i2;
236 property.u.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 %d %d\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 );
522 uiUpdateCount, pHandle);
544 if ( !remote_database )
547 hr = IWineMsiRemoteDatabase_GetSummaryInformation( remote_database,
548 uiUpdateCount, pHandle );
549 IWineMsiRemoteDatabase_Release( remote_database );
593 uiUpdateCount, pHandle);
613 TRACE(
"%d %p\n", hSummaryInfo, pCount);
635 *puiDataType = prop->vt;
641 *piValue = prop->u.iVal;
645 *piValue = prop->u.lVal;
663 if (
len >= *pcchValueBuf)
670 *pftValue = prop->u.filetime;
675 FIXME(
"Unknown property variant type\n");
700 if( prop->vt !=
VT_I4 )
714 ERR(
"no summary information!\n");
730 TRACE(
"%u, %u, %p, %p, %p, %p, %p\n",
handle, uiProperty, puiDataType,
731 piValue, pftValue, szValueBuf, pcchValueBuf );
735 if (puiDataType) *puiDataType =
VT_EMPTY;
743 str.str.a = szValueBuf;
745 r =
get_prop( si, uiProperty, puiDataType, piValue, pftValue, &
str, pcchValueBuf );
758 TRACE(
"%u, %u, %p, %p, %p, %p, %p\n",
handle, uiProperty, puiDataType,
759 piValue, pftValue, szValueBuf, pcchValueBuf );
763 if (puiDataType) *puiDataType =
VT_EMPTY;
771 str.str.w = szValueBuf;
773 r =
get_prop( si, uiProperty, puiDataType, piValue, pftValue, &
str, pcchValueBuf );
784 TRACE(
"%p, %u, %u, %d, %p, %p\n", si, uiProperty,
type, iValue, pftValue,
str );
795 else if( prop->vt !=
type )
803 prop->u.lVal = iValue;
806 prop->u.iVal = iValue;
809 prop->u.filetime = *pftValue;
839 TRACE(
"%u, %u, %u, %d, %p, %s\n",
handle, uiProperty, uiDataType, iValue, pftValue,
846 if( uiDataType ==
VT_LPSTR && !szValue )
870 TRACE(
"%u, %u, %u, %d, %p, %s\n",
handle, uiProperty, uiDataType, iValue, pftValue,
877 if( uiDataType ==
VT_LPSTR && !szValue )
889 ret =
set_prop( si, uiProperty, uiDataType, iValue, pftValue, &
str );
906 IStream_Release( stm );
917 memset( <, 0,
sizeof(lt) );
924 if (*
end !=
'/')
return;
928 if (*
end !=
'/')
return;
932 if (*
end !=
' ')
return;
938 if (*
end !=
':')
return;
942 if (*
end !=
':')
return;
958 case PID_CODEPAGE_MSI:
965 case PID_SECURITY_MSI:
993 WARN(
"unhandled prop id %u\n", *
pid);
1014 for (
i = 0;
i < num_records;
i++)
1016 for (
j = 0;
j < num_columns;
j += 2)
1023 r =
parse_prop( records[
i][
j], records[
i][
j + 1], &
pid, &int_value, &ft_value, &str_value );
1043 static const char fmt_systemtime[] =
"%d/%02d/%02d %02d:%02d:%02d";
1045 static const char fmt_begin[] =
"%u\t";
1046 static const char data_end[] =
"\r\n";
1047 static const char fmt_int[] =
"%u";
1109 FIXME(
"Unknown property variant type\n" );
1192 static const WCHAR packagecodeW[] = {
'P',
'a',
'c',
'k',
'a',
'g',
'e',
'C',
'o',
'd',
'e',0};
1194 WCHAR *package_code;
1205 ERR(
"Unable to open summary information stream %u\n",
r);
1216 WARN(
"Unable to query revision number %u\n",
r);
1223 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
#define MSIDBOPEN_READONLY
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
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
UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE handle, UINT uiProperty, PUINT puiDataType, LPINT piValue, FILETIME *pftValue, LPWSTR szValueBuf, LPDWORD pcchValueBuf)
static UINT write_property_to_data(const PROPVARIANT *prop, LPBYTE data)
static DWORD write_filetime(LPBYTE data, DWORD ofs, const FILETIME *ft)
#define WideCharToMultiByte
#define STGM_SHARE_EXCLUSIVE
union awcstring::@484 str
static UINT get_property_count(const PROPVARIANT *property)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS flags
static void free_prop(PROPVARIANT *prop)
GLdouble GLdouble GLdouble r
WINE_UNICODE_INLINE int isspaceW(WCHAR wc)
GLuint GLuint GLsizei count
UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
#define MSIHANDLETYPE_SUMMARYINFO
#define ERROR_INVALID_HANDLE
#define ERROR_DATATYPE_MISMATCH
static HRESULT(WINAPI *pPropVariantChangeType)(PROPVARIANT *ppropvarDest
#define ERROR_NOT_ENOUGH_MEMORY
struct tagPROPERTYIDOFFSET PROPERTYIDOFFSET
UINT WINAPI MsiGetSummaryInformationW(MSIHANDLE hDatabase, LPCWSTR szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
#define MSIHANDLETYPE_DATABASE
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)
_In_ DWORD _In_ DWORD dwOffset
static const WCHAR szSumInfo[]
const FMTID FMTID_SummaryInformation
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
struct tagPROPERTYSECTIONHEADER PROPERTYSECTIONHEADER
static UINT load_summary_info(MSISUMMARYINFO *si, IStream *stm)
#define HRESULT_FACILITY(hr)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, LPCSTR szValue)
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)
UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE hSummaryInfo, PUINT pCount)
static MSISUMMARYINFO * create_suminfo(IStorage *stg, UINT update_count)
LPWSTR msi_get_suminfo_product(IStorage *stg)
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
UINT WINAPI MsiCreateTransformSummaryInfoW(MSIHANDLE db, MSIHANDLE db_ref, LPCWSTR transform, int error, int validation)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int msiobj_release(MSIOBJECTHDR *info)
union PROPERTY_DATA::@489 u
UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase, LPCSTR szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
#define memcpy(s1, s2, n)
PROPVARIANT property[MSI_MAX_PROPS]
GLsizei const GLfloat * value
UINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE handle, UINT uiProperty, PUINT puiDataType, LPINT piValue, FILETIME *pftValue, LPSTR szValueBuf, LPDWORD pcchValueBuf)
struct tagFORMATIDOFFSET FORMATIDOFFSET
static const WCHAR szDatabase[]
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)
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 WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE db, MSIHANDLE db_ref, LPCSTR transform, int error, int validation)
UINT msi_get_suminfo(IStorage *stg, UINT uiUpdateCount, MSISUMMARYINFO **ret)
UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE handle)
static BOOL msi_free(void *mem)
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)
IUnknown * msi_get_remote(MSIHANDLE handle)
GLuint GLuint GLsizei GLenum type
BOOL WINAPI TzSpecificLocalTimeToSystemTime(LPTIME_ZONE_INFORMATION lpTimeZoneInformation, LPSYSTEMTIME lpLocalTime, LPSYSTEMTIME lpUniversalTime)
UINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, LPCWSTR szValue)
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)
static WCHAR * strdupAtoW(const char *str)
struct tagPROPERTYSETHEADER PROPERTYSETHEADER
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