92#define SECT_HDR_SIZE (sizeof(struct property_section_header))
108 IStorage_Release(
si->storage );
112#define PID_DICTIONARY_MSI 0
113#define PID_CODEPAGE_MSI 1
114#define PID_SECURITY_MSI 19
122 case PID_CODEPAGE_MSI:
147 case PID_SECURITY_MSI:
175 if (!pPropVariantChangeType)
177 ERR(
"PropVariantChangeType function missing!\n");
204 ERR(
"unknown property ID %lu\n", idofs[
i].
propid );
211 ERR(
"propid %lu has unknown type\n", idofs[
i].
propid );
223 ERR(
"not enough data\n");
227 property.vt = propdata->
type;
232 str[ propdata->
u.
str.len - 1 ] = 0;
233 property.pszVal =
str;
236 property.filetime = propdata->
u.
ft;
238 property.iVal = propdata->
u.
i2;
240 property.lVal = propdata->
u.
i4;
269 r = IStream_Read( stm, &set_hdr, sz, &
count );
275 ERR(
"property set not big-endian %04X\n", set_hdr.
wByteOrder);
279 sz =
sizeof format_hdr;
280 r = IStream_Read( stm, &format_hdr, sz, &
count );
290 r = IStream_Seek( stm, ofs, STREAM_SEEK_SET,
NULL );
296 r = IStream_Read( stm, §ion_hdr, sz, &
count );
318 ERR(
"failed to read properties %lu %lu\n",
count, sz );
349 return (7 +
len) & ~3;
393 memset( &set_hdr, 0, sz );
399 r = IStream_Write( stm, &set_hdr, sz, &
count );
404 sz =
sizeof format_hdr;
406 format_hdr.
dwOffset =
sizeof format_hdr +
sizeof set_hdr;
407 r = IStream_Write( stm, &format_hdr, sz, &
count );
412 section_hdr.
cbSection =
sizeof section_hdr;
429 memcpy( &
data[sz], §ion_hdr,
sizeof section_hdr );
430 sz +=
sizeof section_hdr;
454 si->update_count = update_count;
455 IStorage_AddRef( stg );
468 TRACE(
"%p, %u\n", stg, uiUpdateCount);
480 IStream_Release( stm );
507 IStream_Release( stm );
525 TRACE(
"%lu, %s, %u, %p\n", hDatabase,
debugstr_w(szDatabase), uiUpdateCount, pHandle );
530 if( szDatabase && szDatabase[0] )
550 ret = remote_DatabaseGetSummaryInformation(remote, uiUpdateCount, &remote_suminfo);
594 TRACE(
"%lu, %s, %u, %p\n", hDatabase,
debugstr_a(szDatabase), uiUpdateCount, pHandle );
614 TRACE(
"%lu, %p\n", hSummaryInfo, pCount );
627 ret = remote_SummaryInfoGetPropertyCount( remote, pCount );
651 prop = &
si->property[uiProperty];
654 *puiDataType = prop->vt;
660 *piValue = prop->iVal;
664 *piValue = prop->lVal;
682 if (
len >= *pcchValueBuf)
689 *pftValue = prop->filetime;
694 FIXME(
"Unknown property variant type\n");
706 prop = &
si->property[uiProperty];
718 prop = &
si->property[uiProperty];
719 if( prop->vt !=
VT_I4 )
733 ERR(
"no summary information!\n");
748 TRACE(
"%lu, %u, %p, %p, %p, %p, %p\n",
handle, uiProperty, puiDataType, piValue, pftValue, szValueBuf,
753 if (puiDataType) *puiDataType =
VT_EMPTY;
767 r = remote_SummaryInfoGetProperty( remote, uiProperty, puiDataType, piValue, pftValue, &
buf );
785 str.str.a = szValueBuf;
799 TRACE(
"%lu, %u, %p, %p, %p, %p, %p\n",
handle, uiProperty, puiDataType, piValue, pftValue, szValueBuf,
804 if (puiDataType) *puiDataType =
VT_EMPTY;
818 r = remote_SummaryInfoGetProperty( remote, uiProperty, puiDataType, piValue, pftValue, &
buf );
834 str.str.w = szValueBuf;
847 TRACE(
"%p, %u, %u, %d, %p, %p\n",
si, uiProperty,
type, iValue, pftValue,
str );
849 prop = &
si->property[uiProperty];
853 if( !
si->update_count )
858 else if( prop->vt !=
type )
872 prop->filetime = *pftValue;
918 TRACE(
"%lu, %u, %u, %d, %p, %s\n",
handle, uiProperty, uiDataType, iValue, pftValue,
debugstr_w(szValue) );
926 WARN(
"MsiSummaryInfoSetProperty not allowed during a custom action!\n");
942 FILETIME *pftValue,
const char *szValue )
948 TRACE(
"%lu, %u, %u, %d, %p, %s\n",
handle, uiProperty, uiDataType, iValue, pftValue,
debugstr_a(szValue) );
956 WARN(
"MsiSummaryInfoSetProperty not allowed during a custom action!\n");
979 r = IStorage_CreateStream(
si->storage,
L"\5SummaryInformation", grfMode, 0, 0, &stm );
983 IStream_Release( stm );
994 memset( <, 0,
sizeof(lt) );
1001 if (*
end !=
'/')
return;
1005 if (*
end !=
'/')
return;
1009 if (*
end !=
' ')
return;
1015 if (*
end !=
':')
return;
1019 if (*
end !=
':')
return;
1035 case PID_CODEPAGE_MSI:
1042 case PID_SECURITY_MSI:
1070 WARN(
"unhandled prop id %u\n", *
pid);
1091 for (
i = 0;
i < num_records;
i++)
1093 for (
j = 0;
j < num_columns;
j += 2)
1100 r =
parse_prop( records[
i][
j], records[
i][
j + 1], &
pid, &int_value, &ft_value, &str_value );
1120 static const char fmt_systemtime[] =
"%04u/%02u/%02u %02u:%02u:%02u";
1122 static const char fmt_begin[] =
"%u\t";
1123 static const char data_end[] =
"\r\n";
1124 static const char fmt_int[] =
"%u";
1183 FIXME(
"Unknown property variant type\n" );
1269 WCHAR *package_code;
1281 ERR(
"Unable to open summary information stream %u\n",
r);
1292 WARN(
"Unable to query revision number %u\n",
r);
1299 str.str.w = package_code;
1304 free( package_code );
1310 free( package_code );
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const CHAR suminfo[]
#define ERROR_NOT_ENOUGH_MEMORY
static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *eptr)
static const WCHAR empty[1]
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_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
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(CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation, CONST SYSTEMTIME *lpLocalTime, LPSYSTEMTIME lpUniversalTime)
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)
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)
UINT msi_suminfo_set_prop(MSISUMMARYINFO *si, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, awcstring *str)
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)
UINT msi_suminfo_persist(MSISUMMARYINFO *si)
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)
UINT msi_suminfo_get_prop(MSISUMMARYINFO *si, UINT uiProperty, UINT *puiDataType, INT *piValue, FILETIME *pftValue, awstring *str, DWORD *pcchValueBuf)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
UINT __cdecl s_remote_SummaryInfoGetPropertyCount(MSIHANDLE suminfo, UINT *count)
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)
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
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
enum wined3d_data_type data_type
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
struct _FILETIME FILETIME
#define memcpy(s1, s2, n)
#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_READONLY
#define STGM_SHARE_EXCLUSIVE
const FMTID FMTID_SummaryInformation
static IPropertySystem propsys
#define IsEqualGUID(rguid1, rguid2)
_In_ DWORD _In_ DWORD dwOffset
#define midl_user_allocate
union awcstring::@617 str
union property_data::@622 u
_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