41#define REG_INDEX_CLASSES_ROOT 0
42#define REG_INDEX_DYN_DATA 6
97 ERR(
"Could not load msiserver.tlb\n");
103 ITypeLib_Release(lib);
117 ITypeInfo_Release(ti);
218 IDispatch_AddRef(iface);
255 TRACE(
"(%p/%p)->(%p)\n", iface,
This, pctinfo);
269 TRACE(
"(%p/%p)->(%u, %ld, %p)\n", iface,
This, iTInfo, lcid, ppTInfo );
275 ITypeInfo_AddRef(*ppTInfo);
291 TRACE(
"(%p/%p)->(%s, %p, %u, %ld, %p)\n", iface,
This,
300 hr = ITypeInfo_GetIDsOfNames(ti, rgszNames, cNames, rgDispId);
306 if (rgDispId[
idx] == DISPID_UNKNOWN)
314#define MAX_FUNC_PARAMS 20
323 DISPPARAMS* pDispParams,
325 EXCEPINFO* pExcepInfo,
330 unsigned int uArgErr;
335 TRACE(
"(%p/%p)->(%ld, %s, %ld, %d, %p, %p, %p, %p)\n", iface,
This,
337 pDispParams, pVarResult, pExcepInfo, puArgErr);
347 ERR(
"NULL pVarResult not allowed when DISPATCH_PROPERTYGET specified\n");
352 if (puArgErr ==
NULL) puArgErr = &uArgErr;
353 if (pVarResult ==
NULL) pVarResult = &varResultDummy;
365 ITypeInfo_GetDocumentation(ti, dispIdMember, &bstrName,
NULL,
NULL,
NULL);
372 if (bstrName ==
NULL) ITypeInfo_GetDocumentation(ti, dispIdMember, &bstrName,
NULL,
NULL,
NULL);
373 FIXME(
"method %ld, %s wflags %d not implemented, clsid %s\n", dispIdMember,
debugstr_w(bstrName),
wFlags,
376 else if (pExcepInfo &&
384 if (
FAILED(ITypeInfo_GetNames(ti, dispIdMember, bstrParamNames,
387 TRACE(
"failed to retrieve names for dispIdMember %ld\n", dispIdMember);
391 memset(szExceptionDescription, 0,
sizeof(szExceptionDescription));
392 for (
i=0;
i<namesNo;
i++)
394 if (bFirst) bFirst =
FALSE;
398 lstrcpyW(&szExceptionDescription[
lstrlenW(szExceptionDescription)], bstrParamNames[
i]);
402 memset(pExcepInfo, 0,
sizeof(EXCEPINFO));
403 pExcepInfo->wCode = 1000;
405 pExcepInfo->bstrDescription =
SysAllocString(szExceptionDescription);
411 if (pVarResult == &varResultDummy)
VariantClear(pVarResult);
442 return IDispatch_QueryInterface(&
This->IDispatch_iface,
riid, ppvoid);
448 return IDispatch_AddRef(&
This->IDispatch_iface);
454 return IDispatch_Release(&
This->IDispatch_iface);
462 TRACE(
"(%p/%p)->(%p)\n", iface,
This, ppTI);
466 ITypeInfo_AddRef(*ppTI);
476 if (dwGuidKind != GUIDKIND_DEFAULT_SOURCE_DISP_IID)
488 TRACE(
"(%p/%p)->(%p)\n", iface,
This, pcti);
498 ULONG* pcdispidReserved,
504 TRACE(
"(%p/%p)->(%lu, %#lx, %p, %p, %p, %p, %p)\n", iface,
This, iti,
dwFlags, ti, pdwTIFlags, pcdispidReserved,
505 piidPrimary, piidSource);
510 if (
dwFlags & MULTICLASSINFO_GETTYPEINFO)
516 ITypeInfo_AddRef(*ti);
519 if (
dwFlags & MULTICLASSINFO_GETNUMRESERVEDDISPIDS)
522 *pcdispidReserved = 0;
525 if (
dwFlags & MULTICLASSINFO_GETIIDPRIMARY)
528 if (
dwFlags & MULTICLASSINFO_GETIIDSOURCE)
588 IEnumVARIANT_AddRef(iface);
610 if (
This->list) IDispatch_Release(&
This->list->autoobj.IDispatch_iface);
623 TRACE(
"%p, %lu, %p, %p\n", iface, celt, rgVar, fetched);
625 if (fetched) *fetched = 0;
636 if (fetched) *fetched =
local;
646 TRACE(
"%p, %lu\n", iface, celt);
662 TRACE(
"(%p)\n", iface);
673 TRACE(
"(%p,%p)\n", iface, ppEnum);
682 if (*ppEnum) IEnumVARIANT_Release(*ppEnum);
707 object =
malloc(
sizeof(*
object));
716 if (
list) IDispatch_AddRef(&
list->autoobj.IDispatch_iface);
730 DISPPARAMS *pdispparams,
737 TRACE(
"position=%d, cArgs=%d, cNamedArgs=%d\n",
738 *position, pdispparams->cArgs, pdispparams->cNamedArgs);
739 if (*position < pdispparams->cArgs) {
741 pos = pdispparams->cArgs - *position - 1;
744 for (
pos=0;
pos<pdispparams->cNamedArgs;
pos++)
745 if (pdispparams->rgdispidNamedArgs[
pos] == *position)
break;
747 if (
pos==pdispparams->cNamedArgs)
752 &pdispparams->rgvarg[
pos]);
761 DISPPARAMS* pDispParams,
763 EXCEPINFO* pExcepInfo,
775 switch (dispIdMember)
795 ERR(
"MsiSummaryInfoGetProperty returned %d\n",
ret);
812 ERR(
"Out of memory\n");
815 ERR(
"MsiSummaryInfoGetProperty returned %d\n",
ret);
834 ERR(
"Unhandled variant type %d\n",
type);
839 UINT posValue = DISPID_PROPERTYPUT;
846 *puArgErr = posValue;
850 switch (
V_VT(&varg1))
869 FIXME(
"Unhandled variant type %d\n",
V_VT(&varg1));
876 ERR(
"MsiSummaryInfoSetPropertyW returned %d\n",
ret);
887 ERR(
"MsiSummaryInfoGetPropertyCount returned %d\n",
ret);
913 DISPPARAMS* pDispParams,
915 EXCEPINFO* pExcepInfo,
927 switch (dispIdMember)
945 if (!(szString =
malloc((++dwLen) *
sizeof(
WCHAR))))
946 ERR(
"Out of memory\n");
952 ERR(
"MsiRecordGetString returned %d\n",
ret);
961 ERR(
"MsiRecordSetString returned %d\n",
ret);
981 ERR(
"MsiRecordSetInteger returned %d\n",
ret);
1007 *disp = &
record->IDispatch_iface;
1018 DISPPARAMS* pDispParams,
1020 EXCEPINFO* pExcepInfo,
1027 switch (dispIdMember)
1035 ERR(
"failed to create IEnumVARIANT object, hresult %#lx\n",
hr);
1074 for (
i = 0;
i <
list->count;
i++)
1134 for (
i = 0;
i <
list->count;
i++)
1160 DISPPARAMS* pDispParams,
1162 EXCEPINFO* pExcepInfo,
1173 switch (dispIdMember)
1194 ERR(
"failed to create Record object, hresult %#lx\n",
hr);
1200 ERR(
"MsiViewFetch returned %d\n",
ret);
1219 ERR(
"MsiViewModify returned %d\n",
ret);
1245 DISPPARAMS* pDispParams,
1247 EXCEPINFO* pExcepInfo,
1265 DISPPARAMS* pDispParams,
1267 EXCEPINFO* pExcepInfo,
1279 switch (dispIdMember)
1295 ERR(
"failed to create SummaryInfo object: %#lx\n",
hr);
1299 ERR(
"MsiGetSummaryInformation returned %d\n",
ret);
1317 ERR(
"failed to create View object, hresult %#lx\n",
hr);
1322 ERR(
"MsiDatabaseOpenView returned %d\n",
ret);
1331 pVarResult, pExcepInfo,
1350 DISPPARAMS* pDispParams,
1352 EXCEPINFO* pExcepInfo,
1368 switch (dispIdMember)
1373 IDispatch_AddRef(
session->installer);
1387 if (!(szString =
malloc((++dwLen) *
sizeof(
WCHAR))))
1388 ERR(
"Out of memory\n");
1394 ERR(
"MsiGetProperty returned %d\n",
ret);
1407 ERR(
"MsiSetProperty returned %d\n",
ret);
1418 V_I4(pVarResult) = langId;
1436 ERR(
"MsiSetMode returned %d\n",
ret);
1453 ERR(
"failed to create Database object, hresult %#lx\n",
hr);
1457 ERR(
"MsiGetActiveDatabase failed\n");
1473 V_I4(pVarResult) = msiDoActionStatusNoAction;
1476 V_I4(pVarResult) = msiDoActionStatusSuccess;
1479 V_I4(pVarResult) = msiDoActionStatusUserExit;
1482 V_I4(pVarResult) = msiDoActionStatusFailure;
1485 V_I4(pVarResult) = msiDoActionStatusSuspend;
1488 V_I4(pVarResult) = msiDoActionStatusFinished;
1491 V_I4(pVarResult) = msiDoActionStatusWrongState;
1494 V_I4(pVarResult) = msiDoActionStatusBadActionData;
1498 FIXME(
"MsiDoAction returned unhandled value %d\n",
ret);
1535 ERR(
"MsiSetInstallLevel returned %d\n",
ret);
1548 V_I4(pVarResult) = iInstalled;
1551 ERR(
"MsiGetFeatureState returned %d\n",
ret);
1552 V_I4(pVarResult) = msiInstallStateUnknown;
1564 V_I4(pVarResult) = iAction;
1567 ERR(
"MsiGetFeatureState returned %d\n",
ret);
1568 V_I4(pVarResult) = msiInstallStateUnknown;
1581 ERR(
"MsiSetFeatureState returned %d\n",
ret);
1604 DWORD dwNewSize = 0;
1612 while (
idx >= 0 && !szString[
idx])
idx--;
1614 if (!szString[
idx]) szString[
idx] =
'\n';
1624 else if (!(szNewString =
malloc(dwNewSize *
sizeof(
WCHAR))))
1625 ERR(
"Out of memory\n");
1656 FIXME(
"Unhandled registry value type %lu\n", dwType);
1661 DISPPARAMS* pDispParams,
1663 EXCEPINFO* pExcepInfo,
1689 DISPPARAMS* pDispParams,
1691 EXCEPINFO* pExcepInfo,
1703 if (pDispParams->cArgs == 0)
1706 if (
V_VT(&pDispParams->rgvarg[pDispParams->cArgs - 1]) !=
VT_BSTR)
1715 if (pDispParams->cArgs == 2)
1747 DISPPARAMS* pDispParams,
1749 EXCEPINFO* pExcepInfo,
1772 DISPPARAMS* pDispParams,
1774 EXCEPINFO* pExcepInfo,
1816 DISPPARAMS* pDispParams,
1818 EXCEPINFO* pExcepInfo,
1855 DISPPARAMS* pDispParams,
1857 EXCEPINFO* pExcepInfo,
1892 DISPPARAMS* pDispParams,
1894 EXCEPINFO* pExcepInfo,
1907 DISPPARAMS* pDispParams,
1909 EXCEPINFO* pExcepInfo,
1944 EXCEPINFO* pExcepInfo,
1968 DISPPARAMS* pDispParams,
1970 EXCEPINFO* pExcepInfo,
1983 DISPPARAMS* pDispParams,
1985 EXCEPINFO* pExcepInfo,
2034 switch (
V_VT(&varg2))
2079 *puArgErr = posValue;
2088 else if (
V_I4(&varg2) > 0)
2108 else if (
V_I4(&varg2) > 0)
2132 DISPPARAMS* pDispParams,
2134 EXCEPINFO* pExcepInfo,
2147 DISPPARAMS* pDispParams,
2149 EXCEPINFO* pExcepInfo,
2162 DISPPARAMS* pDispParams,
2164 EXCEPINFO* pExcepInfo,
2177 DISPPARAMS* pDispParams,
2179 EXCEPINFO* pExcepInfo,
2192 DISPPARAMS* pDispParams,
2194 EXCEPINFO* pExcepInfo,
2216 DISPPARAMS* pDispParams,
2218 EXCEPINFO* pExcepInfo,
2275 DISPPARAMS* pDispParams,
2277 EXCEPINFO* pExcepInfo,
2297 DISPPARAMS* pDispParams,
2299 EXCEPINFO* pExcepInfo,
2329 DISPPARAMS* pDispParams,
2331 EXCEPINFO* pExcepInfo,
2334 switch (dispIdMember)
2338 pVarResult, pExcepInfo, puArgErr);
2342 pVarResult, pExcepInfo, puArgErr);
2346 pVarResult, pExcepInfo, puArgErr);
2350 pVarResult, pExcepInfo, puArgErr);
2354 pVarResult, pExcepInfo,
2359 pVarResult, pExcepInfo, puArgErr);
2363 pVarResult, pExcepInfo, puArgErr);
2367 pVarResult, pExcepInfo,
2372 pExcepInfo, puArgErr);
2376 pVarResult, pExcepInfo,
2381 pVarResult, pExcepInfo,
2386 pVarResult, pExcepInfo, puArgErr);
2390 pVarResult, pExcepInfo,
2395 pVarResult, pExcepInfo, puArgErr);
2399 pVarResult, pExcepInfo, puArgErr);
2403 pVarResult, pExcepInfo, puArgErr);
2407 pVarResult, pExcepInfo, puArgErr);
2411 pVarResult, pExcepInfo, puArgErr);
2415 pVarResult, pExcepInfo,
2427 TRACE(
"(%p %p)\n", outer, ppObj);
2432 installer =
malloc(
sizeof(*installer));
2452 *disp = &
session->autoobj.IDispatch_iface;
2463 database =
malloc(
sizeof(*database));
2498 *disp = &
info->IDispatch_iface;
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void dispatch(HANDLE hStopEvent)
#define RegCloseKey(hKey)
STDAPI DllGetVersion(DLLVERSIONINFO *info)
static const WCHAR szEmpty[]
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
#define ERROR_NO_MORE_ITEMS
static const WCHAR version[]
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
BOOL WINAPI LocalFileTimeToFileTime(IN CONST FILETIME *lpLocalFileTime, OUT LPFILETIME lpFileTime)
static HRESULT create_list(const WCHAR *product, IDispatch **dispatch)
static HRESULT WINAPI AutomationObject_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
static HRESULT WINAPI ProvideMultipleClassInfo_GetGUID(IProvideMultipleClassInfo *iface, DWORD dwGuidKind, GUID *pGUID)
static HRESULT installer_invoke(struct automation_object *, DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
static HRESULT DispGetParam_CopyOnly(DISPPARAMS *pdispparams, UINT *position, VARIANT *pvarResult)
static const struct IDispatchVtbl AutomationObjectVtbl
static HRESULT InstallerImpl_SummaryInformation(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static struct list_enumerator * impl_from_IEnumVARIANT(IEnumVARIANT *iface)
static HRESULT InstallerImpl_Products(WORD flags, DISPPARAMS *pDispParams, VARIANT *result, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT InstallerImpl_FileSize(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
#define REG_INDEX_CLASSES_ROOT
static void variant_from_registry_value(VARIANT *pVarResult, DWORD dwType, LPBYTE lpData, DWORD dwSize)
static HRESULT list_invoke(struct automation_object *, DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
static HRESULT InstallerImpl_ProductState(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static struct automation_object * impl_from_IDispatch(IDispatch *iface)
static HRESULT WINAPI AutomationObject_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
static void init_automation_object(struct automation_object *This, MSIHANDLE msiHandle, tid_t tid)
HRESULT create_session(MSIHANDLE msiHandle, IDispatch *installer, IDispatch **disp)
static ITypeLib * typelib
static HRESULT WINAPI ListEnumerator_Next(IEnumVARIANT *iface, ULONG celt, VARIANT *rgVar, ULONG *fetched)
static HRESULT WINAPI ProvideMultipleClassInfo_QueryInterface(IProvideMultipleClassInfo *iface, REFIID riid, VOID **ppvoid)
static ULONG WINAPI ProvideMultipleClassInfo_Release(IProvideMultipleClassInfo *iface)
static HRESULT WINAPI ListEnumerator_Clone(IEnumVARIANT *iface, IEnumVARIANT **ppEnum)
HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
static HRESULT view_invoke(struct automation_object *, DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
static HRESULT InstallerImpl_OpenProduct(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT InstallerImpl_OpenPackage(struct automation_object *This, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static const struct IEnumVARIANTVtbl ListEnumerator_Vtbl
static HRESULT create_record(MSIHANDLE msiHandle, IDispatch **disp)
static HRESULT database_invoke(struct automation_object *, DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
static const IProvideMultipleClassInfoVtbl ProvideMultipleClassInfoVtbl
static struct automation_object * impl_from_IProvideMultipleClassInfo(IProvideMultipleClassInfo *iface)
static HRESULT WINAPI ListEnumerator_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppvObject)
static HRESULT InstallerImpl_UILevel(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT WINAPI ProvideMultipleClassInfo_GetClassInfo(IProvideMultipleClassInfo *iface, ITypeInfo **ppTI)
static HRESULT InstallerImpl_InstallProduct(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT InstallerImpl_RegistryValue(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT WINAPI ListEnumerator_Reset(IEnumVARIANT *iface)
static HRESULT session_invoke(struct automation_object *, DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
static HRESULT InstallerImpl_RelatedProducts(WORD flags, DISPPARAMS *pDispParams, VARIANT *result, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT record_invoke(struct automation_object *, DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
static ULONG WINAPI ProvideMultipleClassInfo_AddRef(IProvideMultipleClassInfo *iface)
static HRESULT WINAPI ListEnumerator_Skip(IEnumVARIANT *iface, ULONG celt)
static ULONG WINAPI ListEnumerator_AddRef(IEnumVARIANT *iface)
void release_typelib(void)
static HRESULT InstallerImpl_LastErrorRecord(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT InstallerImpl_CreateRecord(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT WINAPI AutomationObject_QueryInterface(IDispatch *iface, REFIID riid, void **ppvObject)
static HRESULT InstallerImpl_EnableLog(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static const IID * get_riid_from_tid(tid_t tid)
static HRESULT InstallerImpl_FileVersion(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT WINAPI ProvideMultipleClassInfo_GetInfoOfIndex(IProvideMultipleClassInfo *iface, ULONG iti, DWORD dwFlags, ITypeInfo **ti, DWORD *pdwTIFlags, ULONG *pcdispidReserved, IID *piidPrimary, IID *piidSource)
static HRESULT get_products_count(const WCHAR *product, int *len)
static HRESULT WINAPI AutomationObject_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT create_list_enumerator(struct list_object *, void **)
HRESULT create_msiserver(IUnknown *outer, void **ppObj)
static ULONG WINAPI AutomationObject_AddRef(IDispatch *iface)
static ULONG WINAPI ListEnumerator_Release(IEnumVARIANT *iface)
static HRESULT InstallerImpl_ProductInfo(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static ULONG WINAPI AutomationObject_Release(IDispatch *iface)
static HRESULT DatabaseImpl_LastErrorRecord(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static void list_free(struct automation_object *)
static HRESULT WINAPI AutomationObject_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
static HRESULT WINAPI ProvideMultipleClassInfo_GetMultiTypeInfoCount(IProvideMultipleClassInfo *iface, ULONG *pcti)
static HRESULT InstallerImpl_FileAttributes(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
#define REG_INDEX_DYN_DATA
static HRESULT InstallerImpl_Environment(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT summaryinfo_invoke(struct automation_object *, DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
static struct tid_id tid_ids[]
static HRESULT InstallerImpl_OpenDatabase(WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT InstallerImpl_Version(WORD wFlags, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static ITypeInfo * typeinfos[LAST_tid]
static HRESULT create_summaryinfo(MSIHANDLE, IDispatch **)
UINT WINAPI MsiOpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIHANDLE *phDB)
UINT WINAPI MsiCloseHandle(MSIHANDLE handle)
UINT WINAPI MsiDoActionW(MSIHANDLE hInstall, LPCWSTR szAction)
LANGID WINAPI MsiGetLanguage(MSIHANDLE hInstall)
UINT WINAPI MsiSetInstallLevel(MSIHANDLE hInstall, int iInstallLevel)
UINT WINAPI MsiSetFeatureStateW(MSIHANDLE hInstall, LPCWSTR szFeature, INSTALLSTATE iState)
UINT WINAPI MsiGetFeatureStateW(MSIHANDLE hInstall, const WCHAR *szFeature, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
UINT WINAPI MsiSetMode(MSIHANDLE hInstall, MSIRUNMODE iRunMode, BOOL fState)
BOOL WINAPI MsiGetMode(MSIHANDLE hInstall, MSIRUNMODE iRunMode)
UINT WINAPI MsiInstallProductW(LPCWSTR szPackagePath, LPCWSTR szCommandLine)
UINT WINAPI MsiGetProductInfoW(LPCWSTR szProduct, LPCWSTR szAttribute, LPWSTR szBuffer, LPDWORD pcchValueBuf)
INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL dwUILevel, HWND *phWnd)
INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct)
MSIHANDLE WINAPI MsiGetActiveDatabase(MSIHANDLE hInstall)
UINT WINAPI MsiGetPropertyW(MSIHANDLE hinst, const WCHAR *name, WCHAR *buf, DWORD *sz)
UINT WINAPI MsiOpenPackageExW(const WCHAR *szPackage, DWORD dwOptions, MSIHANDLE *phPackage)
UINT WINAPI MsiSetPropertyW(MSIHANDLE hInstall, LPCWSTR szName, LPCWSTR szValue)
INT WINAPI MsiProcessMessage(MSIHANDLE hInstall, INSTALLMESSAGE eMessageType, MSIHANDLE hRecord)
UINT WINAPI MsiRecordSetStringW(MSIHANDLE handle, UINT iField, const WCHAR *szValue)
int WINAPI MsiRecordGetInteger(MSIHANDLE handle, UINT iField)
MSIHANDLE WINAPI MsiCreateRecord(UINT cParams)
UINT WINAPI MsiRecordGetStringW(MSIHANDLE handle, UINT iField, WCHAR *szValue, DWORD *pcchValue)
UINT WINAPI MsiRecordSetInteger(MSIHANDLE handle, UINT iField, int iVal)
UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE handle)
UINT WINAPI MsiEnumProductsW(DWORD index, WCHAR *lpguid)
UINT WINAPI MsiEnumRelatedProductsW(const WCHAR *szUpgradeCode, DWORD dwReserved, DWORD iProductIndex, WCHAR *lpProductBuf)
UINT WINAPI MsiGetSummaryInformationW(MSIHANDLE hDatabase, const WCHAR *szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE handle, UINT uiProperty, UINT *puiDataType, INT *piValue, FILETIME *pftValue, WCHAR *szValueBuf, DWORD *pcchValueBuf)
UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE hSummaryInfo, UINT *pCount)
UINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, const WCHAR *szValue)
HRESULT WINAPI DispGetParam(DISPPARAMS *pdispparams, UINT position, VARTYPE vtTarg, VARIANT *pvarResult, UINT *puArgErr)
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
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
#define InterlockedCompareExchangePointer
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
#define create_database(name, tables, num_tables)
static VARIANTARG static DISPID
enum tagINSTALLUILEVEL INSTALLUILEVEL
@ INSTALLUILEVEL_NOCHANGE
UINT WINAPI MsiViewModify(MSIHANDLE hView, MSIMODIFY eModifyMode, MSIHANDLE hRecord)
UINT WINAPI MsiViewClose(MSIHANDLE hView)
UINT WINAPI MsiViewExecute(MSIHANDLE hView, MSIHANDLE hRec)
UINT WINAPI MsiDatabaseOpenViewW(MSIHANDLE hdb, LPCWSTR szQuery, MSIHANDLE *phView)
UINT WINAPI MsiViewFetch(MSIHANDLE hView, MSIHANDLE *record)
MSICONDITION WINAPI MsiEvaluateConditionW(MSIHANDLE, LPCWSTR)
#define DISPID_VIEW_CLOSE
#define DISPID_RECORD_INTEGERDATA
#define DISPID_LIST_COUNT
#define DISPID_INSTALLER_UILEVEL
#define DISPID_SESSION_DOACTION
#define DISPID_INSTALLER_LASTERRORRECORD
#define DISPID_INSTALLER_FILEVERSION
#define DISPID_SESSION_DATABASE
#define DISPID_DATABASE_OPENVIEW
#define DISPID_INSTALLER_OPENPRODUCT
#define DISPID_INSTALLER_VERSION
#define DISPID_SESSION_FEATURECURRENTSTATE
#define DISPID_INSTALLER_RELATEDPRODUCTS
#define DISPID_SESSION_PROPERTY
#define DISPID_RECORD_STRINGDATA
#define DISPID_RECORD_FIELDCOUNT
#define DISPID_VIEW_MODIFY
#define DISPID_SESSION_INSTALLER
#define DISPID_INSTALLER_PRODUCTINFO
#define DISPID_INSTALLER_PRODUCTS
#define DISPID_INSTALLER_REGISTRYVALUE
#define DISPID_SESSION_SETINSTALLLEVEL
#define DISPID_VIEW_EXECUTE
#define DISPID_INSTALLER_FILEATTRIBUTES
#define DISPID_VIEW_FETCH
#define DISPID_LIST__NEWENUM
#define DISPID_INSTALLER_ENABLELOG
#define DISPID_DATABASE_SUMMARYINFORMATION
#define DISPID_SUMMARYINFO_PROPERTY
#define DISPID_INSTALLER_CREATERECORD
#define DISPID_SESSION_MESSAGE
#define DISPID_INSTALLER_INSTALLPRODUCT
#define DISPID_SUMMARYINFO_PROPERTYCOUNT
#define DISPID_INSTALLER_OPENPACKAGE
#define DISPID_SESSION_MODE
#define DISPID_SESSION_LANGUAGE
#define DISPID_INSTALLER_PRODUCTSTATE
#define DISPID_SESSION_EVALUATECONDITION
#define DISPID_SESSION_FEATUREREQUESTSTATE
#define DISPID_INSTALLER_OPENDATABASE
#define DISPID_INSTALLER_ENVIRONMENT
#define DISPID_INSTALLER_FILESIZE
#define DISPID_INSTALLER_SUMMARYINFORMATION
unsigned __int3264 UINT_PTR
BSTR WINAPI SysAllocString(LPCOLESTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI DECLSPEC_HOTPATCH SysAllocStringByteLen(LPCSTR str, UINT len)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define DISPATCH_PROPERTYPUT
#define DISPATCH_PROPERTYGET
const GUID IID_IProvideClassInfo
const GUID IID_IProvideClassInfo2
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
struct _DllVersionInfo DLLVERSIONINFO
IProvideMultipleClassInfo IProvideMultipleClassInfo_iface
IDispatch IDispatch_iface
IEnumVARIANT IEnumVARIANT_iface
struct list_object * list
struct automation_object autoobj
struct automation_object autoobj
void(* fn_free)(struct automation_object *)
HRESULT(* fn_invoke)(struct automation_object *, DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *)
#define CONTAINING_RECORD(address, type, field)
INT WINAPI VariantTimeToSystemTime(double dateIn, LPSYSTEMTIME lpSt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
INT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME lpSt, double *pDateOut)
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, VARIANTARG *pvargSrc)
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
DWORD WINAPI GetLastError(void)
_In_ DWORD _Out_ _In_ WORD wFlags
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
#define ERROR_INSTALL_FAILURE
#define DISP_E_PARAMNOTFOUND
#define ERROR_INSTALL_USEREXIT
#define ERROR_INVALID_HANDLE_STATE
#define DISP_E_MEMBERNOTFOUND
#define CLASS_E_NOAGGREGATION
#define ERROR_INSTALL_SUSPEND
#define DISP_E_TYPEMISMATCH
#define ERROR_FUNCTION_NOT_CALLED
#define DISP_E_PARAMNOTOPTIONAL
#define DISP_E_UNKNOWNNAME
#define ERROR_INVALID_DATA
#define HKEY_CLASSES_ROOT