ReactOS  0.4.15-dev-4921-g25fcdc5
handle.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
#include "shlwapi.h"
#include "wine/debug.h"
#include "msi.h"
#include "msiquery.h"
#include "msipriv.h"
#include "winemsi_s.h"
Include dependency graph for handle.c:

Go to the source code of this file.

Classes

struct  msi_handle_info_t
 

Macros

#define COBJMACROS
 

Typedefs

typedef struct msi_handle_info_t msi_handle_info
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msi)
 
void msi_free_handle_table (void)
 
static MSIHANDLE alloc_handle_table_entry (void)
 
MSIHANDLE alloc_msihandle (MSIOBJECTHDR *obj)
 
MSIHANDLE alloc_msi_remote_handle (MSIHANDLE remote)
 
voidmsihandle2msiinfo (MSIHANDLE handle, UINT type)
 
MSIHANDLE msi_get_remote (MSIHANDLE handle)
 
voidalloc_msiobject (UINT type, UINT size, msihandledestructor destroy)
 
void msiobj_addref (MSIOBJECTHDR *info)
 
void msiobj_lock (MSIOBJECTHDR *info)
 
void msiobj_unlock (MSIOBJECTHDR *info)
 
int msiobj_release (MSIOBJECTHDR *info)
 
UINT WINAPI MsiCloseHandle (MSIHANDLE handle)
 
UINT WINAPI MsiCloseAllHandles (void)
 
UINT __cdecl s_remote_CloseHandle (MSIHANDLE handle)
 

Variables

