41#include "oleaut32_oaidl.h"
82 0, 0, { (
DWORD_PTR)(__FILE__
": bstr_cache") }
99#define BUCKET_BUFFER_SIZE 6
107#define ARENA_INUSE_FILLER 0x55
108#define ARENA_TAIL_FILLER 0xab
109#define ARENA_FREE_FILLER 0xfeeefeee
285 alloc_size = IMalloc_GetSize(
malloc, bstr);
286 if (alloc_size == ~0
UL)
299 WARN_(
heap)(
"String already is in cache!\n");
396 if (!bstr)
return FALSE;
399 bstr->
size = newbytelen;
532 DWORD rot_flags = ROTFLAGS_REGISTRATIONKEEPSALIVE;
545 ret = IRunningObjectTable_Register(runobtable,rot_flags,
punk,
moniker,pdwRegister);
546 IRunningObjectTable_Release(runobtable);
571 ret = IRunningObjectTable_Revoke(runobtable,xregister);
573 IRunningObjectTable_Release(runobtable);
607 ret = IRunningObjectTable_GetObject(runobtable,
moniker,ppunk);
608 IRunningObjectTable_Release(runobtable);
668 FIXME(
"Version value not known yet. Please investigate it !\n");
698 TRACE(
"%#lx, %p, %p.\n", clr, hpal, pColorRef);
703 if (pColorRef ==
NULL)
704 pColorRef = &colorref;
803 ACTCTX_SECTION_KEYED_DATA
data;
821 ERR(
"need larger module buffer, %lu.\n", tlib->
name_len);
833 char tlguid[200], typelibkey[316], interfacekey[300], ver[100], tlfn[260];
839 sprintf( interfacekey,
"Interface\\{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\Typelib",
840 iid->Data1, iid->Data2, iid->Data3,
841 iid->Data4[0], iid->Data4[1], iid->Data4[2], iid->Data4[3],
842 iid->Data4[4], iid->Data4[5], iid->Data4[6], iid->Data4[7]
852 ERR(
"No %s key found.\n", interfacekey);
856 tlguidlen =
sizeof(tlguid);
859 ERR(
"Getting typelib guid failed.\n");
864 verlen =
sizeof(ver);
867 ERR(
"Could not get version value?\n");
875 sprintf(typelibkey,
"Typelib\\%s\\%s\\0\\win%u", tlguid, ver,
sizeof(
void *) == 8 ? 64 : 32);
877 snprintf(typelibkey,
sizeof(typelibkey),
"Typelib\\%s\\%s\\0\\win%u", tlguid, ver,
sizeof(
void *) == 8 ? 64 : 32);
879 tlfnlen =
sizeof(tlfn);
883 sprintf(typelibkey,
"Typelib\\%s\\%s\\0\\win32", tlguid, ver);
884 tlfnlen =
sizeof(tlfn);
888 ERR(
"Could not get typelib fn?\n");
916 ERR(
"Failed to load typelib for %s, but it should be there.\n",
debugstr_guid(iid));
960 IPSFactoryBuffer_Release(
factory);
990 ERR(
"Failed to create proxy, hr %#lx.\n",
hr);
1006 IPSFactoryBuffer_Release(
factory);
1026 TRACE(
"%p decreasing refcount to %u.\n",
stub, refcount);
1032 IRpcStubBuffer_Disconnect(iface);
1079 if (!(
object =
calloc(1,
sizeof(*
object))))
1104 object->stub_buffer.lpVtbl = &
object->stub_vtbl.Vtbl;
1105 object->stub_buffer.RefCount = 1;
1106 object->stub_buffer.pvServerObject =
dispatch;
1113 TRACE(
"Created stub %p.\n",
object);
1144 ERR(
"Failed to create stub, hr %#lx.\n",
hr);
1231 FIXME(
"(%p,%p), partially implemented.\n",hinstExe,
hIcon);
1241 static const WCHAR *arabic_hijri[] =
1243 L"\x0645\x062d\x0631\x0645",
1244 L"\x0635\x0641\x0631",
1245 L"\x0631\x0628\x064a\x0639 \x0627\x0644\x0627\x0648\x0644",
1246 L"\x0631\x0628\x064a\x0639 \x0627\x0644\x062b\x0627\x0646\x064a",
1247 L"\x062c\x0645\x0627\x062f\x0649 \x0627\x0644\x0627\x0648\x0644\x0649",
1248 L"\x062c\x0645\x0627\x062f\x0649 \x0627\x0644\x062b\x0627\x0646\x064a\x0629",
1249 L"\x0631\x062c\x0628",
1250 L"\x0634\x0639\x0628\x0627\x0646",
1251 L"\x0631\x0645\x0636\x0627\x0646",
1252 L"\x0634\x0648\x0627\x0643",
1253 L"\x0630\x0648 \x0627\x0644\x0642\x0639\x062f\x0629",
1254 L"\x0630\x0648 \x0627\x0644\x062d\x062c\x0629",
1258 static const WCHAR *polish_genitive_names[] =
1269 L"pa\x017a" "dziernika",
1275 static const WCHAR *russian_genitive_names[] =
1277 L"\x044f\x043d\x0432\x0430\x0440\x044f",
1278 L"\x0444\x0435\x0432\x0440\x0430\x043b\x044f",
1279 L"\x043c\x0430\x0440\x0442\x0430",
1280 L"\x0430\x043f\x0440\x0435\x043b\x044f",
1281 L"\x043c\x0430\x044f",
1282 L"\x0438\x044e\x043d\x044f",
1283 L"\x0438\x044e\x043b\x044f",
1284 L"\x0430\x0432\x0433\x0443\x0441\x0442\x0430",
1285 L"\x0441\x0435\x043d\x0442\x044f\x0431\x0440\x044f",
1286 L"\x043e\x043a\x0442\x044f\x0431\x0440\x044f",
1287 L"\x043d\x043e\x044f\x0431\x0440\x044f",
1288 L"\x0434\x0435\x043a\x0430\x0431\x0440\x044f",
1295 *
str = (LPOLESTR *)arabic_hijri;
1297 *
str = (LPOLESTR *)polish_genitive_names;
1299 *
str = (LPOLESTR *)russian_genitive_names;
#define DECLSPEC_HOTPATCH
static DWORD const fdwReason
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void dispatch(HANDLE hStopEvent)
const GUID IID_IClassFactory
#define RegCloseKey(hKey)
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LSTATUS WINAPI RegQueryValueA(HKEY hkey, LPCSTR name, LPSTR data, LPLONG count)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void *WINAPI CoTaskMemRealloc(void *ptr, SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
HRESULT WINAPI CoGetMalloc(DWORD context, IMalloc **imalloc)
#define DLL_PROCESS_ATTACH
#define GetEnvironmentVariableW(x, y, z)
#define GetCurrentProcess()
#define WINE_DECLARE_DEBUG_CHANNEL(x)
#define MultiByteToWideChar
BOOL WINAPI FindActCtxSectionGuid(DWORD dwFlags, const GUID *lpExtGuid, ULONG ulId, const GUID *lpSearchGuid, PACTCTX_SECTION_KEYED_DATA pInfo)
DWORD WINAPI GetVersion(void)
HRESULT WINAPI GetRunningObjectTable(DWORD reserved, IRunningObjectTable **ret)
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
ULONG WINAPI CStdStubBuffer_CountRefs(LPRPCSTUBBUFFER iface)
void WINAPI CStdStubBuffer_DebugServerRelease(LPRPCSTUBBUFFER iface, LPVOID pv)
HRESULT WINAPI CStdStubBuffer_QueryInterface(LPRPCSTUBBUFFER iface, REFIID riid, LPVOID *obj)
ULONG WINAPI CStdStubBuffer_AddRef(LPRPCSTUBBUFFER iface)
void WINAPI CStdStubBuffer_Disconnect(LPRPCSTUBBUFFER iface)
LPRPCSTUBBUFFER WINAPI CStdStubBuffer_IsIIDSupported(LPRPCSTUBBUFFER iface, REFIID riid)
HRESULT WINAPI CStdStubBuffer_Invoke(LPRPCSTUBBUFFER iface, PRPCOLEMESSAGE pMsg, LPRPCCHANNELBUFFER pChannel)
HRESULT WINAPI CStdStubBuffer_DebugServerQueryInterface(LPRPCSTUBBUFFER iface, LPVOID *ppv)
HRESULT WINAPI CStdStubBuffer_Connect(LPRPCSTUBBUFFER iface, LPUNKNOWN lpUnkServer)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
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
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
HRESULT WINAPI CreateItemMoniker(const WCHAR *delimiter, const WCHAR *name, IMoniker **ret)
static IN DWORD IN LPVOID lpvReserved
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
static const CLSID CLSID_StdFont
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
interface IMoniker * LPMONIKER
interface IRunningObjectTable * LPRUNNINGOBJECTTABLE
static HRESULT dispatch_create_proxy(IUnknown *outer, IRpcProxyBuffer **proxy, void **out)
HRESULT WINAPI OleTranslateColor(OLE_COLOR clr, HPALETTE hpal, COLORREF *pColorRef)
static struct dispinterface_stub * impl_from_IRpcStubBuffer(IRpcStubBuffer *iface)
HRESULT WINAPI DECLSPEC_HOTPATCH RevokeActiveObject(DWORD xregister, LPVOID reserved)
HRESULT WINAPI DECLSPEC_HOTPATCH GetActiveObject(REFCLSID rcid, LPVOID preserved, LPUNKNOWN *ppunk)
HRESULT WINAPI DllRegisterServer(void)
static const IPSFactoryBufferVtbl dispatch_typelib_ps_vtbl
void _get_STDPIC_CF(LPVOID *)
static size_t bstr_alloc_size(size_t size)
static BOOL actctx_get_typelib_module(REFIID iid, WCHAR *module, DWORD len)
UINT WINAPI SysStringByteLen(BSTR str)
static bstr_cache_entry_t * get_cache_entry_from_idx(unsigned cache_idx)
void _get_STDFONT_CF(LPVOID *)
static HRESULT get_typeinfo_for_iid(REFIID iid, ITypeInfo **typeinfo)
static ULONG WINAPI dispatch_typelib_ps_AddRef(IPSFactoryBuffer *iface)
static bstr_cache_entry_t bstr_cache[0x10000/BUCKET_SIZE]
HRESULT WINAPI OLEAUTPS_DllGetClassObject(REFCLSID, REFIID, LPVOID *)
const ExtendedProxyFileInfo oleaut32_oaidl_ProxyFileInfo
HRESULT WINAPI OLEAUTPS_DllRegisterServer(void)
static HRESULT WINAPI dispatch_typelib_ps_CreateProxy(IPSFactoryBuffer *iface, IUnknown *outer, REFIID iid, IRpcProxyBuffer **proxy, void **out)
HRESULT WINAPI OLEAUTPS_DllUnregisterServer(void)
static bstr_t * alloc_bstr(size_t size)
static bstr_t * bstr_from_str(BSTR str)
HRESULT WINAPI GetAltMonthNames(LCID lcid, LPOLESTR **str)
BSTR WINAPI SysAllocString(LPCOLESTR str)
INT WINAPI SysReAllocString(LPBSTR old, LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
#define ARENA_FREE_FILLER
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
HRESULT WINAPI DllUnregisterServer(void)
HCURSOR WINAPI OleIconToCursor(HINSTANCE hinstExe, HICON hIcon)
static BOOL bstr_cache_enabled
HRESULT WINAPI CreateStubFromTypeInfo(ITypeInfo *typeinfo, REFIID iid, IUnknown *server, IRpcStubBuffer **stub)
BOOL WINAPI OLEAUTPS_DllMain(HINSTANCE, DWORD, LPVOID)
static HRESULT reg_get_typelib_module(REFIID iid, WCHAR *module, DWORD len)
static bstr_cache_entry_t * get_cache_entry_from_alloc_size(SIZE_T alloc_size)
int WINAPI SysReAllocStringLen(BSTR *old, const OLECHAR *str, unsigned int len)
static ULONG WINAPI dispatch_typelib_ps_Release(IPSFactoryBuffer *iface)
static bstr_cache_entry_t * get_cache_entry(size_t size)
static IMalloc * get_malloc(void)
static CRITICAL_SECTION cs_bstr_cache
static HRESULT dispatch_create_stub(IUnknown *server, IRpcStubBuffer **stub)
static CRITICAL_SECTION_DEBUG cs_bstr_cache_dbg
void WINAPI SetOaNoCache(void)
static HRESULT WINAPI dispatch_typelib_ps_QueryInterface(IPSFactoryBuffer *iface, REFIID iid, void **out)
#define ARENA_INUSE_FILLER
static ULONG WINAPI dispinterface_stub_Release(IRpcStubBuffer *iface)
BSTR WINAPI DECLSPEC_HOTPATCH SysAllocStringByteLen(LPCSTR str, UINT len)
#define ARENA_TAIL_FILLER
static const CInterfaceStubVtbl * find_idispatch_stub_vtbl(void)
static HRESULT WINAPI dispatch_typelib_ps_CreateStub(IPSFactoryBuffer *iface, REFIID iid, IUnknown *server, IRpcStubBuffer **stub)
static HRESULT dispinterface_create_stub(IUnknown *server, const GUID *iid, IRpcStubBuffer **stub)
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
HRESULT WINAPI DECLSPEC_HOTPATCH RegisterActiveObject(LPUNKNOWN punk, REFCLSID rcid, DWORD dwFlags, LPDWORD pdwRegister)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
HRESULT WINAPI CreateProxyFromTypeInfo(ITypeInfo *typeinfo, IUnknown *outer, REFIID iid, IRpcProxyBuffer **proxy, void **obj)
BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
static IPSFactoryBuffer dispatch_typelib_ps
#define BUCKET_BUFFER_SIZE
ULONG WINAPI OaBuildVersion(void)
#define ACTIVEOBJECT_WEAK
const GUID CLSID_StdPicture
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#define IsEqualCLSID(rclsid1, rclsid2)
#define LANGIDFROMLCID(l)
LIST_ENTRY ProcessLocksList
CInterfaceStubVtbl stub_vtbl
CStdStubBuffer stub_buffer
CInterfaceStubHeader header
const IRpcStubBufferVtbl * lpVtbl
const PCInterfaceStubVtblList * pStubVtblList
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
GUID const CLSID_PSFactoryBuffer
static rfbScreenInfoPtr server
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
UINT WINAPI GetPaletteEntries(HPALETTE hpal, UINT iStartIndex, UINT cEntries, LPPALETTEENTRY ppe)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define PALETTERGB(r, g, b)
#define HKEY_CLASSES_ROOT
DWORD WINAPI GetSysColor(_In_ int)