27 #define WIN32_NO_STATUS 37 #include "winemsi_s.h" 40 #include "wine/unicode.h" 44 #undef WIN32_NO_STATUS 51 #define CUSTOM_ACTION_TYPE_MASK 0x3F 69 0, 0, { (
DWORD_PTR)(__FILE__
": msi_custom_action_cs") }
150 TRACE(
"Skipping action due to dbCustomActionTypeClientRepeat option.\n");
159 TRACE(
"Skipping action due to msidbCustomActionTypeFirstSequence option.\n");
167 TRACE(
"Skipping action due to msidbCustomActionTypeOncePerProcess option.\n");
201 const WCHAR *
end, *beg = deferred_data + 1;
268 ERR(
"Failed to get stream\n");
272 }
while (sz ==
sizeof buffer);
324 TRACE(
"exit code is %lu\n", rc );
349 ERR(
"invalid Return Code %lu\n", rc );
460 const WCHAR fmt[] =
L"To debug your custom action, attach your debugger to process %u (0x%x) and press OK";
470 #if defined __i386__ && defined _MSC_VER 484 #elif defined __i386__ && defined __GNUC__ 489 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
492 __ASM_CFI(
".cfi_def_cfa_register %ebp\n\t")
530 ERR(
"RpcStringBindingCompose failed: %#lx\n",
status);
536 ERR(
"RpcBindingFromStringBinding failed: %#lx\n",
status);
549 ERR(
"failed to create handle for %#lx\n", remote_package );
579 ERR(
"Custom action (%s:%s) caused a page fault: %#lx\n",
603 #ifndef GetCurrentThreadEffectiveToken 604 #define GetCurrentProcessToken() ((HANDLE)~(ULONG_PTR)3) 605 #define GetCurrentThreadEffectiveToken() GetCurrentProcessToken() 637 ERR(
"failed to create custom action client pipe: %lu\n",
GetLastError());
651 CreateProcessAsUserW(
token,
path,
cmdline,
NULL,
NULL,
FALSE, 0,
NULL,
NULL, &si, &
pi);
655 CreateProcessAsUserW(
token,
path,
cmdline,
NULL,
NULL,
FALSE, 0,
NULL,
NULL, &si, &
pi);
674 ERR(
"failed to connect to custom action server: %lu\n",
GetLastError());
706 pipe =
info->package->custom_server_32_pipe;
711 pipe =
info->package->custom_server_64_pipe;
719 ERR(
"failed to write to custom action client pipe: %lu\n",
GetLastError());
725 ERR(
"failed to read from custom action client pipe: %lu\n",
GetLastError());
769 switch (
info.Machine)
803 info->package = package;
823 ERR(
"RpcServerUseProtseqEp failed: %#lx\n",
status);
831 ERR(
"RpcServerRegisterIfEx failed: %#lx\n",
status);
835 info->package->rpc_server_started = 1;
844 ERR(
"Attempt to run a 64-bit custom action inside a 32-bit WINEPREFIX.\n");
941 return info.hProcess;
1036 len += len_filename;
1066 filename[len_dir + len_source] = 0;
1110 hr = IStorage_Commit(
dst, 0 );
1112 ERR(
"failed to commit storage (%#lx)\n",
hr );
1117 if (
src) IStorage_Release(
src );
1118 if (
dst) IStorage_Release(
dst );
1216 TRACE(
"script returned %u\n",
r);
1220 ERR(
"failed to create handle for %p\n",
info->package );
1250 info->package = package;
1439 TRACE(
"deferring commit action\n");
1444 TRACE(
"deferring rollback action\n");
1449 TRACE(
"deferring install action\n");
1489 FIXME(
"msidbCustomActionTypeTSAware not handled\n");
1494 WARN(
"msidbCustomActionTypeNoImpersonate not handled\n");
1516 else if (actiondata)
1608 unsigned int handle_count,
i;
1633 if (
info->package == package )
1642 for (
i = 0;
i < handle_count;
i++)
1652 if (
info->package == package)
void msiobj_addref(MSIOBJECTHDR *info)
RPC_STATUS WINAPI RpcBindingFromStringBindingW(RPC_WSTR StringBinding, RPC_BINDING_HANDLE *Binding)
static UINT HANDLE_CustomType17(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
static BOOL check_execution_scheduling_options(MSIPACKAGE *package, LPCWSTR action, UINT options)
UINT msi_get_property(MSIDATABASE *, LPCWSTR, LPWSTR, LPDWORD) DECLSPEC_HIDDEN
#define STATUS_INVALID_IMAGE_WIN_64
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
BOOL WINAPI Wow64RevertWow64FsRedirection(IN PVOID OldValue)
void __RPC_FAR *__RPC_USER MIDL_user_allocate(SIZE_T len)
#define DUPLICATE_CLOSE_SOURCE
void ACTION_FinishCustomActions(const MSIPACKAGE *package)
enum _TOKEN_ELEVATION_TYPE TOKEN_ELEVATION_TYPE
static UINT HANDLE_CustomType18(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
#define CUSTOM_ACTION_TYPE_MASK
UINT WINAPI MsiCloseAllHandles(void)
static UINT custom_get_process_return(HANDLE process)
#define IMAGE_FILE_MACHINE_ARM64
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
#define ERROR_NO_MORE_ITEMS
#define STGM_SHARE_EXCLUSIVE
RPC_STATUS WINAPI RpcStringFreeW(RPC_WSTR *String)
ecx edi ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx movl TEMP incl eax andl eax ecx incl ebx eax jnz xchgl ecx incl TEMP esp ecx subl ebx pushl ecx ecx edx ecx ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 mm1 mm5 paddd mm0 paddd mm4 mm0 mm4 packssdw mm0 packssdw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz popl ecx ecx jecxz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 mm1 paddd mm0 mm0 packssdw mm0 movd eax movw edi esi edx esi ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 mm1 mm5 paddd mm1 paddd mm5 mm1 mm5 packssdw mm1 packssdw mm5 psubd mm0 psubd mm4 psubsw mm0 psubsw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 mm1 paddd mm1 mm1 packssdw mm1 psubd mm0 psubsw mm0 movd eax movw edi emms popl ebx popl esi popl edi mov ebp
UINT ACTION_ForceReboot(MSIPACKAGE *package)
static UINT HANDLE_CustomType53_54(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
static GLenum _GLUfuncptr fn
unsigned char rpc_server_started
static WCHAR * strdupW(const WCHAR *src)
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
GLdouble GLdouble GLdouble r
BOOL WINAPI GetExitCodeProcess(IN HANDLE hProcess, IN LPDWORD lpExitCode)
struct list RunningActions
GLuint GLuint GLsizei count
BOOL msi_action_is_unique(const MSIPACKAGE *package, const WCHAR *action)
static LPSTR strdupWtoA(LPCWSTR str)
HANDLE custom_server_32_process
static BOOL get_binary_type(const WCHAR *name, DWORD *type)
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
struct _EXCEPTION_POINTERS *_CRTIMP __declspec(noreturn) void __cdecl terminate(void)
static void msi_free(void *mem)
#define INVALID_FILE_SIZE
static UINT HANDLE_CustomType1(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
unsigned short * RPC_WSTR
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define IMAGE_FILE_MACHINE_AMD64
#define RPC_IF_AUTOLISTEN
static void * msi_realloc(void *mem, size_t len) __WINE_ALLOC_SIZE(2)
RPC_STATUS WINAPI RpcStringBindingComposeW(RPC_WSTR ObjUuid, RPC_WSTR Protseq, RPC_WSTR NetworkAddr, RPC_WSTR Endpoint, RPC_WSTR Options, RPC_WSTR *StringBinding)
static UINT HANDLE_CustomType19(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
static void handle_msi_break(const WCHAR *action)
static void * msi_alloc_zero(size_t len) __WINE_ALLOC_SIZE(1)
UINT(WINAPI * MsiCustomActionEntryPoint)(MSIHANDLE)
__WINE_SERVER_LIST_INLINE struct list * list_head(const struct list *list)
UINT __cdecl s_remote_GetActionInfo(const GUID *guid, WCHAR **name, int *type, WCHAR **dll, char **func, MSIHANDLE *hinst)
#define __ASM_GLOBAL_FUNC(name, code)
RPC_STATUS WINAPI RpcServerRegisterIfEx(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv, UINT Flags, UINT MaxCalls, RPC_IF_CALLBACK_FN *IfCallbackFn)
BOOL WINAPI GetExitCodeThread(IN HANDLE hThread, OUT LPDWORD lpExitCode)
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
static DWORD WINAPI custom_client_thread(void *arg)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
UINT CDECL __wine_msi_call_dll_function(DWORD client_pid, const GUID *guid)
#define DUPLICATE_SAME_ACCESS
#define ERROR_FUNCTION_FAILED
WINE_DEFAULT_DEBUG_CHANNEL(msi)
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
static UINT HANDLE_CustomType34(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
GLenum const GLfloat * params
__WINE_SERVER_LIST_INLINE unsigned int list_count(const struct list *list)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
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 token
static struct _test_info info[]
UINT ACTION_CustomAction(MSIPACKAGE *package, const WCHAR *action)
static UINT wait_process_handle(MSIPACKAGE *package, UINT type, HANDLE ProcessHandle, LPCWSTR name)
LONG WINAPI rpc_filter(EXCEPTION_POINTERS *eptr)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
struct _msi_custom_action_info msi_custom_action_info
#define RPC_C_LISTEN_MAX_CALLS_DEFAULT
void WINAPI DebugBreak(void)
unsigned char rollback_action_running
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
#define ERROR_FUNCTION_NOT_CALLED
static void free_custom_action_data(msi_custom_action_info *info)
static msi_custom_action_info * do_msidbCustomActionTypeDll(MSIPACKAGE *package, INT type, LPCWSTR source, LPCWSTR target, LPCWSTR action)
const WCHAR * MSI_RecordGetString(const MSIRECORD *, UINT) DECLSPEC_HIDDEN
static WCHAR * build_msiexec_args(const WCHAR *filename, const WCHAR *params)
static UINT write_substorage_to_file(MSIPACKAGE *package, const WCHAR *source, const WCHAR *filename)
HANDLE custom_server_64_process
static void set_deferred_action_props(MSIPACKAGE *package, const WCHAR *deferred_data)
DWORD call_script(MSIHANDLE hPackage, INT type, LPCWSTR script, LPCWSTR function, LPCWSTR action) DECLSPEC_HIDDEN
static UINT HANDLE_CustomType50(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
NTSTATUS NTAPI NtQuerySection(_In_ HANDLE SectionHandle, _In_ SECTION_INFORMATION_CLASS SectionInformationClass, _Out_ PVOID SectionInformation, _In_ SIZE_T SectionInformationLength, _Out_opt_ PSIZE_T ResultLength)
DWORD WINAPI GetCurrentThreadId(VOID)
struct tagMSIRUNNINGACTION MSIRUNNINGACTION
#define ERROR_INSTALL_USEREXIT
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
#define FILE_ATTRIBUTE_DIRECTORY
unsigned char commit_action_running
MSIRECORD *WINAPIV MSI_QueryGetRecord(MSIDATABASE *db, LPCWSTR query,...) DECLSPEC_HIDDEN
#define IMAGE_FILE_MACHINE_I386
_Check_return_ _CRTIMP FILE *__cdecl tmpfile(void)
MSIFILE * msi_get_loaded_file(MSIPACKAGE *package, const WCHAR *key)
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
HANDLE msi_create_file(MSIPACKAGE *package, const WCHAR *filename, DWORD access, DWORD sharing, DWORD creation, DWORD flags)
static MSIBINARY * create_temp_binary(MSIPACKAGE *package, LPCWSTR source)
void __RPC_USER MIDL_user_free(void __RPC_FAR *ptr)
static void file_running_action(MSIPACKAGE *package, HANDLE Handle, BOOL process, LPCWSTR name)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
LPWSTR * script_actions[SCRIPT_MAX]
UINT MSI_SetTargetPathW(MSIPACKAGE *package, LPCWSTR szFolder, LPCWSTR szFolderPath)
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
#define PIPE_ACCESS_DUPLEX
static UINT custom_proc_wrapper(MsiCustomActionEntryPoint entry, MSIHANDLE hinst)
#define ERROR_INSTALL_FAILURE
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
GLenum GLenum GLenum GLenum mapping
static CRITICAL_SECTION msi_custom_action_cs
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
const GLuint GLenum const GLvoid * binary
int msiobj_release(MSIOBJECTHDR *info)
static UINT HANDLE_CustomType2(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
static DWORD WINAPI ScriptThread(LPVOID arg)
HANDLE custom_server_32_pipe
HRESULT WINAPI CoCreateGuid(GUID *pguid)
#define FILE_ATTRIBUTE_NORMAL
UINT WINAPI GetSystemWow64DirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
static UINT defer_custom_action(MSIPACKAGE *package, const WCHAR *action, UINT type)
static UINT HANDLE_CustomType5_6(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
#define INSTALLUILEVEL_MASK
#define memcpy(s1, s2, n)
HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
#define GetCurrentProcess()
static LPWSTR msi_get_deferred_action(LPCWSTR action, LPCWSTR actiondata, LPCWSTR usersid, LPCWSTR prodcode)
LIST_ENTRY ProcessLocksList
int _cdecl swprintf(const WCHAR *,...)
unsigned char scheduled_action_running
static UINT HANDLE_CustomType23(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
UINT WINAPI MsiCloseHandle(MSIHANDLE handle)
static UINT HANDLE_CustomType7(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
DWORD WINAPI SearchPathW(IN LPCWSTR lpPath OPTIONAL, IN LPCWSTR lpFileName, IN LPCWSTR lpExtension OPTIONAL, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessAsUserW(_In_opt_ HANDLE hToken, _In_opt_ LPCWSTR lpApplicationName, _Inout_opt_ LPWSTR lpCommandLine, _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ BOOL bInheritHandles, _In_ DWORD dwCreationFlags, _In_opt_ LPVOID lpEnvironment, _In_opt_ LPCWSTR lpCurrentDirectory, _In_ LPSTARTUPINFOW lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInformation)
RPC_STATUS WINAPI RpcServerUseProtseqEpW(RPC_WSTR Protseq, UINT MaxCalls, RPC_WSTR Endpoint, LPVOID SecurityDescriptor)
#define ERROR_INVALID_DATA
const WCHAR * msi_get_target_folder(MSIPACKAGE *package, const WCHAR *name)
void custom_stop_server(HANDLE process, HANDLE pipe)
int MSI_RecordGetInteger(MSIRECORD *, UINT) DECLSPEC_HIDDEN
static UINT custom_get_thread_return(MSIPACKAGE *package, HANDLE thread)
static UINT wait_thread_handle(msi_custom_action_info *info)
#define ERROR_INSTALL_SUSPEND
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static HANDLE execute_command(const WCHAR *app, WCHAR *arg, const WCHAR *dir)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
int script_actions_count[SCRIPT_MAX]
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
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
GLsizei GLsizei GLchar * source
static struct list msi_pending_custom_actions
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
#define IMAGE_FILE_MACHINE_ARMNT
MSIHANDLE alloc_msihandle(MSIOBJECTHDR *obj)
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
#define ReadFile(a, b, c, d, e)
#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
RPCRTAPI int RPC_ENTRY I_RpcExceptionFilter(ULONG)
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int) DECLSPEC_HIDDEN
static msi_custom_action_info * find_action_by_guid(const GUID *guid)
UINT MSI_RecordReadStream(MSIRECORD *, UINT, char *, LPDWORD) DECLSPEC_HIDDEN
WCHAR * msi_create_temp_file(MSIDATABASE *db)
static BOOL action_type_matches_script(UINT type, UINT script)
static HANDLE get_admin_token(void)
#define STANDARD_RIGHTS_REQUIRED
#define GetCurrentThreadEffectiveToken()
static void * msi_alloc(size_t len) __WINE_ALLOC_SIZE(1)
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
static DWORD custom_start_server(MSIPACKAGE *package, DWORD arch)
static UINT HANDLE_CustomType21_22(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
#define GetProcAddress(x, y)
PEXCEPTION_RECORD ExceptionRecord
static UINT HANDLE_CustomType37_38(MSIPACKAGE *package, const WCHAR *source, const WCHAR *target, INT type, const WCHAR *action)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
GLuint GLuint GLsizei GLenum type
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define GetExceptionCode()
HANDLE WINAPI CreateNamedPipeW(LPCWSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
static void push(calc_node_t *op)
_In_ HANDLE ProcessHandle
#define GetEnvironmentVariableW(x, y, z)
static SERVICE_STATUS status
HANDLE custom_server_64_pipe
BOOL WINAPI ConnectNamedPipe(IN HANDLE hNamedPipe, IN LPOVERLAPPED lpOverlapped)
static WCHAR * strdupAtoW(const char *str)
BOOL WINAPI DuplicateHandle(IN HANDLE hSourceProcessHandle, IN HANDLE hSourceHandle, IN HANDLE hTargetProcessHandle, OUT LPHANDLE lpTargetHandle, IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwOptions)
static DWORD ACTION_CallScript(const GUID *guid)
#define __EXCEPT_PAGE_FAULT
static msi_custom_action_info * do_msidbCustomActionTypeScript(MSIPACKAGE *package, INT type, LPCWSTR script, LPCWSTR function, LPCWSTR action)
static MSIBINARY * get_temp_binary(MSIPACKAGE *package, LPCWSTR source)
_CRTIMP int __cdecl read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)
DWORD WINAPI GetCurrentProcessId(VOID)
MSIHANDLE alloc_msi_remote_handle(MSIHANDLE remote)
void msi_dialog_check_messages(HANDLE handle)
UINT msi_schedule_action(MSIPACKAGE *package, UINT script, const WCHAR *action)
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
static CRITICAL_SECTION_DEBUG msi_custom_action_cs_debug
UINT msi_register_unique_action(MSIPACKAGE *package, const WCHAR *action)
BOOL WINAPI Wow64DisableWow64FsRedirection(IN PVOID *OldValue)
LPWSTR msi_dup_property(MSIDATABASE *db, LPCWSTR prop) DECLSPEC_HIDDEN
void msi_reset_source_folders(MSIPACKAGE *package) DECLSPEC_HIDDEN