93#define SECT_HDR_SIZE (sizeof(struct property_section_header))
109 IStorage_Release( si->
storage );
113#define PID_DICTIONARY_MSI 0
114#define PID_CODEPAGE_MSI 1
115#define PID_SECURITY_MSI 19
123 case PID_CODEPAGE_MSI:
148 case PID_SECURITY_MSI:
176 if (!pPropVariantChangeType)
178 ERR(
"PropVariantChangeType function missing!\n");
205 ERR(
"unknown property ID %lu\n", idofs[
i].
propid );
212 ERR(
"propid %lu has unknown type\n", idofs[
i].
propid );
224 ERR(
"not enough data\n");
228 property.vt = propdata->
type;
233 str[ propdata->
u.
str.len - 1 ] = 0;
234 property.pszVal =
str;
237 property.filetime = propdata->
u.
ft;
239 property.iVal = propdata->
u.
i2;
241 property.lVal = propdata->
u.
i4;
266 TRACE(
"%p %p\n", si, stm);
270 r = IStream_Read( stm, &set_hdr, sz, &
count );
276 ERR(
"property set not big-endian %04X\n", set_hdr.
wByteOrder);
280 sz =
sizeof format_hdr;
281 r = IStream_Read( stm, &format_hdr, sz, &
count );
291 r = IStream_Seek( stm, ofs, STREAM_SEEK_SET,
NULL );
297 r = IStream_Read( stm, §ion_hdr, sz, &
count );
319 ERR(
"failed to read properties %lu %lu\n",
count, sz );
350 return (7 +
len) & ~3;
394 memset( &set_hdr, 0, sz );
400 r = IStream_Write( stm, &set_hdr, sz, &
count );
405 sz =
sizeof format_hdr;
407 format_hdr.
dwOffset =
sizeof format_hdr +
sizeof set_hdr;
408 r = IStream_Write( stm, &format_hdr, sz, &
count );
413 section_hdr.
cbSection =
sizeof section_hdr;
430 memcpy( &
data[sz], §ion_hdr,
sizeof section_hdr );
431 sz +=
sizeof section_hdr;
456 IStorage_AddRef( stg );
469 TRACE(
"%p, %u\n", stg, uiUpdateCount);
481 IStream_Release( stm );
508 IStream_Release( stm );
526 TRACE(
"%lu, %s, %u, %p\n", hDatabase,
debugstr_w(szDatabase), uiUpdateCount, pHandle );
531 if( szDatabase && szDatabase[0] )
551 ret = remote_DatabaseGetSummaryInformation(remote, uiUpdateCount, &remote_suminfo);
595 TRACE(
"%lu, %s, %u, %p\n", hDatabase,
debugstr_a(szDatabase), uiUpdateCount, pHandle );
615 TRACE(
"%lu, %p\n", hSummaryInfo, pCount );
628 ret = remote_SummaryInfoGetPropertyCount( remote, pCount );
655 *puiDataType = prop->vt;
661 *piValue = prop->iVal;
665 *piValue = prop->lVal;
683 if (
len >= *pcchValueBuf)
690 *pftValue = prop->filetime;
695 FIXME(
"Unknown property variant type\n");
720 if( prop->vt !=
VT_I4 )
734 ERR(
"no summary information!\n");
749 TRACE(
"%lu, %u, %p, %p, %p, %p, %p\n",
handle, uiProperty, puiDataType, piValue, pftValue, szValueBuf,
754 if (puiDataType) *puiDataType =
VT_EMPTY;
768 r = remote_SummaryInfoGetProperty( remote, uiProperty, puiDataType, piValue, pftValue, &
buf );
786 str.str.a = szValueBuf;
788 r =
get_prop( si, uiProperty, puiDataType, piValue, pftValue, &
str, pcchValueBuf );
800 TRACE(
"%lu, %u, %p, %p, %p, %p, %p\n",
handle, uiProperty, puiDataType, piValue, pftValue, szValueBuf,
805 if (puiDataType) *puiDataType =
VT_EMPTY;
819 r = remote_SummaryInfoGetProperty( remote, uiProperty, puiDataType, piValue, pftValue, &
buf );
835 str.str.w = szValueBuf;
837 r =
get_prop( si, uiProperty, puiDataType, piValue, pftValue, &
str, pcchValueBuf );
848 TRACE(
"%p, %u, %u, %d, %p, %p\n", si, uiProperty,
type, iValue, pftValue,
str );
859 else if( prop->vt !=
type )
873 prop->filetime = *pftValue;
919 TRACE(
"%lu, %u, %u, %d, %p, %s\n",
handle, uiProperty, uiDataType, iValue, pftValue,
debugstr_w(szValue) );
927 WARN(
"MsiSummaryInfoSetProperty not allowed during a custom action!\n");
943 FILETIME *pftValue,
const char *szValue )
949 TRACE(
"%lu, %u, %u, %d, %p, %s\n",
handle, uiProperty, uiDataType, iValue, pftValue,
debugstr_a(szValue) );
957 WARN(
"MsiSummaryInfoSetProperty not allowed during a custom action!\n");
980 r = IStorage_CreateStream( si->
storage,
L"\5SummaryInformation", grfMode, 0, 0, &stm );
984 IStream_Release( stm );
995 memset( <, 0,
sizeof(lt) );
1002 if (*
end !=
'/')
return;
1006 if (*
end !=
'/')
return;
1010 if (*
end !=
' ')
return;
1016 if (*
end !=
':')
return;
1020 if (*
end !=
':')
return;
1036 case PID_CODEPAGE_MSI:
1043 case PID_SECURITY_MSI:
1071 WARN(
"unhandled prop id %u\n", *
pid);
1092 for (
i = 0;
i < num_records;
i++)
1094 for (
j = 0;
j < num_columns;
j += 2)
1101 r =
parse_prop( records[
i][
j], records[
i][
j + 1], &
pid, &int_value, &ft_value, &str_value );
1121 static const char fmt_systemtime[] =
"%04u/%02u/%02u %02u:%02u:%02u";
1123 static const char fmt_begin[] =
"%u\t";
1124 static const char data_end[] =
"\r\n";
1125 static const char fmt_int[] =
"%u";
1184 FIXME(
"Unknown property variant type\n" );
1270 WCHAR *package_code;
1282 ERR(
"Unable to open summary information stream %u\n",
r);
1293 WARN(
"Unable to query revision number %u\n",
r);
1300 str.str.w = package_code;
1305 free( package_code );
1311 free( package_code );
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const CHAR suminfo[]
#define ERROR_NOT_ENOUGH_MEMORY
static const WCHAR empty[]
static WCHAR * strdupAtoW(const char *str)
#define ERROR_INVALID_PARAMETER
#define GetProcAddress(x, y)
#define ERROR_INVALID_HANDLE
#define WideCharToMultiByte
#define MultiByteToWideChar
static DOUBLE utc(DOUBLE time, DateInstance *date)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
BOOL WINAPI TzSpecificLocalTimeToSystemTime(LPTIME_ZONE_INFORMATION lpTimeZoneInformation, LPSYSTEMTIME lpLocalTime, LPSYSTEMTIME lpUniversalTime)
LONG WINAPI rpc_filter(EXCEPTION_POINTERS *eptr)
UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
void * alloc_msiobject(UINT type, UINT size, msihandledestructor destroy)
MSIHANDLE alloc_msihandle(MSIOBJECTHDR *obj)
MSIHANDLE msi_get_remote(MSIHANDLE handle)
MSIHANDLE alloc_msi_remote_handle(MSIHANDLE remote)
int msiobj_release(MSIOBJECTHDR *info)
void * msihandle2msiinfo(MSIHANDLE handle, UINT type)
UINT msi_strncpyW(const WCHAR *str, int len, WCHAR *buf, DWORD *sz)
UINT msi_strncpyWtoA(const WCHAR *str, int lenW, char *buf, DWORD *sz, BOOL remote)
UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, const char *szValue)
static UINT suminfo_set_prop(MSISUMMARYINFO *si, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, awcstring *str)
UINT msi_get_suminfo(IStorage *stg, UINT uiUpdateCount, MSISUMMARYINFO **ret)
UINT msi_get_db_suminfo(MSIDATABASE *db, UINT uiUpdateCount, MSISUMMARYINFO **ret)
static REFPROPVARIANT propvarSrc
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 WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE handle, UINT uiProperty, UINT *puiDataType, INT *piValue, FILETIME *pftValue, char *szValueBuf, DWORD *pcchValueBuf)
UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase, const char *szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
static UINT propvar_changetype(PROPVARIANT *changed, PROPVARIANT *property, VARTYPE vt)
static DWORD write_dword(LPBYTE data, DWORD ofs, DWORD val)
static DWORD write_filetime(LPBYTE data, DWORD ofs, const FILETIME *ft)
LPWSTR msi_get_suminfo_product(IStorage *stg)
UINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE db, MSIHANDLE db_ref, const char *transform, int error, int validation)
static UINT load_summary_info(MSISUMMARYINFO *si, IStream *stm)
static UINT save_prop(MSISUMMARYINFO *si, HANDLE handle, UINT row)
UINT msi_load_suminfo_properties(MSIPACKAGE *package)
static UINT parse_prop(LPCWSTR prop, LPCWSTR value, UINT *pid, INT *int_value, FILETIME *ft_value, awcstring *str_value)
static void MSI_CloseSummaryInfo(MSIOBJECTHDR *arg)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
static UINT get_prop(MSISUMMARYINFO *si, UINT uiProperty, UINT *puiDataType, INT *piValue, FILETIME *pftValue, awstring *str, DWORD *pcchValueBuf)
UINT __cdecl s_remote_SummaryInfoGetPropertyCount(MSIHANDLE suminfo, UINT *count)
static UINT suminfo_persist(MSISUMMARYINFO *si)
UINT WINAPI MsiGetSummaryInformationW(MSIHANDLE hDatabase, const WCHAR *szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
INT msi_suminfo_get_int32(MSISUMMARYINFO *si, UINT uiProperty)
static void free_prop(PROPVARIANT *prop)
UINT msi_export_suminfo(MSIDATABASE *db, HANDLE handle)
static void parse_filetime(LPCWSTR str, FILETIME *ft)
UINT __cdecl s_remote_SummaryInfoGetProperty(MSIHANDLE suminfo, UINT property, UINT *type, INT *value, FILETIME *ft, LPWSTR *buf)
UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE handle, UINT uiProperty, UINT *puiDataType, INT *piValue, FILETIME *pftValue, WCHAR *szValueBuf, DWORD *pcchValueBuf)
LPWSTR msi_suminfo_dup_string(MSISUMMARYINFO *si, UINT uiProperty)
UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE hSummaryInfo, UINT *pCount)
UINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, const WCHAR *szValue)
static UINT save_summary_info(const MSISUMMARYINFO *si, IStream *stm)
static MSISUMMARYINFO * create_suminfo(IStorage *stg, UINT update_count)
static DWORD write_string(LPBYTE data, DWORD ofs, LPCSTR str)
static UINT write_property_to_data(const PROPVARIANT *prop, LPBYTE data)
static UINT set_prop(MSISUMMARYINFO *si, UINT uiProperty, UINT type, INT iValue, FILETIME *pftValue, awcstring *str)
static UINT get_property_count(const PROPVARIANT *property)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS flags
UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE handle)
static UINT get_type(UINT uiProperty)
UINT WINAPI MsiCreateTransformSummaryInfoW(MSIHANDLE db, MSIHANDLE db_ref, const WCHAR *transform, int error, int validation)
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
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLuint GLenum GLenum transform
GLenum GLuint GLenum GLsizei const GLchar * buf
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)
int JSAMPARRAY int int num_rows
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
struct _FILETIME FILETIME
#define memcpy(s1, s2, n)
#define sprintf(buf, format,...)
#define MSIHANDLETYPE_DATABASE
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int)
UINT msi_get_stream(MSIDATABASE *, const WCHAR *, IStream **)
#define MSIHANDLETYPE_SUMMARYINFO
#define MSIDBOPEN_TRANSACT
#define MSIDBOPEN_READONLY
_In_ DWORD _In_ DWORD dwOffset
#define STGM_SHARE_EXCLUSIVE
const FMTID FMTID_SummaryInformation
static IPropertySystem propsys
#define IsEqualGUID(rguid1, rguid2)
#define GetExceptionCode()
#define midl_user_allocate
union awcstring::@504 str
union property_data::@509 u
PROPVARIANT property[MSI_MAX_PROPS]
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
#define ERROR_WRITE_FAULT
#define ERROR_FUNCTION_FAILED
#define ERROR_UNKNOWN_PROPERTY
#define ERROR_DATATYPE_MISMATCH