UINT WINAPI MsiDatabaseImportW(MSIHANDLE handle, LPCWSTR szFolder, LPCWSTR szFilename) { MSIDATABASE *db; UINT r; TRACE("%lx %s %s\n",handle,debugstr_w(szFolder), debugstr_w(szFilename)); db = msihandle2msiinfo( handle, MSIHANDLETYPE_DATABASE ); if( !db ) return ERROR_INVALID_HANDLE; r = MSI_DatabaseImport( db, szFolder, szFilename ); msiobj_release( &db->hdr ); return r; }
MSIDBSTATE WINAPI MsiGetDatabaseState( MSIHANDLE handle ) { MSIDBSTATE ret = MSIDBSTATE_READ; MSIDATABASE *db; TRACE("%ld\n", handle); db = msihandle2msiinfo( handle, MSIHANDLETYPE_DATABASE ); if (!db) return MSIDBSTATE_ERROR; if (db->mode != MSIDBOPEN_READONLY ) ret = MSIDBSTATE_WRITE; msiobj_release( &db->hdr ); return ret; }
UINT WINAPI MsiRecordReadStream(MSIHANDLE handle, UINT iField, char *buf, LPDWORD sz) { MSIRECORD *rec; UINT ret; TRACE("%d %d %p %p\n", handle, iField, buf, sz); rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) return ERROR_INVALID_HANDLE; msiobj_lock( &rec->hdr ); ret = MSI_RecordReadStream( rec, iField, buf, sz ); msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); return ret; }
UINT WINAPI MsiRecordDataSize(MSIHANDLE handle, UINT iField) { MSIRECORD *rec; UINT ret; TRACE("%d %d\n", handle, iField); rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) return 0; msiobj_lock( &rec->hdr ); ret = MSI_RecordDataSize( rec, iField); msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); return ret; }
UINT WINAPI MsiRecordSetStringA( MSIHANDLE handle, UINT iField, LPCSTR szValue ) { MSIRECORD *rec; UINT ret; TRACE("%d %d %s\n", handle, iField, debugstr_a(szValue)); rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) return ERROR_INVALID_HANDLE; msiobj_lock( &rec->hdr ); ret = MSI_RecordSetStringA( rec, iField, szValue ); msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); return ret; }
UINT WINAPI MsiRecordSetInteger( MSIHANDLE handle, UINT iField, int iVal ) { MSIRECORD *rec; UINT ret; TRACE("%d %u %d\n", handle, iField, iVal); rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) return ERROR_INVALID_HANDLE; msiobj_lock( &rec->hdr ); ret = MSI_RecordSetInteger( rec, iField, iVal ); msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); return ret; }
UINT WINAPI MsiPreviewDialogW( MSIHANDLE hPreview, LPCWSTR szDialogName ) { MSIPREVIEW *preview; UINT r; TRACE("%ld %s\n", hPreview, debugstr_w(szDialogName)); preview = msihandle2msiinfo( hPreview, MSIHANDLETYPE_PREVIEW ); if( !preview ) return ERROR_INVALID_HANDLE; r = MSI_PreviewDialogW( preview, szDialogName ); msiobj_release( &preview->hdr ); return r; }
UINT WINAPI MsiRecordGetFieldCount( MSIHANDLE handle ) { MSIRECORD *rec; UINT ret; TRACE("%d\n", handle ); rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) return -1; msiobj_lock( &rec->hdr ); ret = MSI_RecordGetFieldCount( rec ); msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); return ret; }
UINT WINAPI MsiRecordGetStringW(MSIHANDLE handle, UINT iField, LPWSTR szValue, LPDWORD pcchValue) { MSIRECORD *rec; UINT ret; TRACE("%d %d %p %p\n", handle, iField, szValue, pcchValue); rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) return ERROR_INVALID_HANDLE; msiobj_lock( &rec->hdr ); ret = MSI_RecordGetStringW( rec, iField, szValue, pcchValue ); msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); return ret; }
int WINAPI MsiRecordGetInteger( MSIHANDLE handle, UINT iField) { MSIRECORD *rec; UINT ret; TRACE("%d %d\n", handle, iField ); rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) return MSI_NULL_INTEGER; msiobj_lock( &rec->hdr ); ret = MSI_RecordGetInteger( rec, iField ); msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); return ret; }
UINT WINAPI MsiEnableUIPreview( MSIHANDLE hdb, MSIHANDLE* phPreview ) { MSIDATABASE *db; MSIPREVIEW *preview; UINT r = ERROR_FUNCTION_FAILED; TRACE("%ld %p\n", hdb, phPreview); db = msihandle2msiinfo( hdb, MSIHANDLETYPE_DATABASE ); if( !db ) { IWineMsiRemoteDatabase *remote_database; remote_database = (IWineMsiRemoteDatabase *)msi_get_remote( hdb ); if ( !remote_database ) return ERROR_INVALID_HANDLE; *phPreview = 0; IWineMsiRemoteDatabase_Release( remote_database ); WARN("MsiEnableUIPreview not allowed during a custom action!\n"); return ERROR_FUNCTION_FAILED; } preview = MSI_EnableUIPreview( db ); if( preview ) { *phPreview = alloc_msihandle( &preview->hdr ); msiobj_release( &preview->hdr ); r = ERROR_SUCCESS; if (! *phPreview) r = ERROR_NOT_ENOUGH_MEMORY; } msiobj_release( &db->hdr ); return r; }
UINT WINAPI MsiRecordSetStringA( MSIHANDLE handle, UINT iField, LPCSTR szValue ) { WCHAR *valueW = NULL; MSIRECORD *rec; UINT ret; TRACE("%d %d %s\n", handle, iField, debugstr_a(szValue)); if (szValue && !(valueW = strdupAtoW( szValue ))) return ERROR_OUTOFMEMORY; rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) { msi_free( valueW ); return ERROR_INVALID_HANDLE; } msiobj_lock( &rec->hdr ); ret = MSI_RecordSetStringW( rec, iField, valueW ); msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); msi_free( valueW ); return ret; }
UINT WINAPI MsiRecordClearData( MSIHANDLE handle ) { MSIRECORD *rec; UINT i; TRACE("%d\n", handle ); rec = msihandle2msiinfo( handle, MSIHANDLETYPE_RECORD ); if( !rec ) return ERROR_INVALID_HANDLE; msiobj_lock( &rec->hdr ); for( i=0; i<=rec->count; i++) { MSI_FreeField( &rec->fields[i] ); rec->fields[i].type = MSIFIELD_NULL; rec->fields[i].u.iVal = 0; } msiobj_unlock( &rec->hdr ); msiobj_release( &rec->hdr ); return ERROR_SUCCESS; }