45#define REG_INDEX_CLASSES_ROOT 0
46#define REG_INDEX_DYN_DATA 6
101 ERR(
"Could not load msiserver.tlb\n");
107 ITypeLib_Release(lib);
121 ITypeInfo_Release(ti);
203 if (ppvObject ==
NULL)
211 *ppvObject = &
This->IDispatch_iface;
215 *ppvObject = &
This->IProvideMultipleClassInfo_iface;
222 IDispatch_AddRef(iface);
259 TRACE(
"(%p/%p)->(%p)\n", iface,
This, pctinfo);
273 TRACE(
"(%p/%p)->(%u, %ld, %p)\n", iface,
This, iTInfo,
lcid, ppTInfo );
279 ITypeInfo_AddRef(*ppTInfo);
295 TRACE(
"(%p/%p)->(%s, %p, %u, %ld, %p)\n", iface,
This,
304 hr = ITypeInfo_GetIDsOfNames(ti, rgszNames, cNames, rgDispId);
310 if (rgDispId[
idx] == DISPID_UNKNOWN)
318#define MAX_FUNC_PARAMS 20
327 DISPPARAMS* pDispParams,
329 EXCEPINFO* pExcepInfo,
334 unsigned int uArgErr;
339 TRACE(
"(%p/%p)->(%ld, %s, %ld, %d, %p, %p, %p, %p)\n", iface,
This,
341 pDispParams, pVarResult, pExcepInfo, puArgErr);
351 ERR(
"NULL pVarResult not allowed when DISPATCH_PROPERTYGET specified\n");
356 if (puArgErr ==
NULL) puArgErr = &uArgErr;
357 if (pVarResult ==
NULL) pVarResult = &varResultDummy;
369 ITypeInfo_GetDocumentation(ti, dispIdMember, &bstrName,
NULL,
NULL,
NULL);
376 if (bstrName ==
NULL) ITypeInfo_GetDocumentation(ti, dispIdMember, &bstrName,
NULL,
NULL,
NULL);
377 FIXME(
"method %ld, %s wflags %d not implemented, clsid %s\n", dispIdMember,
debugstr_w(bstrName),
wFlags,
380 else if (pExcepInfo &&
388 if (
FAILED(ITypeInfo_GetNames(ti, dispIdMember, bstrParamNames,
391 TRACE(
"failed to retrieve names for dispIdMember %ld\n", dispIdMember);
395 memset(szExceptionDescription, 0,
sizeof(szExceptionDescription));
396 for (
i=0;
i<namesNo;
i++)
398 if (bFirst) bFirst =
FALSE;
402 lstrcpyW(&szExceptionDescription[
lstrlenW(szExceptionDescription)], bstrParamNames[
i]);
406 memset(pExcepInfo, 0,
sizeof(EXCEPINFO));
407 pExcepInfo->wCode = 1000;
409 pExcepInfo->bstrDescription =
SysAllocString(szExceptionDescription);
415 if (pVarResult == &varResultDummy)
VariantClear(pVarResult);
446 return IDispatch_QueryInterface(&
This->IDispatch_iface,
riid, ppvoid);
452 return IDispatch_AddRef(&
This->IDispatch_iface);
458 return IDispatch_Release(&
This->IDispatch_iface);
466 TRACE(
"(%p/%p)->(%p)\n", iface,
This, ppTI);
470 ITypeInfo_AddRef(*ppTI);
480 if (dwGuidKind != GUIDKIND_DEFAULT_SOURCE_DISP_IID)
492 TRACE(
"(%p/%p)->(%p)\n", iface,
This, pcti);
502 ULONG* pcdispidReserved,
508 TRACE(
"(%p/%p)->(%lu, %#lx, %p, %p, %p, %p, %p)\n", iface,
This, iti,
dwFlags, ti, pdwTIFlags, pcdispidReserved,
509 piidPrimary, piidSource);
514 if (
dwFlags & MULTICLASSINFO_GETTYPEINFO)
520 ITypeInfo_AddRef(*ti);
523 if (
dwFlags & MULTICLASSINFO_GETNUMRESERVEDDISPIDS)
526 *pcdispidReserved = 0;
529 if (
dwFlags & MULTICLASSINFO_GETIIDPRIMARY)
532 if (
dwFlags & MULTICLASSINFO_GETIIDSOURCE)
576 if (ppvObject ==
NULL)
584 *ppvObject = &
This->IEnumVARIANT_iface;
592 IEnumVARIANT_AddRef(iface);
614 if (
This->list) IDispatch_Release(&
This->list->autoobj.IDispatch_iface);
627 TRACE(
"%p, %lu, %p, %p\n", iface, celt, rgVar, fetched);
629 if (fetched) *fetched = 0;
640 if (fetched) *fetched =
local;
650 TRACE(
"%p, %lu\n", iface, celt);
666 TRACE(
"(%p)\n", iface);
677 TRACE(
"(%p,%p)\n", iface, ppEnum);
686 if (*ppEnum) IEnumVARIANT_Release(*ppEnum);
711 object =
malloc(
sizeof(*
object));
720 if (
list) IDispatch_AddRef(&
list->autoobj.IDispatch_iface);
734 DISPPARAMS *pdispparams,
741 TRACE(
"position=%d, cArgs=%d, cNamedArgs=%d\n",
742 *position, pdispparams->cArgs, pdispparams->cNamedArgs);
743 if (*position < pdispparams->cArgs) {
745 pos = pdispparams->cArgs - *position - 1;
748 for (
pos=0;
pos<pdispparams->cNamedArgs;
pos++)
749 if (pdispparams->rgdispidNamedArgs[
pos] == *position)
break;
751 if (
pos==pdispparams->cNamedArgs)
756 &pdispparams->rgvarg[
pos]);
765 DISPPARAMS* pDispParams,
767 EXCEPINFO* pExcepInfo,
779 switch (dispIdMember)
799 ERR(
"MsiSummaryInfoGetProperty returned %d\n",
ret);
816 ERR(
"Out of memory\n");
819 ERR(
"MsiSummaryInfoGetProperty returned %d\n",
ret);
838 ERR(
"Unhandled variant type %d\n",
type);
843 UINT posValue = DISPID_PROPERTYPUT;
850 *puArgErr = posValue;
854 switch (
V_VT(&varg1))
873 FIXME(
"Unhandled variant type %d\n",
V_VT(&varg1));
880 ERR(
"MsiSummaryInfoSetPropertyW returned %d\n",
ret);
891 ERR(
"MsiSummaryInfoGetPropertyCount returned %d\n",
ret);
917 DISPPARAMS* pDispParams,
919 EXCEPINFO* pExcepInfo,
931 switch (dispIdMember)
949 if (!(szString =
malloc((++dwLen) *
sizeof(
WCHAR))))
950 ERR(
"Out of memory\n");
956 ERR(
"MsiRecordGetString returned %d\n",
ret);
965 ERR(
"MsiRecordSetString returned %d\n",
ret);
985 ERR(
"MsiRecordSetInteger returned %d\n",
ret);
1011 *disp = &
record->IDispatch_iface;
1022 DISPPARAMS* pDispParams,
1024 EXCEPINFO* pExcepInfo,
1031 switch (dispIdMember)
1039 ERR(
"failed to create IEnumVARIANT object, hresult %#lx\n",
hr);
1078 for (
i = 0;
i <
list->count;
i++)
1138 for (
i = 0;
i <
list->count;
i++)
1164 DISPPARAMS* pDispParams,
1166 EXCEPINFO* pExcepInfo,
1177 switch (dispIdMember)
1198 ERR(
"failed to create Record object, hresult %#lx\n",
hr);
1204 ERR(
"MsiViewFetch returned %d\n",
ret);
1223 ERR(
"MsiViewModify returned %d\n",
ret);
1249 DISPPARAMS* pDispParams,
1251 EXCEPINFO* pExcepInfo,
1269 DISPPARAMS* pDispParams,
1271 EXCEPINFO* pExcepInfo,
1283 switch (dispIdMember)
1299 ERR(
"failed to create SummaryInfo object: %#lx\n",
hr);
1303 ERR(
"MsiGetSummaryInformation returned %d\n",
ret);
1321 ERR(
"failed to create View object, hresult %#lx\n",
hr);
1326 ERR(
"MsiDatabaseOpenView returned %d\n",
ret);
1335 pVarResult, pExcepInfo,
1354 DISPPARAMS* pDispParams,
1356 EXCEPINFO* pExcepInfo,
1372 switch (dispIdMember)
1377 IDispatch_AddRef(
session->installer);
1391 if (!(szString =
malloc((++dwLen) *
sizeof(
WCHAR))))
1392 ERR(
"Out of memory\n");
1398 ERR(
"MsiGetProperty returned %d\n",
ret);
1411 ERR(
"MsiSetProperty returned %d\n",
ret);
1422 V_I4(pVarResult) = langId;
1440 ERR(
"MsiSetMode returned %d\n",
ret);
1457 ERR(
"failed to create Database object, hresult %#lx\n",
hr);
1461 ERR(
"MsiGetActiveDatabase failed\n");
1477 V_I4(pVarResult) = msiDoActionStatusNoAction;
1480 V_I4(pVarResult) = msiDoActionStatusSuccess;
1483 V_I4(pVarResult) = msiDoActionStatusUserExit;
1486 V_I4(pVarResult) = msiDoActionStatusFailure;
1489 V_I4(pVarResult) = msiDoActionStatusSuspend;
1492 V_I4(pVarResult) = msiDoActionStatusFinished;
1495 V_I4(pVarResult) = msiDoActionStatusWrongState;
1498 V_I4(pVarResult) = msiDoActionStatusBadActionData;
1502 FIXME(
"MsiDoAction returned unhandled value %d\n",
ret);
1539 ERR(
"MsiSetInstallLevel returned %d\n",
ret);
1552 V_I4(pVarResult) = iInstalled;
1555 ERR(
"MsiGetFeatureState returned %d\n",
ret);
1556 V_I4(pVarResult) = msiInstallStateUnknown;
1568 V_I4(pVarResult) = iAction;
1571 ERR(
"MsiGetFeatureState returned %d\n",
ret);
1572 V_I4(pVarResult) = msiInstallStateUnknown;
1585 ERR(
"MsiSetFeatureState returned %d\n",
ret);
1608 DWORD dwNewSize = 0;
1616 while (
idx >= 0 && !szString[
idx])
idx--;
1618 if (!szString[
idx]) szString[
idx] =
'\n';
1628 else if (!(szNewString =
malloc(dwNewSize *
sizeof(
WCHAR))))
1629 ERR(
"Out of memory\n");
1660 FIXME(
"Unhandled registry value type %lu\n", dwType);
1665 DISPPARAMS* pDispParams,
1667 EXCEPINFO* pExcepInfo,
1693 DISPPARAMS* pDispParams,
1695 EXCEPINFO* pExcepInfo,
1707 if (pDispParams->cArgs == 0)
1710 if (
V_VT(&pDispParams->rgvarg[pDispParams->cArgs - 1]) !=
VT_BSTR)
1719 if (pDispParams->cArgs == 2)
1751 DISPPARAMS* pDispParams,
1753 EXCEPINFO* pExcepInfo,
1776 DISPPARAMS* pDispParams,
1778 EXCEPINFO* pExcepInfo,
1820 DISPPARAMS* pDispParams,
1822 EXCEPINFO* pExcepInfo,
1859 DISPPARAMS* pDispParams,
1861 EXCEPINFO* pExcepInfo,
1896 DISPPARAMS* pDispParams,
1898 EXCEPINFO* pExcepInfo,
1911 DISPPARAMS* pDispParams,
1913 EXCEPINFO* pExcepInfo,
1948 EXCEPINFO* pExcepInfo,
1972 DISPPARAMS* pDispParams,
1974 EXCEPINFO* pExcepInfo,
1987 DISPPARAMS* pDispParams,
1989 EXCEPINFO* pExcepInfo,
2038 switch (
V_VT(&varg2))
2083 *puArgErr = posValue;
2092 else if (
V_I4(&varg2) > 0)
2112 else if (
V_I4(&varg2) > 0)
2136 DISPPARAMS* pDispParams,
2138 EXCEPINFO* pExcepInfo,
2151 DISPPARAMS* pDispParams,
2153 EXCEPINFO* pExcepInfo,
2166 DISPPARAMS* pDispParams,
2168 EXCEPINFO* pExcepInfo,
2181 DISPPARAMS* pDispParams,
2183 EXCEPINFO* pExcepInfo,
2196 DISPPARAMS* pDispParams,
2198 EXCEPINFO* pExcepInfo,
2220 DISPPARAMS* pDispParams,
2222 EXCEPINFO* pExcepInfo,
2279 DISPPARAMS* pDispParams,
2281 EXCEPINFO* pExcepInfo,
2301 DISPPARAMS* pDispParams,
2303 EXCEPINFO* pExcepInfo,
2333 DISPPARAMS* pDispParams,
2335 EXCEPINFO* pExcepInfo,
2338 switch (dispIdMember)
2342 pVarResult, pExcepInfo, puArgErr);
2346 pVarResult, pExcepInfo, puArgErr);
2350 pVarResult, pExcepInfo, puArgErr);
2354 pVarResult, pExcepInfo, puArgErr);
2358 pVarResult, pExcepInfo,
2363 pVarResult, pExcepInfo, puArgErr);
2367 pVarResult, pExcepInfo, puArgErr);
2371 pVarResult, pExcepInfo,
2376 pExcepInfo, puArgErr);
2380 pVarResult, pExcepInfo,
2385 pVarResult, pExcepInfo,
2390 pVarResult, pExcepInfo, puArgErr);
2394 pVarResult, pExcepInfo,
2399 pVarResult, pExcepInfo, puArgErr);
2403 pVarResult, pExcepInfo, puArgErr);
2407 pVarResult, pExcepInfo, puArgErr);
2411 pVarResult, pExcepInfo, puArgErr);
2415 pVarResult, pExcepInfo, puArgErr);
2419 pVarResult, pExcepInfo,
2431 TRACE(
"(%p %p)\n", outer, ppObj);
2436 installer =
malloc(
sizeof(*installer));
2456 *disp = &
session->autoobj.IDispatch_iface;
2467 database =
malloc(
sizeof(*database));
2502 *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
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
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)
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
#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