56 0, 0, { (
DWORD_PTR)(__FILE__
": dcom registered server interfaces") }
66 0, 0, { (
DWORD_PTR)(__FILE__
": channel hooks") }
153 unsigned char extensions[1];
159 unsigned char extensions[1];
192 SC_HANDLE scm, service;
199 ERR(
"Failed to open service manager\n");
205 ERR(
"Failed to open RpcSs service\n");
230 WARN(
"RpcSs failed to start %lu\n",
status.dwCurrentState);
233 ERR(
"Failed to start RpcSs service\n");
262 unsigned short protseq[] = IRPCSS_PROTSEQ;
263 unsigned short endpoint[] = IRPCSS_ENDPOINT;
270 return irpcss_handle;
279 unsigned short protseq[] = IROT_PROTSEQ;
280 unsigned short endpoint[] = IROT_ENDPOINT;
290#define RPCSS_CALL_START \
295#define RPCSS_CALL_END \
296 } __EXCEPT(rpc_filter) { \
297 hr = HRESULT_FROM_WIN32(GetExceptionCode()); \
300 if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE)) { \
316 const InterfaceData *
object,
const InterfaceData *
moniker,
472 WARN(
"No LocalService value\n");
482 static const WCHAR embeddingW[] =
L" -Embedding";
484 int arch = (
sizeof(
void *) >
sizeof(
int)) ? 64 : 32;
512 WARN(
"No default value for LocalServer32 key\n");
552 static const WCHAR processidW[] =
L" /PROCESSID:";
554 int arch = (
sizeof(
void *) >
sizeof(
int)) ? 64 : 32;
585 TRACE(
"No value for DllSurrogate key\n");
631 PMInterfacePointer objref =
NULL;
639 static const int MAXTRIES = 30;
643 while (tries++ < MAXTRIES)
673 if (!objref || tries >= MAXTRIES)
677 hr = IStream_Write(
stream, objref->abData, objref->ulCntData, &
length);
686 TRACE(
"Unmarshalling local server.\n");
703 MInterfacePointer *
obj;
735 unsigned int *hook_count,
ULONG *extension_count)
738 ULONG total_size = 0;
739 unsigned int hook_index = 0;
742 *extension_count = 0;
756 ULONG extension_size = 0;
758 IChannelHook_ClientGetSize(
entry->hook, &
entry->id, &
info->iid, &extension_size);
762 extension_size = (extension_size+7)&~7;
763 (*data)[hook_index].id =
entry->id;
764 (*data)[hook_index].extension_size = extension_size;
770 (*extension_count)++;
783 unsigned int hook_count)
792 ULONG extension_size = 0;
795 for (
i = 0;
i < hook_count;
i++)
797 extension_size =
data[
i].extension_size;
803 IChannelHook_ClientFillBuffer(
entry->hook, &
entry->id, &
info->iid,
810 wire_orpc_extent->
conformance = (extension_size+7)&~7;
811 wire_orpc_extent->
size = extension_size;
812 wire_orpc_extent->
id =
entry->id;
823 ULONG extension_count)
833 for (
i = 0, wire_orpc_extent = first_wire_orpc_extent;
840 if (
i == extension_count) wire_orpc_extent =
NULL;
843 wire_orpc_extent ? wire_orpc_extent->
size : 0,
844 wire_orpc_extent ? wire_orpc_extent->
data :
NULL,
853 ULONG *extension_count)
856 ULONG total_size = 0;
857 unsigned int hook_index = 0;
860 *extension_count = 0;
874 ULONG extension_size = 0;
881 extension_size = (extension_size+7)&~7;
882 (*data)[hook_index].id =
entry->id;
883 (*data)[hook_index].extension_size = extension_size;
889 (*extension_count)++;
902 unsigned int hook_count)
911 ULONG extension_size = 0;
914 for (
i = 0;
i < hook_count;
i++)
916 extension_size =
data[
i].extension_size;
922 IChannelHook_ServerFillBuffer(
entry->hook, &
entry->id, &
info->iid,
930 wire_orpc_extent->
conformance = (extension_size+7)&~7;
931 wire_orpc_extent->
size = extension_size;
932 wire_orpc_extent->
id =
entry->id;
953 for (
i = 0, wire_orpc_extent = first_wire_orpc_extent;
960 if (
i == extension_count) wire_orpc_extent =
NULL;
963 wire_orpc_extent ? wire_orpc_extent->
size : 0,
964 wire_orpc_extent ? wire_orpc_extent->
data :
NULL,
981 IChannelHook_AddRef(
hook);
1011 IRpcChannelBuffer_AddRef(iface);
1058 ULONG extensions_size;
1060 unsigned int channel_hook_count;
1061 ULONG extension_count;
1071 &channel_hook_data, &channel_hook_count, &extension_count);
1074 if (extensions_size)
1077 if (extension_count & 1)
1088 free(channel_hook_data);
1095 orpcthat =
msg->Buffer;
1098 orpcthat->flags = ORPCF_NULL ;
1101 *(
DWORD *)
msg->Buffer = extensions_size ? 1 : 0;
1102 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1104 if (extensions_size)
1107 orpc_extent_array->
size = extension_count;
1112 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1114 *(
DWORD *)
msg->Buffer = (extension_count + 1) & ~1;
1115 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1118 msg->Buffer, channel_hook_data, channel_hook_count);
1122 if (extension_count & 1)
1127 wire_orpc_extent->
size = 0;
1132 free(channel_hook_data);
1172 ULONG extensions_size;
1174 unsigned int channel_hook_count;
1175 ULONG extension_count;
1200 msg->RpcInterfaceInformation = cif;
1216 &channel_hook_data, &channel_hook_count, &extension_count);
1219 if (extensions_size)
1222 if (extension_count & 1)
1275 orpcthis =
msg->Buffer;
1278 orpcthis->version.MajorVersion = COM_MAJOR_VERSION;
1279 orpcthis->version.MinorVersion = COM_MINOR_VERSION;
1281 orpcthis->reserved1 = 0;
1285 *(
DWORD *)
msg->Buffer = extensions_size ? 1 : 0;
1286 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1288 if (extensions_size)
1290 ORPC_EXTENT_ARRAY *orpc_extent_array =
msg->Buffer;
1291 orpc_extent_array->size = extension_count;
1292 orpc_extent_array->reserved = 0;
1296 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1298 *(
DWORD *)
msg->Buffer = (extension_count + 1) & ~1;
1299 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1302 msg->Buffer, channel_hook_data, channel_hook_count);
1306 if (extension_count & 1)
1311 wire_orpc_extent->
size = 0;
1322 free(channel_hook_data);
1344 TRACE(
"completed with status %#lx\n",
data->status);
1369 ORPC_EXTENT_ARRAY orpc_ext_array;
1375 TRACE(
"%p, iMethod %ld\n", olemsg, olemsg->iMethod);
1380 ERR(
"called from wrong apartment, should have been 0x%s\n",
1394 if (!
apt->multi_threaded &&
1398 ERR(
"can't make an outgoing COM call in response to a sent message\n");
1421 msg->ProcNum &= ~RPC_FLAGS_VALID_BIT;
1468 orpcthat.flags = ORPCF_NULL;
1469 orpcthat.extensions =
NULL;
1475 TRACE(
"hrFault = %#lx\n", hrFault);
1484 char *original_buffer =
msg->Buffer;
1501 msg->DataRepresentation,
1502 first_wire_orpc_extent,
1503 orpcthat.extensions && first_wire_orpc_extent ? orpcthat.extensions->
size : 0,
1510 if (pstatus) *pstatus =
status;
1573 free(
msg->RpcInterfaceInformation);
1574 msg->RpcInterfaceInformation =
NULL;
1591 TRACE(
"(%p,%p)\n", pdwDestContext, ppvDestContext);
1593 *pdwDestContext =
This->super.dest_context;
1594 *ppvDestContext =
This->super.dest_context_data;
1603 TRACE(
"(%p,%p)\n", dest_context, dest_context_data);
1605 *dest_context =
This->dest_context;
1606 *dest_context_data =
This->dest_context_data;
1643 const OXID_INFO *oxid_info,
const IID *iid,
1644 DWORD dest_context,
void *dest_context_data,
1695 This->super.refs = 1;
1696 This->super.dest_context = dest_context;
1697 This->super.dest_context_data = dest_context_data;
1700 This->server_pid = oxid_info->dwPid;
1704 *chan = &
This->super.IRpcChannelBuffer_iface;
1717 This->dest_context = dest_context;
1718 This->dest_context_data = dest_context_data;
1720 *chan = &
This->IRpcChannelBuffer_iface;
1728 ORPC_EXTENT_ARRAY *extensions,
1737 if ((
const char *)
msg->Buffer + 2 *
sizeof(
DWORD) >
end)
1740 pointer_id = *(
DWORD *)
msg->Buffer;
1741 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1742 extensions->extent =
NULL;
1749 if (*(
DWORD *)
msg->Buffer != ((extensions->size+1)&~1))
1752 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1755 if (extensions->size > 256)
1757 ERR(
"too many extensions: %ld\n", extensions->size);
1761 *first_wire_orpc_extent = wire_orpc_extent =
msg->Buffer;
1762 for (
i = 0;
i < ((extensions->size+1)&~1);
i++)
1764 if ((
const char *)&wire_orpc_extent->
data[0] >
end)
1773 msg->Buffer = wire_orpc_extent;
1781 ORPC_EXTENT_ARRAY *orpc_ext_array,
WIRE_ORPC_EXTENT **first_wire_orpc_extent)
1783 const char *
end = (
char *)
msg->Buffer +
msg->BufferLength;
1785 *first_wire_orpc_extent =
NULL;
1789 ERR(
"invalid buffer length\n");
1796 if ((
const char *)
msg->Buffer +
sizeof(
DWORD) >
end)
1800 orpcthis->extensions = orpc_ext_array;
1802 orpcthis->extensions =
NULL;
1804 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1806 if (orpcthis->extensions)
1809 first_wire_orpc_extent);
1814 if ((orpcthis->version.MajorVersion != COM_MAJOR_VERSION) ||
1815 (orpcthis->version.MinorVersion > COM_MINOR_VERSION))
1817 ERR(
"COM version {%d, %d} not supported\n",
1818 orpcthis->version.MajorVersion, orpcthis->version.MinorVersion);
1822 if (orpcthis->flags & ~(ORPCF_LOCAL|ORPCF_RESERVED1|ORPCF_RESERVED2|ORPCF_RESERVED3|ORPCF_RESERVED4))
1824 ERR(
"invalid flags %#lx\n", orpcthis->flags & ~(ORPCF_LOCAL|ORPCF_RESERVED1|ORPCF_RESERVED2|ORPCF_RESERVED3|ORPCF_RESERVED4));
1832 ORPC_EXTENT_ARRAY *orpc_ext_array,
WIRE_ORPC_EXTENT **first_wire_orpc_extent)
1834 const char *
end = (
char *)
msg->Buffer +
msg->BufferLength;
1836 *first_wire_orpc_extent =
NULL;
1840 ERR(
"invalid buffer length\n");
1847 if ((
const char *)
msg->Buffer +
sizeof(
DWORD) >
end)
1851 orpcthat->extensions = orpc_ext_array;
1853 orpcthat->extensions =
NULL;
1855 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1857 if (orpcthat->extensions)
1860 first_wire_orpc_extent);
1865 if (orpcthat->flags & ~(ORPCF_LOCAL|ORPCF_RESERVED1|ORPCF_RESERVED2|ORPCF_RESERVED3|ORPCF_RESERVED4))
1867 ERR(
"invalid flags %#lx\n", orpcthat->flags & ~(ORPCF_LOCAL|ORPCF_RESERVED1|ORPCF_RESERVED2|ORPCF_RESERVED3|ORPCF_RESERVED4));
1878 char *original_buffer =
msg->Buffer;
1880 ORPC_EXTENT_ARRAY orpc_ext_array;
1882 GUID old_causality_id;
1896 msg->Buffer = original_buffer;
1904 msg->Buffer = original_buffer;
1919 if (orpcthis.extensions && first_wire_orpc_extent &&
1920 orpcthis.extensions->size)
1939 calltype = CALLTYPE_NESTED;
1941 calltype = CALLTYPE_TOPLEVEL;
1943 calltype = CALLTYPE_TOPLEVEL_CALLPENDING;
1945 handlecall = IMessageFilter_HandleInComingCall(apt->filter,
1950 TRACE(
"IMessageFilter_HandleInComingCall returned %ld\n", handlecall);
1953 case SERVERCALL_REJECTED:
1955 goto exit_reset_state;
1956 case SERVERCALL_RETRYLATER:
1959 goto exit_reset_state;
1961 FIXME(
"retry call later not implemented\n");
1964 case SERVERCALL_ISHANDLED:
1984 free(original_buffer);
2039 TRACE(
"Calling apartment thread %#lx...\n", apt->
tid);
2046 IRpcChannelBuffer_Release(
params->chan);
2047 IRpcStubBuffer_Release(
params->stub);
2072 IRpcChannelBuffer_Release(
params->chan);
2074 IRpcStubBuffer_Release(
params->stub);
2106 TRACE(
"Creating new interface\n");
2108 rif =
calloc(1,
sizeof(*rif));
2130 ERR(
"RpcServerRegisterIfEx failed with error %ld\n",
status);
2169 oxid_info->dwTid = 0;
2170 oxid_info->dwPid = 0;
2175 oxid_info->ipidRemUnknown.Data1 = 0xffffffff;
2176 oxid_info->ipidRemUnknown.Data2 = 0xffff;
2177 oxid_info->ipidRemUnknown.Data3 = 0xffff;
2178 memcpy(oxid_info->ipidRemUnknown.Data4, &oxid,
sizeof(
OXID));
2179 oxid_info->psa =
NULL ;
COMPILER_DEPENDENT_UINT64 UINT64
HRESULT enter_apartment(struct tlsdata *data, DWORD model)
void leave_apartment(struct tlsdata *data)
void apartment_release(struct apartment *apt)
HWND apartment_getwindow(const struct apartment *apt)
OXID apartment_getoxid(const struct apartment *apt)
struct apartment * apartment_get_current_or_mta(void)
#define InterlockedIncrement
#define InterlockedExchange
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
#define UlongToHandle(ul)
#define RegCloseKey(hKey)
HRESULT ipid_get_dispatch_params(const IPID *ipid, struct apartment **stub_apt, struct stub_manager **manager, IRpcStubBuffer **stub, IRpcChannelBuffer **chan, IID *iid, IUnknown **iface)
ULONG stub_manager_int_release(struct stub_manager *stub_manager)
static struct apartment * com_get_current_apt(void)
HRESULT start_apartment_remote_unknown(struct apartment *apt)
static HRESULT com_get_tlsdata(struct tlsdata **data)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
HRESULT open_appidkey_from_clsid(REFCLSID clsid, REGSAM access, HKEY *subkey)
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
HRESULT open_key_for_clsid(REFCLSID clsid, const WCHAR *keyname, REGSAM access, HKEY *subkey)
HRESULT WINAPI CoGetCurrentLogicalThreadId(GUID *id)
HRESULT WINAPI CoWaitForMultipleHandles(DWORD flags, DWORD timeout, ULONG handle_count, HANDLE *handles, DWORD *index)
HRESULT WINAPI GetHGlobalFromStream(IStream *stream, HGLOBAL *phglobal)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
HRESULT WINAPI CoUnmarshalInterface(IStream *stream, REFIID riid, void **ppv)
static unsigned char * ChannelHooks_ClientFillBuffer(SChannelHookCallInfo *info, unsigned char *buffer, struct channel_hook_buffer_data *data, unsigned int hook_count)
static HRESULT unmarshal_ORPCTHAT(RPC_MESSAGE *msg, ORPCTHAT *orpcthat, ORPC_EXTENT_ARRAY *orpc_ext_array, WIRE_ORPC_EXTENT **first_wire_orpc_extent)
static RPC_BINDING_HANDLE get_irot_handle(void)
void rpc_execute_call(struct dispatch_params *params)
static HRESULT create_server(REFCLSID rclsid, HANDLE *process)
static DWORD start_local_service(const WCHAR *name, DWORD num, LPCWSTR *params)
static HRESULT create_local_service(REFCLSID rclsid)
static HRESULT unmarshal_ORPCTHIS(RPC_MESSAGE *msg, ORPCTHIS *orpcthis, ORPC_EXTENT_ARRAY *orpc_ext_array, WIRE_ORPC_EXTENT **first_wire_orpc_extent)
BOOL WINAPI DllDebugObjectRPCHook(BOOL trace, void *args)
HRESULT WINAPI InternalIrotEnumRunning(PInterfaceList *list)
HRESULT WINAPI InternalIrotGetObject(const MonikerComparisonData *moniker_data, PInterfaceData *obj, IrotCookie *cookie)
static HRESULT create_surrogate_server(REFCLSID rclsid, HANDLE *process)
static DWORD WINAPI rpc_sendreceive_thread(LPVOID param)
HRESULT rpc_revoke_local_server(unsigned int cookie)
static ULONG ChannelHooks_ClientGetSize(SChannelHookCallInfo *info, struct channel_hook_buffer_data **data, unsigned int *hook_count, ULONG *extension_count)
static ULONG ChannelHooks_ServerGetSize(SChannelHookCallInfo *info, struct channel_hook_buffer_data **data, unsigned int *hook_count, ULONG *extension_count)
static CRITICAL_SECTION csChannelHook
static void get_rpc_endpoint(LPWSTR endpoint, const OXID *oxid)
void rpc_unregister_interface(REFIID riid, BOOL wait)
static HRESULT WINAPI ServerRpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus)
static RPC_BINDING_HANDLE get_irpcss_handle(void)
HRESULT rpc_register_local_server(REFCLSID clsid, IStream *stream, DWORD flags, unsigned int *cookie)
HRESULT rpc_create_clientchannel(const OXID *oxid, const IPID *ipid, const OXID_INFO *oxid_info, const IID *iid, DWORD dest_context, void *dest_context_data, IRpcChannelBuffer **chan, struct apartment *apt)
static RPC_DISPATCH_FUNCTION rpc_dispatch_table[1]
static HRESULT WINAPI ServerRpcChannelBuffer_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD *dest_context, void **dest_context_data)
static RPC_DISPATCH_TABLE rpc_dispatch
static HANDLE ClientRpcChannelBuffer_GetEventHandle(ClientRpcChannelBuffer *This)
void rpc_start_remoting(struct apartment *apt)
static HRESULT WINAPI ClientRpcChannelBuffer_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD *pdwDestContext, void **ppvDestContext)
static HRESULT WINAPI RpcChannelBuffer_QueryInterface(IRpcChannelBuffer *iface, REFIID riid, LPVOID *ppv)
static CRITICAL_SECTION_DEBUG csRegIf_debug
void *__RPC_USER MIDL_user_allocate(SIZE_T size)
static void ClientRpcChannelBuffer_ReleaseEventHandle(ClientRpcChannelBuffer *This, HANDLE event)
static struct list channel_hooks
static HRESULT WINAPI RpcChannelBuffer_IsConnected(LPRPCCHANNELBUFFER iface)
static RPC_BINDING_HANDLE get_rpc_handle(unsigned short *protseq, unsigned short *endpoint)
static CRITICAL_SECTION csRegIf
static const IRpcChannelBufferVtbl ClientRpcChannelBufferVtbl
static ULONG WINAPI ClientRpcChannelBuffer_Release(LPRPCCHANNELBUFFER iface)
static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, REFIID riid)
static ULONG WINAPI ServerRpcChannelBuffer_Release(LPRPCCHANNELBUFFER iface)
static void ChannelHooks_ClientNotify(SChannelHookCallInfo *info, DWORD lDataRep, WIRE_ORPC_EXTENT *first_wire_orpc_extent, ULONG extension_count, HRESULT hrFault)
static void ChannelHooks_ServerNotify(SChannelHookCallInfo *info, DWORD lDataRep, WIRE_ORPC_EXTENT *first_wire_orpc_extent, ULONG extension_count)
static unsigned char * ChannelHooks_ServerFillBuffer(SChannelHookCallInfo *info, unsigned char *buffer, struct channel_hook_buffer_data *data, unsigned int hook_count)
static HRESULT WINAPI ServerRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, REFIID riid)
static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *eptr)
HRESULT WINAPI InternalIrotNoteChangeTime(IrotCookie cookie, const FILETIME *time)
static HRESULT ClientRpcChannelBuffer_IsCorrectApartment(ClientRpcChannelBuffer *This, const struct apartment *apt)
HRESULT WINAPI InternalIrotIsRunning(const MonikerComparisonData *moniker_data)
HRESULT WINAPI InternalIrotGetTimeOfLastChange(const MonikerComparisonData *moniker_data, FILETIME *time)
HRESULT rpc_register_channel_hook(REFGUID rguid, IChannelHook *hook)
static HRESULT WINAPI ClientRpcChannelBuffer_FreeBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg)
HRESULT rpcss_get_next_seqid(DWORD *id)
HRESULT WINAPI CoDecodeProxy(DWORD client_pid, UINT64 proxy_addr, ServerInformation *server_info)
static HRESULT WINAPI ServerRpcChannelBuffer_FreeBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg)
static const IRpcChannelBufferVtbl ServerRpcChannelBufferVtbl
static HRESULT unmarshal_ORPC_EXTENT_ARRAY(RPC_MESSAGE *msg, const char *end, ORPC_EXTENT_ARRAY *extensions, WIRE_ORPC_EXTENT **first_wire_orpc_extent)
HRESULT rpc_create_serverchannel(DWORD dest_context, void *dest_context_data, IRpcChannelBuffer **chan)
HRESULT rpc_resolve_oxid(OXID oxid, OXID_INFO *oxid_info)
static CRITICAL_SECTION_DEBUG csChannelHook_debug
static struct list registered_interfaces
HRESULT rpc_get_local_class_object(REFCLSID rclsid, REFIID riid, void **obj)
static BOOL start_rpcss(void)
HRESULT rpc_register_interface(REFIID riid)
void rpc_unregister_channel_hooks(void)
HRESULT WINAPI InternalIrotRegister(const MonikerComparisonData *moniker_data, const InterfaceData *object, const InterfaceData *moniker, const FILETIME *time, DWORD flags, IrotCookie *cookie, IrotContextHandle *ctxt_handle)
static ULONG WINAPI RpcChannelBuffer_AddRef(LPRPCCHANNELBUFFER iface)
static HRESULT WINAPI ClientRpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus)
void __RPC_USER MIDL_user_free(void *p)
static HRESULT rpcss_get_class_object(REFCLSID rclsid, PMInterfacePointer *objref)
static HRESULT rpcss_server_register(REFCLSID clsid, DWORD flags, MInterfacePointer *obj, unsigned int *cookie)
static WCHAR rpctransportW[]
static void __RPC_STUB dispatch_rpc(RPC_MESSAGE *msg)
HRESULT WINAPI InternalIrotRevoke(IrotCookie cookie, IrotContextHandle *ctxt_handle, PInterfaceData *object, PInterfaceData *moniker)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define GetCurrentProcess()
UINT WINAPI GetSystemWow64DirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
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)
BOOL WINAPI QueueUserWorkItem(IN LPTHREAD_START_ROUTINE Function, IN PVOID Context, IN ULONG Flags)
BOOL WINAPI Wow64RevertWow64FsRedirection(IN PVOID OldValue)
BOOL WINAPI Wow64DisableWow64FsRedirection(IN PVOID *OldValue)
ULONGLONG WINAPI DECLSPEC_HOTPATCH GetTickCount64(void)
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
#define InterlockedExchangePointer(Target, Value)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
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
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
#define InterlockedCompareExchangePointer
static ERESOURCE GlobalLock
HRESULT __cdecl IrotRevoke(IrotHandle h, IrotCookie cookie, IrotContextHandle *ctxt_handle, PInterfaceData *obj, PInterfaceData *mk)
HRESULT __cdecl IrotEnumRunning(IrotHandle h, PInterfaceList *list)
HRESULT __cdecl IrotGetObject(IrotHandle h, const MonikerComparisonData *moniker_data, PInterfaceData *obj, IrotCookie *cookie)
HRESULT __cdecl IrotRegister(IrotHandle h, const MonikerComparisonData *data, const InterfaceData *obj, const InterfaceData *mk, const FILETIME *time, DWORD grfFlags, IrotCookie *cookie, IrotContextHandle *ctxt_handle)
HRESULT __cdecl IrotIsRunning(IrotHandle h, const MonikerComparisonData *data)
HRESULT __cdecl IrotGetTimeOfLastChange(IrotHandle h, const MonikerComparisonData *moniker_data, FILETIME *time)
HRESULT __cdecl IrotNoteChangeTime(IrotHandle h, IrotCookie cookie, const FILETIME *last_modified_time)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define seekto(pos, errstr)
#define memcpy(s1, s2, n)
static PROCESS_INFORMATION pi
static RPC_BINDING_HANDLE binding
interface IRpcChannelBuffer * LPRPCCHANNELBUFFER
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
RPC_STATUS WINAPI RpcBindingFromStringBindingW(RPC_WSTR StringBinding, RPC_BINDING_HANDLE *Binding)
RPC_STATUS WINAPI RpcStringBindingComposeW(RPC_WSTR ObjUuid, RPC_WSTR Protseq, RPC_WSTR NetworkAddr, RPC_WSTR Endpoint, RPC_WSTR Options, RPC_WSTR *StringBinding)
RPC_STATUS WINAPI RpcBindingInqObject(RPC_BINDING_HANDLE Binding, UUID *ObjectUuid)
RPC_STATUS WINAPI RpcBindingFree(RPC_BINDING_HANDLE *Binding)
RPC_STATUS WINAPI RpcBindingSetObject(RPC_BINDING_HANDLE Binding, UUID *ObjectUuid)
RPC_STATUS WINAPI I_RpcGetBuffer(PRPC_MESSAGE pMsg)
RPC_STATUS WINAPI I_RpcSendReceive(PRPC_MESSAGE pMsg)
RPC_STATUS WINAPI I_RpcFreeBuffer(PRPC_MESSAGE pMsg)
RPC_STATUS WINAPI RpcServerRegisterIfEx(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv, UINT Flags, UINT MaxCalls, RPC_IF_CALLBACK_FN *IfCallbackFn)
RPC_STATUS WINAPI RpcServerUseProtseqEpW(RPC_WSTR Protseq, UINT MaxCalls, RPC_WSTR Endpoint, LPVOID SecurityDescriptor)
RPC_STATUS WINAPI RpcServerUnregisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, UINT WaitForCallsToComplete)
RPCRTAPI int RPC_ENTRY I_RpcExceptionFilter(ULONG)
#define RPC_C_LISTEN_MAX_CALLS_DEFAULT
#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT
unsigned short * RPC_WSTR
#define RPC_C_AUTHN_LEVEL_NONE
#define RPC_IF_AUTOLISTEN
void(__RPC_STUB * RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message)
struct _RPC_CLIENT_INTERFACE RPC_CLIENT_INTERFACE
struct _RPC_SERVER_INTERFACE RPC_SERVER_INTERFACE
RPC_STATUS WINAPI RpcStringFreeW(RPC_WSTR *String)
void DECLSPEC_NORETURN WINAPI RpcRaiseException(RPC_STATUS exception)
HRESULT __cdecl irpcss_get_thread_seq_id(handle_t h, DWORD *id)
HRESULT __cdecl irpcss_get_class_object(handle_t h, const GUID *clsid, PMInterfacePointer *object)
HRESULT __cdecl irpcss_server_register(handle_t h, const GUID *clsid, unsigned int flags, PMInterfacePointer object, unsigned int *cookie)
HRESULT __cdecl irpcss_server_revoke(handle_t h, unsigned int cookie)
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
BOOL WINAPI StartServiceW(SC_HANDLE hService, DWORD dwNumServiceArgs, LPCWSTR *lpServiceArgVectors)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
IRpcChannelBuffer IRpcChannelBuffer_iface
PEXCEPTION_RECORD ExceptionRecord
RPC_SYNTAX_IDENTIFIER InterfaceId
RPC_SYNTAX_IDENTIFIER InterfaceId
PRPC_DISPATCH_TABLE DispatchTable
RPC_VERSION SyntaxVersion
unsigned short MajorVersion
unsigned short MinorVersion
LIST_ENTRY ProcessLocksList
SChannelHookCallInfo channel_hook_info
struct dispatch_params params
RPC_BINDING_HANDLE binding_handle
LONG pending_call_count_client
LONG pending_call_count_server
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define FIELD_OFFSET(t, f)
DWORD WINAPI GetLastError(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
DWORD WINAPI GetCurrentProcessId(void)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define REGDB_E_CLASSNOTREG
#define RPC_E_INVALID_HEADER
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define ERROR_SERVICE_ALREADY_RUNNING
#define RPC_S_INVALID_BOUND
#define RPC_E_WRONG_THREAD
#define RPC_E_CANTCALLOUT_ININPUTSYNCCALL
#define ERROR_FUNCTION_FAILED
#define RPC_E_VERSION_MISMATCH
#define RPC_E_CALL_REJECTED
#define WT_EXECUTEDEFAULT
#define SERVICE_QUERY_STATUS
#define SC_MANAGER_CONNECT
#define SERVICE_START_PENDING
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
BOOL WINAPI InSendMessage(void)