static CRITICAL_SECTION MSI_handle_cs = { &MSI_handle_cs_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG MSI_handle_cs_debug
 
static CRITICAL_SECTION MSI_object_cs = { &MSI_object_cs_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG MSI_object_cs_debug
 
static msi_handle_infomsihandletable = NULL
 
static unsigned int msihandletable_size = 0
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 21 of file handle.c.

Typedef Documentation

◆ msi_handle_info

Function Documentation

◆ alloc_handle_table_entry()

static MSIHANDLE alloc_handle_table_entry ( void  )
static

Definition at line 80 of file handle.c.

81 {
82  UINT i;
83 
84  /* find a slot */
85  for(i=0; i<msihandletable_size; i++)
86  if( !msihandletable[i].u.obj && !msihandletable[i].u.rem )
87  break;
88  if( i==msihandletable_size )
89  {
91  int newsize;
92  if (msihandletable_size == 0)
93  {
94  newsize = 256;
95  p = msi_alloc_zero(newsize * sizeof(*p));
96  }
97  else
98  {
99  newsize = msihandletable_size * 2;
100  p = msi_realloc(msihandletable, newsize * sizeof(*p));
101  if (p) memset(p + msihandletable_size, 0, (newsize - msihandletable_size) * sizeof(*p));
102  }
103  if (!p)
104  return 0;
105  msihandletable = p;
106  msihandletable_size = newsize;
107  }
108  return i + 1;
109 }
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 * u
Definition: glfuncs.h:240
static void * msi_realloc(void *mem, size_t len) __WINE_ALLOC_SIZE(2)
Definition: msipriv.h:1154
MSIHANDLE rem
Definition: handle.c:63
static void * msi_alloc_zero(size_t len) __WINE_ALLOC_SIZE(1)
Definition: msipriv.h:1148
static msi_handle_info * msihandletable
Definition: handle.c:68
union msi_handle_info_t::@485 u
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
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50
GLfloat GLfloat p
Definition: glext.h:8902
static unsigned int msihandletable_size
Definition: handle.c:69
#define memset(x, y, z)
Definition: compat.h:39

Referenced by alloc_msi_remote_handle(), and alloc_msihandle().

◆ alloc_msi_remote_handle()

MSIHANDLE alloc_msi_remote_handle ( MSIHANDLE  remote)

Definition at line 135 of file handle.c.

136 {
138  MSIHANDLE ret;
139 
141 
143  if (ret)
144  {
145  entry = &msihandletable[ ret - 1 ];
146  entry->u.rem = remote;
147  entry->dwThreadId = GetCurrentThreadId();
148  entry->remote = TRUE;
149  }
150 
152 
153  TRACE( "%lu -> %lu\n", remote, ret );
154 
155  return ret;
156 }
#define TRUE
Definition: types.h:120
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
unsigned long MSIHANDLE
Definition: winemsi.idl:24
static msi_handle_info * msihandletable
Definition: handle.c:68
DWORD WINAPI GetCurrentThreadId(VOID)
Definition: thread.c:459
static MSIHANDLE alloc_handle_table_entry(void)
Definition: handle.c:80
#define TRACE(s)
Definition: solgame.cpp:4
int ret
uint32_t entry
Definition: isohybrid.c:63
static CRITICAL_SECTION MSI_handle_cs
Definition: handle.c:38
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

Referenced by __wine_msi_call_dll_function(), MsiDatabaseOpenViewW(), MsiGetActiveDatabase(), and MsiGetSummaryInformationW().

◆ alloc_msihandle()

MSIHANDLE alloc_msihandle ( MSIOBJECTHDR obj)

Definition at line 111 of file handle.c.

112 {
114  MSIHANDLE ret;
115 
117 
119  if (ret)
120  {
121  entry = &msihandletable[ ret - 1 ];
122  msiobj_addref( obj );
123  entry->u.obj = obj;
124  entry->dwThreadId = GetCurrentThreadId();
125  entry->remote = FALSE;
126  }
127 
129 
130  TRACE( "%p -> %lu\n", obj, ret );
131 
132  return ret;
133 }
void msiobj_addref(MSIOBJECTHDR *info)
Definition: handle.c:217
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
GLsizei GLsizei GLuint * obj
Definition: glext.h:6042
#define FALSE
Definition: types.h:117
unsigned long MSIHANDLE
Definition: winemsi.idl:24
static msi_handle_info * msihandletable
Definition: handle.c:68
DWORD WINAPI GetCurrentThreadId(VOID)
Definition: thread.c:459
static MSIHANDLE alloc_handle_table_entry(void)
Definition: handle.c:80
#define TRACE(s)
Definition: solgame.cpp:4
int ret
uint32_t entry
Definition: isohybrid.c:63
static CRITICAL_SECTION MSI_handle_cs
Definition: handle.c:38
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

Referenced by ACTION_CallScript(), MSI_ProcessMessageVerbatim(), MsiCreateRecord(), MsiDatabaseGetPrimaryKeysW(), MsiDatabaseOpenViewW(), MsiEnableUIPreview(), MsiGetActiveDatabase(), MsiGetSummaryInformationW(), MsiOpenDatabaseW(), MsiOpenPackageExW(), MsiOpenProductW(), MsiViewFetch(), MsiViewGetColumnInfo(), and s_remote_GetActionInfo().

◆ alloc_msiobject()

void* alloc_msiobject ( UINT  type,
UINT  size,
msihandledestructor  destroy 
)

Definition at line 201 of file handle.c.

202 {
204 
205  info = msi_alloc_zero( size );
206  if( info )
207  {
208  info->magic = MSIHANDLE_MAGIC;
209  info->type = type;
210  info->refcount = 1;
211  info->destructor = destroy;
212  }
213 
214  return info;
215 }
static void * msi_alloc_zero(size_t len) __WINE_ALLOC_SIZE(1)
Definition: msipriv.h:1148
static struct _test_info info[]
Definition: SetCursorPos.c:19
GLsizeiptr size
Definition: glext.h:5919
void destroy(_Tp *__pointer)
Definition: _construct.h:278
#define MSIHANDLE_MAGIC
Definition: msipriv.h:736
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545

Referenced by create_suminfo(), MSI_CreateRecord(), MSI_DatabaseOpenViewW(), MSI_EnableUIPreview(), and MSI_OpenDatabaseW().

◆ msi_free_handle_table()

void msi_free_handle_table ( void  )

Definition at line 71 of file handle.c.

72 {
78 }
static void msi_free(void *mem)
Definition: msipriv.h:1159
static msi_handle_info * msihandletable
Definition: handle.c:68
static CRITICAL_SECTION MSI_object_cs
Definition: handle.c:48
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define NULL
Definition: types.h:112
static CRITICAL_SECTION MSI_handle_cs
Definition: handle.c:38
static unsigned int msihandletable_size
Definition: handle.c:69

Referenced by DllMain().

◆ msi_get_remote()

MSIHANDLE msi_get_remote ( MSIHANDLE  handle)

Definition at line 183 of file handle.c.

184 {
185  MSIHANDLE ret = 0;
186 
188  handle--;
190  goto out;
191  if( !msihandletable[handle].remote)
192  goto out;
194 
195 out:
197 
198  return ret;
199 }
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
MSIHANDLE rem
Definition: handle.c:63
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
unsigned long MSIHANDLE
Definition: winemsi.idl:24
static msi_handle_info * msihandletable
Definition: handle.c:68
union msi_handle_info_t::@485 u
static FILE * out
Definition: regtests2xml.c:44
int ret
static CRITICAL_SECTION MSI_handle_cs
Definition: handle.c:38
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
static unsigned int msihandletable_size
Definition: handle.c:69

Referenced by MsiDatabaseCommit(), MsiDatabaseGetPrimaryKeysW(), MsiDatabaseIsTablePersistentW(), MsiDatabaseOpenViewW(), MsiDoActionW(), MsiEnumComponentCostsW(), MsiFormatRecordA(), MsiFormatRecordW(), MsiGetActiveDatabase(), MsiGetComponentStateW(), MsiGetFeatureCostW(), MsiGetFeatureStateW(), MsiGetLanguage(), MsiGetMode(), MsiGetPropertyA(), MsiGetPropertyW(), MsiGetSourcePathA(), MsiGetSourcePathW(), MsiGetSummaryInformationW(), MsiGetTargetPathA(), MsiGetTargetPathW(), MsiProcessMessage(), MsiSequenceW(), MsiSetComponentStateW(), MsiSetFeatureStateW(), MsiSetInstallLevel(), MsiSetMode(), MsiSetPropertyW(), MsiSetTargetPathW(), MsiSummaryInfoGetPropertyA(), MsiSummaryInfoGetPropertyCount(), MsiSummaryInfoGetPropertyW(), MsiSummaryInfoSetPropertyA(), MsiSummaryInfoSetPropertyW(), MsiViewClose(), MsiViewExecute(), MsiViewFetch(), MsiViewGetColumnInfo(), MsiViewGetErrorA(), MsiViewGetErrorW(), and MsiViewModify().

◆ MsiCloseAllHandles()

UINT WINAPI MsiCloseAllHandles ( void  )

Definition at line 325 of file handle.c.

326 {
327  UINT i, n=0;
328 
329  TRACE("\n");
330 
332  for(i=0; i<msihandletable_size; i++)
333  {
335  {
337  MsiCloseHandle( i+1 );
339  n++;
340  }
341  }
343 
344  return n;
345 }
GLdouble n
Definition: glext.h:7729
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static msi_handle_info * msihandletable
Definition: handle.c:68
DWORD WINAPI GetCurrentThreadId(VOID)
Definition: thread.c:459
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwThreadId
Definition: fdebug.c:31
UINT WINAPI MsiCloseHandle(MSIHANDLE handle)
Definition: handle.c:269
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
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50
static CRITICAL_SECTION MSI_handle_cs
Definition: handle.c:38
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
static unsigned int msihandletable_size
Definition: handle.c:69

Referenced by __wine_msi_call_dll_function(), and ScriptThread().

◆ MsiCloseHandle()

UINT WINAPI MsiCloseHandle ( MSIHANDLE  handle)

Definition at line 269 of file handle.c.

270 {
273 
274  TRACE( "%lu\n", handle );
275 
276  if (!handle)
277  return ERROR_SUCCESS;
278 
280 
281  handle--;
283  goto out;
284 
285  if (msihandletable[handle].remote)
286  {
287  remote_CloseHandle( msihandletable[handle].u.rem );
288  }
289  else
290  {
292  if( !info )
293  goto out;
294 
295  if( info->magic != MSIHANDLE_MAGIC )
296  {
297  ERR("Invalid handle!\n");
298  goto out;
299  }
300  }
301 
305 
306  ret = ERROR_SUCCESS;
307 
308  TRACE( "handle %lu destroyed\n", handle + 1 );
309 out:
311  if( info )
312  msiobj_release( info );
313 
314  return ret;
315 }
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 * u
Definition: glfuncs.h:240
#define ERROR_SUCCESS
Definition: deptool.c:10
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
static msi_handle_info * msihandletable
Definition: handle.c:68
union msi_handle_info_t::@485 u
#define TRACE(s)
Definition: solgame.cpp:4
static FILE * out
Definition: regtests2xml.c:44
int msiobj_release(MSIOBJECTHDR *info)
Definition: handle.c:241
MSIOBJECTHDR * obj
Definition: handle.c:62
int ret
#define ERR(fmt,...)
Definition: debug.h:110
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
static CRITICAL_SECTION MSI_handle_cs
Definition: handle.c:38
#define MSIHANDLE_MAGIC
Definition: msipriv.h:736
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
DWORD dwThreadId
Definition: handle.c:65
static unsigned int msihandletable_size
Definition: handle.c:69

Referenced by __wine_msi_call_dll_function(), ACTION_CallScript(), add_custom_dll(), AutomationObject_Release(), create_database(), create_database_wordcount(), do_query(), find_entry(), find_entryW(), find_prop_in_property(), generate_transform(), get_column_info(), get_columns_table_type(), get_integer(), get_patch_product_codes(), get_string(), helper_createpackage(), MSI_ProcessMessageVerbatim(), MsiCloseAllHandles(), MsiCollectUserInfoA(), MsiCollectUserInfoW(), MsiVerifyPackageW(), ok_(), package_from_db(), query_file_path(), run_query(), run_queryW(), s_remote_CloseHandle(), s_remote_DatabaseGetPrimaryKeys(), s_remote_FormatRecord(), s_remote_ProcessMessage(), s_remote_ViewExecute(), s_remote_ViewFetch(), s_remote_ViewGetColumnInfo(), s_remote_ViewModify(), set_admin_summary_info(), set_suminfo(), set_suminfo_prop(), set_summary_dword(), set_summary_info(), set_summary_str(), set_transform_summary_info(), test_access(), test_alter(), test_appsearch(), test_appsearch_complocator(), test_appsearch_drlocator(), test_appsearch_inilocator(), test_appsearch_reglocator(), test_binary(), test_binary_import(), test_carriagereturn(), test_ccpsearch(), test_collation(), test_columnorder(), test_complocator(), test_condition(), test_controlevent(), test_costs(), test_createpackage(), test_createtable(), test_customaction1(), test_db(), test_dbmerge(), test_dbtopackage(), test_defaultdatabase(), test_deleterow(), test_doaction(), test_droptable(), test_embedded_nulls(), test_emptypackage(), test_externalui(), test_externalui_message(), test_featureparents(), test_fieldzero(), test_forcecodepage(), test_format_record(), test_formatrecord(), test_formatrecord2(), test_formatrecord_tables(), test_getcolinfo(), test_gettargetpath_bad(), test_handle_limit(), test_icon_table(), test_insertorder(), test_installprops(), test_int_widths(), test_integers(), test_invalid_functions(), test_join(), test_launchconditions(), test_longstrings(), test_markers(), test_msibadqueries(), test_msidatabase(), test_MsiDatabaseCommit(), test_msiexport(), test_MsiGetFeatureInfo(), test_MsiGetProductProperty(), test_MsiGetSourcePath(), test_msiimport(), test_msiinsert(), test_MsiOpenDatabase(), test_MsiOpenProduct(), test_msipackage(), test_msirecord(), test_MsiRecordGetInteger(), test_MsiRecordGetString(), test_MsiSetComponentState(), test_MsiSetFeatureAttributes(), test_MsiSetProperty(), test_noquotes(), test_order(), test_packagecoltypes(), test_primary_keys(), test_property_table(), test_props(), test_quotes(), test_removefiles(), test_rows_order(), test_select_column_names(), test_select_markers(), test_select_with_tablenames(), test_settargetpath(), test_shortlongsource(), test_simple_patch(), test_sourcedir(), test_special_tables(), test_states(), test_storages_table(), test_streamtable(), test_stringtable(), test_suminfo(), test_suminfo_import(), test_summary_binary(), test_system_tables(), test_tables_order(), test_temporary_table(), test_top_level_action(), test_try_transform(), test_update(), test_view_get_error(), test_viewfetch_wraparound(), test_viewgetcolumninfo(), test_viewmodify(), test_viewmodify_assign(), test_viewmodify_delete(), test_viewmodify_delete_temporary(), test_viewmodify_insert(), test_viewmodify_merge(), test_viewmodify_refresh(), test_viewmodify_update(), test_where(), test_where_not_in_selected(), test_where_viewmodify(), try_insert_query(), try_query_param(), and write_msi_summary_info().

◆ msihandle2msiinfo()

void* msihandle2msiinfo ( MSIHANDLE  handle,
UINT  type 
)

Definition at line 158 of file handle.c.

159 {
160  MSIOBJECTHDR *ret = NULL;
161 
163  handle--;
164  if( handle >= msihandletable_size )
165  goto out;
166  if( msihandletable[handle].remote)
167  goto out;
168  if( !msihandletable[handle].u.obj )
169  goto out;
170  if( msihandletable[handle].u.obj->magic != MSIHANDLE_MAGIC )
171  goto out;
172  if( type && (msihandletable[handle].u.obj->type != type) )
173  goto out;
175  msiobj_addref( ret );
176 
177 out:
179 
180  return ret;
181 }
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 * u
Definition: glfuncs.h:240
void msiobj_addref(MSIOBJECTHDR *info)
Definition: handle.c:217
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
static msi_handle_info * msihandletable
Definition: handle.c:68
union msi_handle_info_t::@485 u
static FILE * out
Definition: regtests2xml.c:44
MSIOBJECTHDR * obj
Definition: handle.c:62
int ret
#define NULL
Definition: types.h:112
static CRITICAL_SECTION MSI_handle_cs
Definition: handle.c:38
#define MSIHANDLE_MAGIC
Definition: msipriv.h:736
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
static unsigned int msihandletable_size
Definition: handle.c:69

Referenced by copy_remote_record(), marshal_record(), MSI_OpenPackageW(), MsiDatabaseApplyTransformW(), MsiDatabaseCommit(), MsiDatabaseExportW(), MsiDatabaseGetPrimaryKeysW(), MsiDatabaseImportW(), MsiDatabaseIsTablePersistentW(), MsiDatabaseMergeW(), MsiDatabaseOpenViewW(), MsiEnableUIPreview(), MsiEnumComponentCostsW(), MsiFormatRecordA(), MsiFormatRecordW(), MsiGetDatabaseState(), MsiGetFeatureInfoW(), MsiGetSummaryInformationW(), MsiPreviewDialogW(), MsiProcessMessage(), MsiRecordClearData(), MsiRecordDataSize(), MsiRecordGetFieldCount(), MsiRecordGetInteger(), MsiRecordGetStringA(), MsiRecordGetStringW(), MsiRecordIsNull(), MsiRecordReadStream(), MsiRecordSetInteger(), MsiRecordSetStreamW(), MsiRecordSetStringA(), MsiRecordSetStringW(), MsiSetFeatureAttributesW(), MsiSummaryInfoGetPropertyA(), MsiSummaryInfoGetPropertyCount(), MsiSummaryInfoGetPropertyW(), MsiSummaryInfoPersist(), MsiSummaryInfoSetPropertyA(), MsiSummaryInfoSetPropertyW(), MsiViewClose(), MsiViewExecute(), MsiViewFetch(), MsiViewGetColumnInfo(), MsiViewGetErrorA(), MsiViewGetErrorW(), and MsiViewModify().

◆ msiobj_addref()

void msiobj_addref ( MSIOBJECTHDR info)

Definition at line 217 of file handle.c.

218 {
219  if( !info )
220  return;
221 
222  if( info->magic != MSIHANDLE_MAGIC )
223  {
224  ERR("Invalid handle!\n");
225  return;
226  }
227 
228  InterlockedIncrement(&info->refcount);
229 }
#define ERR(fmt,...)
Definition: debug.h:110
#define InterlockedIncrement
Definition: armddk.h:53
#define MSIHANDLE_MAGIC
Definition: msipriv.h:736

Referenced by alloc_msihandle(), CREATE_CreateView(), DISTINCT_CreateView(), do_msidbCustomActionTypeDll(), do_msidbCustomActionTypeScript(), INSERT_CreateView(), MSI_CreatePackage(), MSI_DatabaseOpenViewW(), MSI_EnableUIPreview(), MSI_OpenDatabaseW(), msihandle2msiinfo(), UPDATE_CreateView(), and WHERE_CreateView().

◆ msiobj_lock()

◆ msiobj_release()

int msiobj_release ( MSIOBJECTHDR info)

Definition at line 241 of file handle.c.

242 {
243  int ret;
244 
245  if( !info )
246  return -1;
247 
248  if( info->magic != MSIHANDLE_MAGIC )
249  {
250  ERR("Invalid handle!\n");
251  return -1;
252  }
253 
254  ret = InterlockedDecrement( &info->refcount );
255  if( ret==0 )
256  {
257  if( info->destructor )
258  info->destructor( info );
259  msi_free( info );
260  TRACE("object %p destroyed\n", info);
261  }
262 
263  return ret;
264 }
static void msi_free(void *mem)
Definition: msipriv.h:1159
#define TRACE(s)
Definition: solgame.cpp:4
int ret
#define InterlockedDecrement
Definition: armddk.h:52
#define ERR(fmt,...)
Definition: debug.h:110
#define MSIHANDLE_MAGIC
Definition: msipriv.h:736

Referenced by ACTION_AllocateRegistrySpace(), ACTION_AppSearch(), ACTION_BindImage(), ACTION_CCPSearch(), ACTION_CostFinalize(), ACTION_CreateFolders(), ACTION_CreateShortcuts(), ACTION_CustomAction(), ACTION_DeleteServices(), ACTION_DuplicateFiles(), ACTION_ExecuteAction(), ACTION_FindRelatedProducts(), ACTION_InstallODBC(), ACTION_InstallServices(), ACTION_InstallValidate(), ACTION_LaunchConditions(), ACTION_MigrateFeatureStates(), ACTION_MoveFiles(), ACTION_MsiPublishAssemblies(), ACTION_MsiUnpublishAssemblies(), ACTION_PerformActionSequence(), ACTION_ProcessComponents(), ACTION_ProcessExecSequence(), ACTION_ProcessUISequence(), ACTION_PublishComponents(), ACTION_PublishFeatures(), ACTION_PublishProduct(), ACTION_RegisterClassInfo(), ACTION_RegisterExtensionInfo(), ACTION_RegisterFonts(), ACTION_RegisterMIMEInfo(), ACTION_RegisterProduct(), ACTION_RegisterProgIdInfo(), ACTION_RegisterTypeLibraries(), ACTION_RegisterUser(), ACTION_RemoveDuplicateFiles(), ACTION_RemoveEnvironmentStrings(), ACTION_RemoveExistingProducts(), ACTION_RemoveFiles(), ACTION_RemoveFolders(), ACTION_RemoveIniValues(), ACTION_RemoveODBC(), ACTION_RemoveRegistryValues(), ACTION_RemoveShortcuts(), ACTION_SelfRegModules(), ACTION_SelfUnregModules(), ACTION_SetODBCFolders(), ACTION_ShowDialog(), ACTION_StartServices(), ACTION_StopServices(), ACTION_UnpublishComponents(), ACTION_UnregisterClassInfo(), ACTION_UnregisterExtensionInfo(), ACTION_UnregisterFonts(), ACTION_UnregisterMIMEInfo(), ACTION_UnregisterProgIdInfo(), ACTION_UnregisterTypeLibraries(), ACTION_WriteEnvironmentStrings(), ACTION_WriteIniValues(), ACTION_WriteRegistryValues(), add_stream(), check_transform_applicable(), construct_record(), copy_remote_record(), CREATE_delete(), create_diff_row_query(), create_temp_binary(), create_temp_property_table(), deformat_string(), dialog_create(), dialog_map_events(), DISTINCT_delete(), free_custom_action_data(), gather_merge_data(), get_assembly_display_name(), get_assembly_record(), get_key_value(), get_property(), get_signature(), HANDLE_CustomType19(), HANDLE_CustomType5_6(), INSERT_delete(), INSERT_execute(), internal_ui_handler(), is_uninstallable(), ITERATE_AppSearch(), ITERATE_CreateFolders(), ITERATE_DeleteService(), ITERATE_DuplicateFiles(), ITERATE_FindRelatedProducts(), ITERATE_InstallODBCDataSource(), ITERATE_InstallODBCDriver(), ITERATE_InstallODBCTranslator(), ITERATE_InstallService(), ITERATE_MoveFiles(), iterate_properties(), ITERATE_PublishComponent(), ITERATE_RegisterFonts(), ITERATE_RemoveDuplicateFiles(), ITERATE_RemoveEnvironmentString(), ITERATE_RemoveFiles(), ITERATE_RemoveFolders(), ITERATE_RemoveIniValuesOnInstall(), ITERATE_RemoveIniValuesOnUninstall(), ITERATE_RemoveODBCDataSource(), ITERATE_RemoveODBCDriver(), ITERATE_RemoveODBCTranslator(), ITERATE_RemoveRegistryValuesOnInstall(), ITERATE_RemoveRegistryValuesOnUninstall(), ITERATE_SelfRegModules(), ITERATE_SelfUnregModules(), ITERATE_StartService(), ITERATE_StopService(), ITERATE_UnpublishComponent(), ITERATE_UnregisterFonts(), ITERATE_WriteEnvironmentString(), ITERATE_WriteIniValues(), ITERATE_WriteRegistryValues(), join_modify_update(), load_all_classes(), load_all_extensions(), load_all_files(), load_all_folders(), load_all_media(), load_all_mimes(), load_all_patches(), load_all_progids(), load_all_verbs(), load_feature(), load_file_disk_id(), load_file_hash(), load_folder_persistence(), load_given_appid(), load_given_class(), load_given_extension(), load_given_mime(), load_given_progid(), load_patch_disk_id(), mark_patched_components(), marshal_record(), merge_diff_row(), merge_diff_tables(), merge_free_rows(), merge_verify_colnames(), merge_verify_primary_keys(), msi_add_records_to_table(), msi_add_suminfo(), msi_add_table_to_db(), MSI_ApplicablePatchW(), msi_apply_patch_package(), msi_apply_registered_patch(), msi_arrange_record(), msi_change_media(), msi_clone_properties(), MSI_CloneRecord(), MSI_ClosePreview(), MSI_CloseView(), msi_combobox_add_items(), msi_create_table(), MSI_CreatePackage(), MSI_DatabaseExport(), MSI_DatabaseGetPrimaryKeys(), MSI_DatabaseOpenViewW(), msi_dialog_build_font_list(), msi_dialog_button_handler(), msi_dialog_evaluate_control_conditions(), msi_dialog_fill_controls(), msi_dialog_get_uitext(), msi_dialog_oncreate(), msi_dialog_radiogroup_control(), msi_dialog_seltree_handler(), MSI_EnableUIPreview(), msi_export_suminfo(), msi_file_update_ui(), MSI_FormatRecordW(), MSI_FreePackage(), msi_get_checkbox_value(), msi_get_db_suminfo(), msi_get_error_message(), msi_get_merge_table(), msi_get_package_code(), msi_get_property(), msi_get_property_row(), msi_get_query_columns(), msi_get_query_types(), msi_get_suminfo(), msi_get_suminfo_product(), msi_get_table_labels(), msi_get_transform_record(), MSI_IterateRecords(), msi_listbox_add_items(), msi_listview_add_items(), msi_load_all_components(), msi_load_all_features(), msi_load_assembly(), msi_load_image(), msi_load_media_info(), msi_load_picture(), msi_load_suminfo_properties(), msi_media_get_disk_info(), MSI_OpenDatabaseW(), MSI_OpenPackageW(), msi_publish_icons(), msi_query_merge_record(), MSI_QueryGetRecord(), msi_refresh_record(), MSI_Sequence(), msi_set_property(), msi_table_apply_transform(), msi_table_load_transform(), msi_ui_progress(), msi_unimplemented_action_stub(), msi_unpublish_feature(), msi_unpublish_icons(), msi_view_get_row(), MsiCloseHandle(), MsiCollectUserInfoA(), MsiCollectUserInfoW(), MsiConfigureFeatureW(), MsiConfigureProductExW(), MsiCreateRecord(), MsiDatabaseApplyTransformW(), MsiDatabaseCommit(), MsiDatabaseExportW(), MsiDatabaseGetPrimaryKeysW(), MsiDatabaseImportW(), MsiDatabaseIsTablePersistentW(), MsiDatabaseMergeW(), MsiDatabaseOpenViewW(), MsiDetermineApplicablePatchesW(), MsiDeterminePatchSequenceW(), MsiDoActionW(), MsiEnableUIPreview(), MsiEnumComponentCostsW(), MsiFormatRecordA(), MsiFormatRecordW(), MsiGetActiveDatabase(), MsiGetComponentStateW(), MsiGetDatabaseState(), MsiGetFeatureCostW(), MsiGetFeatureInfoW(), MsiGetFeatureStateW(), MsiGetLanguage(), MsiGetMode(), MsiGetProductPropertyW(), MsiGetPropertyA(), MsiGetPropertyW(), MsiGetSourcePathA(), MsiGetSourcePathW(), MsiGetSummaryInformationW(), MsiGetTargetPathA(), MsiGetTargetPathW(), MsiInstallProductW(), MsiOpenDatabaseW(), MsiOpenPackageExW(), MsiOpenProductW(), MsiPreviewDialogW(), MsiProcessMessage(), MsiRecordClearData(), MsiRecordDataSize(), MsiRecordGetFieldCount(), MsiRecordGetInteger(), MsiRecordGetStringA(), MsiRecordGetStringW(), MsiRecordIsNull(), MsiRecordReadStream(), MsiRecordSetInteger(), MsiRecordSetStreamW(), MsiRecordSetStringA(), MsiRecordSetStringW(), MsiReinstallFeatureW(), MsiSequenceW(), MsiSetComponentStateW(), MsiSetFeatureAttributesW(), MsiSetFeatureStateW(), MsiSetInstallLevel(), MsiSetMode(), MsiSetPropertyW(), MsiSetTargetPathW(), MsiSummaryInfoGetPropertyA(), MsiSummaryInfoGetPropertyCount(), MsiSummaryInfoGetPropertyW(), MsiSummaryInfoPersist(), MsiSummaryInfoSetPropertyA(), MsiSummaryInfoSetPropertyW(), MsiViewClose(), MsiViewExecute(), MsiViewFetch(), MsiViewGetColumnInfo(), MsiViewGetErrorA(), MsiViewGetErrorW(), MsiViewModify(), patch_add_media(), patch_offset_get_filepatches(), patch_offset_get_files(), patch_offset_modify_db(), patch_set_media_source_prop(), patch_set_offsets(), patch_update_filepatch_sequence(), resolve_keypath(), search_components(), search_dr(), search_ini(), search_reg(), SELECT_insert_row(), SELECT_modify(), SELECT_set_row(), TABLE_add_column(), TABLE_drop(), TABLE_remove_column(), TransformView_add_column(), TransformView_Create(), TransformView_create_table(), TransformView_delete_row(), TransformView_drop_table(), TransformView_insert_row(), TransformView_set_row(), translate_record(), ui_actioninfo(), ui_actionstart(), ui_sequence_exists(), UPDATE_delete(), UPDATE_execute(), update_merge_errors(), WHERE_delete(), and WHERE_set_row().

◆ msiobj_unlock()

◆ s_remote_CloseHandle()

UINT __cdecl s_remote_CloseHandle ( MSIHANDLE  handle)

Definition at line 347 of file handle.c.

348 {
349  return MsiCloseHandle(handle);
350 }
UINT WINAPI MsiCloseHandle(MSIHANDLE handle)
Definition: handle.c:269

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msi  )

Variable Documentation

◆ MSI_handle_cs

◆ MSI_handle_cs_debug

CRITICAL_SECTION_DEBUG MSI_handle_cs_debug
static
Initial value:
=
{
0, 0, &MSI_handle_cs,
0, 0, { (DWORD_PTR)(__FILE__ ": MSI_handle_cs") }
}
#define DWORD_PTR
Definition: treelist.c:76
LIST_ENTRY ProcessLocksList
Definition: winbase.h:880
static CRITICAL_SECTION_DEBUG MSI_handle_cs_debug
Definition: handle.c:39
static CRITICAL_SECTION MSI_handle_cs
Definition: handle.c:38

Definition at line 39 of file handle.c.

◆ MSI_object_cs

static CRITICAL_SECTION MSI_object_cs = { &MSI_object_cs_debug, -1, 0, 0, 0, 0 }
static

Definition at line 48 of file handle.c.

Referenced by msi_free_handle_table(), msiobj_lock(), and msiobj_unlock().

◆ MSI_object_cs_debug

CRITICAL_SECTION_DEBUG MSI_object_cs_debug
static
Initial value:
=
{
0, 0, &MSI_object_cs,
0, 0, { (DWORD_PTR)(__FILE__ ": MSI_object_cs") }
}
#define DWORD_PTR
Definition: treelist.c:76
static CRITICAL_SECTION MSI_object_cs
Definition: handle.c:48
LIST_ENTRY ProcessLocksList
Definition: winbase.h:880
static CRITICAL_SECTION_DEBUG MSI_object_cs_debug
Definition: handle.c:49

Definition at line 49 of file handle.c.

◆ msihandletable

◆ msihandletable_size

unsigned int msihandletable_size = 0
static