27 #define NONAMELESSUNION 59 0, 0, { (
DWORD_PTR)(__FILE__
": dcom registered server interfaces") }
69 0, 0, { (
DWORD_PTR)(__FILE__
": channel hooks") }
87 static const WCHAR wszEndpointFormat[] = {
'\\',
'p',
'i',
'p',
'e',
'\\',
'O',
'L',
'E',
'_',
'%',
'0',
'8',
'l',
'x',
'%',
'0',
'8',
'l',
'x',0};
158 unsigned char extensions[1];
164 unsigned char extensions[1];
182 ORPC_EXTENT_ARRAY *orpc_ext_array,
WIRE_ORPC_EXTENT **first_wire_orpc_extent);
188 ULONG *extension_count)
191 ULONG total_size = 0;
192 unsigned int hook_index = 0;
195 *extension_count = 0;
209 ULONG extension_size = 0;
211 IChannelHook_ClientGetSize(
entry->hook, &
entry->id, &
info->iid, &extension_size);
215 extension_size = (extension_size+7)&~7;
216 (*data)[hook_index].id =
entry->id;
217 (*data)[hook_index].extension_size = extension_size;
223 (*extension_count)++;
236 unsigned int hook_count)
245 ULONG extension_size = 0;
248 for (
i = 0;
i < hook_count;
i++)
250 extension_size =
data[
i].extension_size;
256 IChannelHook_ClientFillBuffer(
entry->hook, &
entry->id, &
info->iid,
263 wire_orpc_extent->
conformance = (extension_size+7)&~7;
264 wire_orpc_extent->
size = extension_size;
265 wire_orpc_extent->
id =
entry->id;
276 ULONG extension_count)
286 for (
i = 0, wire_orpc_extent = first_wire_orpc_extent;
293 if (
i == extension_count) wire_orpc_extent =
NULL;
296 wire_orpc_extent ? wire_orpc_extent->size : 0,
297 wire_orpc_extent ? wire_orpc_extent->data :
NULL,
306 ULONG *extension_count)
309 ULONG total_size = 0;
310 unsigned int hook_index = 0;
313 *extension_count = 0;
327 ULONG extension_size = 0;
334 extension_size = (extension_size+7)&~7;
335 (*data)[hook_index].id =
entry->id;
336 (*data)[hook_index].extension_size = extension_size;
342 (*extension_count)++;
355 unsigned int hook_count)
364 ULONG extension_size = 0;
367 for (
i = 0;
i < hook_count;
i++)
369 extension_size =
data[
i].extension_size;
375 IChannelHook_ServerFillBuffer(
entry->hook, &
entry->id, &
info->iid,
383 wire_orpc_extent->
conformance = (extension_size+7)&~7;
384 wire_orpc_extent->
size = extension_size;
385 wire_orpc_extent->
id =
entry->id;
406 for (
i = 0, wire_orpc_extent = first_wire_orpc_extent;
413 if (
i == extension_count) wire_orpc_extent =
NULL;
416 wire_orpc_extent ? wire_orpc_extent->size : 0,
417 wire_orpc_extent ? wire_orpc_extent->data :
NULL,
436 IChannelHook_AddRef(
hook);
466 IRpcChannelBuffer_AddRef(iface);
513 ULONG extensions_size;
515 unsigned int channel_hook_count;
516 ULONG extension_count;
526 &channel_hook_data, &channel_hook_count, &extension_count);
532 if (extension_count & 1)
550 orpcthat =
msg->Buffer;
553 orpcthat->flags = ORPCF_NULL ;
556 *(
DWORD *)
msg->Buffer = extensions_size ? 1 : 0;
562 orpc_extent_array->
size = extension_count;
569 *(
DWORD *)
msg->Buffer = (extension_count + 1) & ~1;
573 msg->Buffer, channel_hook_data, channel_hook_count);
577 if (extension_count & 1)
582 wire_orpc_extent->
size = 0;
627 ULONG extensions_size;
629 unsigned int channel_hook_count;
630 ULONG extension_count;
655 msg->RpcInterfaceInformation = cif;
671 &channel_hook_data, &channel_hook_count, &extension_count);
677 if (extension_count & 1)
730 orpcthis =
msg->Buffer;
733 orpcthis->version.MajorVersion = COM_MAJOR_VERSION;
734 orpcthis->version.MinorVersion = COM_MINOR_VERSION;
736 orpcthis->reserved1 = 0;
740 *(
DWORD *)
msg->Buffer = extensions_size ? 1 : 0;
745 ORPC_EXTENT_ARRAY *orpc_extent_array =
msg->Buffer;
746 orpc_extent_array->size = extension_count;
747 orpc_extent_array->reserved = 0;
753 *(
DWORD *)
msg->Buffer = (extension_count + 1) & ~1;
757 msg->Buffer, channel_hook_data, channel_hook_count);
761 if (extension_count & 1)
766 wire_orpc_extent->
size = 0;
799 TRACE(
"completed with status 0x%x\n",
data->status);
813 if (
This->oxid != oxid)
827 ORPC_EXTENT_ARRAY orpc_ext_array;
832 TRACE(
"(%p) iMethod=%d\n", olemsg, olemsg->iMethod);
837 ERR(
"called from wrong apartment, should have been 0x%s\n",
851 ERR(
"can't make an outgoing COM call in response to a sent message\n");
921 orpcthat.flags = ORPCF_NULL;
922 orpcthat.extensions =
NULL;
928 TRACE(
"hrFault = 0x%08x\n", hrFault);
937 char *original_buffer =
msg->Buffer;
954 msg->DataRepresentation,
955 first_wire_orpc_extent,
956 orpcthat.extensions && first_wire_orpc_extent ? orpcthat.extensions->
size : 0,
963 if (pstatus) *pstatus =
status;
1027 msg->RpcInterfaceInformation =
NULL;
1044 TRACE(
"(%p,%p)\n", pdwDestContext, ppvDestContext);
1046 *pdwDestContext =
This->super.dest_context;
1047 *ppvDestContext =
This->super.dest_context_data;
1056 TRACE(
"(%p,%p)\n", dest_context, dest_context_data);
1058 *dest_context =
This->dest_context;
1059 *dest_context_data =
This->dest_context_data;
1096 const OXID_INFO *oxid_info,
const IID *iid,
1097 DWORD dest_context,
void *dest_context_data,
1148 This->super.refs = 1;
1149 This->super.dest_context = dest_context;
1150 This->super.dest_context_data = dest_context_data;
1153 This->server_pid = oxid_info->dwPid;
1157 *chan = &
This->super.IRpcChannelBuffer_iface;
1170 This->dest_context = dest_context;
1171 This->dest_context_data = dest_context_data;
1173 *chan = &
This->IRpcChannelBuffer_iface;
1181 ORPC_EXTENT_ARRAY *extensions,
1190 if ((
const char *)
msg->Buffer + 2 *
sizeof(
DWORD) >
end)
1193 pointer_id = *(
DWORD *)
msg->Buffer;
1194 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1195 extensions->extent =
NULL;
1202 if (*(
DWORD *)
msg->Buffer != ((extensions->size+1)&~1))
1205 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1208 if (extensions->size > 256)
1210 ERR(
"too many extensions: %d\n", extensions->size);
1214 *first_wire_orpc_extent = wire_orpc_extent =
msg->Buffer;
1215 for (
i = 0;
i < ((extensions->size+1)&~1);
i++)
1217 if ((
const char *)&wire_orpc_extent->
data[0] >
end)
1226 msg->Buffer = wire_orpc_extent;
1234 ORPC_EXTENT_ARRAY *orpc_ext_array,
WIRE_ORPC_EXTENT **first_wire_orpc_extent)
1236 const char *
end = (
char *)
msg->Buffer +
msg->BufferLength;
1238 *first_wire_orpc_extent =
NULL;
1242 ERR(
"invalid buffer length\n");
1249 if ((
const char *)
msg->Buffer +
sizeof(
DWORD) >
end)
1253 orpcthis->extensions = orpc_ext_array;
1255 orpcthis->extensions =
NULL;
1257 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1259 if (orpcthis->extensions)
1262 first_wire_orpc_extent);
1267 if ((orpcthis->version.MajorVersion != COM_MAJOR_VERSION) ||
1268 (orpcthis->version.MinorVersion > COM_MINOR_VERSION))
1270 ERR(
"COM version {%d, %d} not supported\n",
1271 orpcthis->version.MajorVersion, orpcthis->version.MinorVersion);
1275 if (orpcthis->flags & ~(ORPCF_LOCAL|ORPCF_RESERVED1|ORPCF_RESERVED2|ORPCF_RESERVED3|ORPCF_RESERVED4))
1277 ERR(
"invalid flags 0x%x\n", orpcthis->flags & ~(ORPCF_LOCAL|ORPCF_RESERVED1|ORPCF_RESERVED2|ORPCF_RESERVED3|ORPCF_RESERVED4));
1285 ORPC_EXTENT_ARRAY *orpc_ext_array,
WIRE_ORPC_EXTENT **first_wire_orpc_extent)
1287 const char *
end = (
char *)
msg->Buffer +
msg->BufferLength;
1289 *first_wire_orpc_extent =
NULL;
1293 ERR(
"invalid buffer length\n");
1300 if ((
const char *)
msg->Buffer +
sizeof(
DWORD) >
end)
1304 orpcthat->extensions = orpc_ext_array;
1306 orpcthat->extensions =
NULL;
1308 msg->Buffer = (
char *)
msg->Buffer +
sizeof(
DWORD);
1310 if (orpcthat->extensions)
1313 first_wire_orpc_extent);
1318 if (orpcthat->flags & ~(ORPCF_LOCAL|ORPCF_RESERVED1|ORPCF_RESERVED2|ORPCF_RESERVED3|ORPCF_RESERVED4))
1320 ERR(
"invalid flags 0x%x\n", orpcthat->flags & ~(ORPCF_LOCAL|ORPCF_RESERVED1|ORPCF_RESERVED2|ORPCF_RESERVED3|ORPCF_RESERVED4));
1331 char *original_buffer =
msg->Buffer;
1333 ORPC_EXTENT_ARRAY orpc_ext_array;
1335 GUID old_causality_id;
1342 msg->Buffer = original_buffer;
1350 msg->Buffer = original_buffer;
1365 if (orpcthis.extensions && first_wire_orpc_extent &&
1366 orpcthis.extensions->size)
1385 calltype = CALLTYPE_NESTED;
1387 calltype = CALLTYPE_TOPLEVEL;
1389 calltype = CALLTYPE_TOPLEVEL_CALLPENDING;
1396 TRACE(
"IMessageFilter_HandleInComingCall returned %d\n", handlecall);
1399 case SERVERCALL_REJECTED:
1401 goto exit_reset_state;
1402 case SERVERCALL_RETRYLATER:
1405 goto exit_reset_state;
1407 FIXME(
"retry call later not implemented\n");
1410 case SERVERCALL_ISHANDLED:
1485 TRACE(
"Calling apartment thread 0x%08x...\n",
apt->
tid);
1492 IRpcChannelBuffer_Release(
params->chan);
1493 IRpcStubBuffer_Release(
params->stub);
1516 IRpcChannelBuffer_Release(
params->chan);
1518 IRpcStubBuffer_Release(
params->stub);
1550 TRACE(
"Creating new interface\n");
1574 ERR(
"RpcServerRegisterIfEx failed with error %d\n",
status);
1613 oxid_info->dwTid = 0;
1614 oxid_info->dwPid = 0;
1619 oxid_info->ipidRemUnknown.Data1 = 0xffffffff;
1620 oxid_info->ipidRemUnknown.Data2 = 0xffff;
1621 oxid_info->ipidRemUnknown.Data3 = 0xffff;
1622 memcpy(oxid_info->ipidRemUnknown.Data4, &oxid,
sizeof(
OXID));
1623 oxid_info->psa =
NULL ;
1655 static const WCHAR wszLocalServer32[] = {
'L',
'o',
'c',
'a',
'l',
'S',
'e',
'r',
'v',
'e',
'r',
'3',
'2',0 };
1656 static const WCHAR embedding[] = {
' ',
'-',
'E',
'm',
'b',
'e',
'd',
'd',
'i',
'n',
'g',0 };
1674 WARN(
"No default value for LocalServer32 key\n");
1745 static const WCHAR szLocalService[] = {
'L',
'o',
'c',
'a',
'l',
'S',
'e',
'r',
'v',
'i',
'c',
'e',0 };
1746 static const WCHAR szServiceParams[] = {
'S',
'e',
'r',
'v',
'i',
'c',
'e',
'P',
'a',
'r',
'a',
'm',
's',0};
1787 WARN(
"No LocalService value\n");
1798 static const WCHAR wszPipeRef[] = {
'\\',
'\\',
'.',
'\\',
'p',
'i',
'p',
'e',
'\\',0};
1810 char marshalbuffer[200];
1817 static const int MAXTRIES = 30;
1823 while (tries++ < MAXTRIES) {
1861 TRACE(
"read marshal id from pipe\n");
1866 if (tries >= MAXTRIES)
1874 hres = IStream_Seek(pStm,
seekto,STREAM_SEEK_SET,&newpos);
1876 TRACE(
"unmarshalling local server\n");
1882 IStream_Release(pStm);
1912 HANDLE pipe_event, hPipe = lsp->
pipe, new_pipe;
1917 memset(&ovl, 0,
sizeof(ovl));
1941 TRACE(
"marshalling LocalServer to client\n");
1943 hres = IStream_Stat(pStm,&ststg,STATFLAG_NONAME);
1949 hres = IStream_Seek(pStm,
seekto,STREAM_SEEK_SET,&newpos);
1951 FIXME(
"IStream_Seek failed, %x\n",
hres);
1955 buflen = ststg.cbSize.u.LowPart;
1971 TRACE(
"done marshalling LocalServer\n");
1975 TRACE(
"single use object, shutting down pipe %s\n",
debugstr_w(pipefn));
1980 4096, 4096, 500 ,
NULL );
2020 4096, 4096, 500 ,
NULL);
2039 *registration = lsp;
2053 IStream_Release(lsp->
stream);
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
RPC_STATUS WINAPI RpcBindingFromStringBindingW(RPC_WSTR StringBinding, RPC_BINDING_HANDLE *Binding)
static HANDLE ClientRpcChannelBuffer_GetEventHandle(ClientRpcChannelBuffer *This)
void RPC_StopLocalServer(void *registration)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
HRESULT WINAPI CoUnmarshalInterface(IStream *pStream, REFIID riid, LPVOID *ppv)
#define PIPE_UNLIMITED_INSTANCES
void RPC_UnregisterAllChannelHooks(void)
RPC_STATUS WINAPI RpcBindingFree(RPC_BINDING_HANDLE *Binding)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
#define HRESULT_FROM_WIN32(x)
PRPC_DISPATCH_TABLE DispatchTable
static void ChannelHooks_ClientNotify(SChannelHookCallInfo *info, DWORD lDataRep, WIRE_ORPC_EXTENT *first_wire_orpc_extent, ULONG extension_count, HRESULT hrFault)
#define RPC_S_INVALID_BOUND
static struct object_header ** handles
static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, REFIID riid)
#define SC_MANAGER_CONNECT
static HRESULT apartment_getoxid(const struct apartment *apt, OXID *oxid)
unsigned short MajorVersion
RPC_STATUS WINAPI RpcStringFreeW(RPC_WSTR *String)
static HRESULT WINAPI ClientRpcChannelBuffer_FreeBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg)
static ULONG ChannelHooks_ClientGetSize(SChannelHookCallInfo *info, struct channel_hook_buffer_data **data, unsigned int *hook_count, ULONG *extension_count)
struct dispatch_params params
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
GLdouble GLdouble GLdouble r
static void ChannelHooks_ServerNotify(SChannelHookCallInfo *info, DWORD lDataRep, WIRE_ORPC_EXTENT *first_wire_orpc_extent, ULONG extension_count)
DWORD apartment_release(struct apartment *apt)
static unsigned char * ChannelHooks_ServerFillBuffer(SChannelHookCallInfo *info, unsigned char *buffer, struct channel_hook_buffer_data *data, unsigned int hook_count)
static HRESULT WINAPI ServerRpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus)
void(__RPC_STUB * RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message)
RPC_BINDING_HANDLE binding_handle
void DECLSPEC_NORETURN WINAPI RpcRaiseException(RPC_STATUS exception)
ULONG stub_manager_int_release(struct stub_manager *This) DECLSPEC_HIDDEN
BOOL WINAPI WaitNamedPipeW(LPCWSTR lpNamedPipeName, DWORD nTimeOut)
static void ClientRpcChannelBuffer_ReleaseEventHandle(ClientRpcChannelBuffer *This, HANDLE event)
static HRESULT WINAPI ClientRpcChannelBuffer_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD *pdwDestContext, void **ppvDestContext)
#define RPC_E_WRONG_THREAD
SChannelHookCallInfo channel_hook_info
DWORD WINAPI GetTickCount(VOID)
static CRITICAL_SECTION csChannelHook
void RPC_UnregisterInterface(REFIID riid, BOOL wait)
BOOL WINAPI InSendMessage(void)
#define INVALID_HANDLE_VALUE
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
static HRESULT WINAPI ServerRpcChannelBuffer_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD *dest_context, void **dest_context_data)
#define RPC_E_CANTCALLOUT_ININPUTSYNCCALL
static CRITICAL_SECTION_DEBUG csRegIf_debug
RPC_STATUS WINAPI I_RpcGetBuffer(PRPC_MESSAGE pMsg)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
#define RPC_E_INVALID_HEADER
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static struct list channel_hooks
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
#define RPC_IF_AUTOLISTEN
static struct oletls * COM_CurrentInfo(void)
RPC_STATUS WINAPI RpcServerUnregisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, UINT WaitForCallsToComplete)
static DWORD WINAPI rpc_sendreceive_thread(LPVOID param)
static ULONG WINAPI ClientRpcChannelBuffer_Release(LPRPCCHANNELBUFFER iface)
RPC_STATUS WINAPI RpcStringBindingComposeW(RPC_WSTR ObjUuid, RPC_WSTR Protseq, RPC_WSTR NetworkAddr, RPC_WSTR Endpoint, RPC_WSTR Options, RPC_WSTR *StringBinding)
static HRESULT create_server(REFCLSID rclsid, HANDLE *process)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
static CRITICAL_SECTION csRegIf
static APARTMENT * COM_CurrentApt(void)
static HRESULT ClientRpcChannelBuffer_IsCorrectApartment(ClientRpcChannelBuffer *This, APARTMENT *apt)
static DWORD start_local_service(LPCWSTR name, DWORD num, LPCWSTR *params)
IRpcChannelBuffer IRpcChannelBuffer_iface
static ULONG WINAPI RpcChannelBuffer_AddRef(LPRPCCHANNELBUFFER iface)
RPC_STATUS WINAPI RpcServerRegisterIfEx(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv, UINT Flags, UINT MaxCalls, RPC_IF_CALLBACK_FN *IfCallbackFn)
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
GLenum GLuint GLenum GLsizei const GLchar * buf
HRESULT RPC_StartLocalServer(REFCLSID clsid, IStream *stream, BOOL multi_use, void **registration)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
RPC_SYNTAX_IDENTIFIER InterfaceId
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
RPC_STATUS WINAPI I_RpcSendReceive(PRPC_MESSAGE pMsg)
static unsigned char * ChannelHooks_ClientFillBuffer(SChannelHookCallInfo *info, unsigned char *buffer, struct channel_hook_buffer_data *data, unsigned int hook_count)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
#define ERROR_FUNCTION_FAILED
static void get_rpc_endpoint(LPWSTR endpoint, const OXID *oxid)
static unsigned char bytes[4]
GLenum const GLfloat * params
static LPSTR local_server
#define NMPWAIT_WAIT_FOREVER
#define InterlockedCompareExchangePointer
static RPC_DISPATCH_FUNCTION rpc_dispatch_table[1]
static GUID COM_CurrentCausalityId(void)
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
#define RPC_C_LISTEN_MAX_CALLS_DEFAULT
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
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)
RPC_VERSION SyntaxVersion
RPC_STATUS WINAPI I_RpcFreeBuffer(PRPC_MESSAGE pMsg)
struct _RPC_CLIENT_INTERFACE RPC_CLIENT_INTERFACE
HRESULT COM_OpenKeyForCLSID(REFCLSID clsid, LPCWSTR keyname, REGSAM access, HKEY *subkey)
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)
void leave_apartment(struct oletls *info)
static HRESULT WINAPI RpcChannelBuffer_IsConnected(LPRPCCHANNELBUFFER iface)
static RPC_DISPATCH_TABLE rpc_dispatch
HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, LPHANDLE pHandles, LPDWORD lpdwindex)
HRESULT RPC_CreateServerChannel(DWORD dest_context, void *dest_context_data, IRpcChannelBuffer **chan)
static ULONG ChannelHooks_ServerGetSize(SChannelHookCallInfo *info, struct channel_hook_buffer_data **data, unsigned int *hook_count, ULONG *extension_count)
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
BOOL WINAPI StartServiceW(SC_HANDLE hService, DWORD dwNumServiceArgs, LPCWSTR *lpServiceArgVectors)
#define InterlockedExchangePointer(Target, Value)
BOOL WINAPI FlushFileBuffers(IN HANDLE hFile)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define UlongToHandle(ul)
#define PIPE_ACCESS_DUPLEX
HRESULT RPC_RegisterChannelHook(REFGUID rguid, IChannelHook *hook)
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
HRESULT RPC_GetLocalClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
static HRESULT unmarshal_ORPC_EXTENT_ARRAY(RPC_MESSAGE *msg, const char *end, ORPC_EXTENT_ARRAY *extensions, WIRE_ORPC_EXTENT **first_wire_orpc_extent)
struct _RPC_SERVER_INTERFACE RPC_SERVER_INTERFACE
HWND apartment_getwindow(const struct apartment *apt)
HRESULT start_apartment_remote_unknown(APARTMENT *apt) DECLSPEC_HIDDEN
HRESULT COM_OpenKeyForAppIdFromCLSID(REFCLSID clsid, REGSAM access, HKEY *subkey)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
void RPC_ExecuteCall(struct dispatch_params *params)
BOOL WINAPI QueueUserWorkItem(IN LPTHREAD_START_ROUTINE Function, IN PVOID Context, IN ULONG Flags)
#define seekto(pos, errstr)
#define InterlockedDecrement
#define ERROR_PIPE_CONNECTED
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
HRESULT enter_apartment(struct oletls *info, DWORD model)
unsigned short MinorVersion
BOOL WINAPI DisconnectNamedPipe(HANDLE hNamedPipe)
APARTMENT * apartment_get_current_or_mta(void)
static void __RPC_STUB dispatch_rpc(RPC_MESSAGE *msg)
#define memcpy(s1, s2, n)
static struct list registered_interfaces
static DWORD WINAPI local_server_thread(LPVOID param)
RPC_STATUS WINAPI RpcBindingInqObject(RPC_BINDING_HANDLE Binding, UUID *ObjectUuid)
LIST_ENTRY ProcessLocksList
#define RPC_E_CALL_REJECTED
RPC_STATUS WINAPI RpcBindingSetObject(RPC_BINDING_HANDLE Binding, UUID *ObjectUuid)
#define InterlockedExchange
static HRESULT WINAPI ServerRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, REFIID riid)
static HRESULT unmarshal_ORPCTHAT(RPC_MESSAGE *msg, ORPCTHAT *orpcthat, ORPC_EXTENT_ARRAY *orpc_ext_array, WIRE_ORPC_EXTENT **first_wire_orpc_extent)
RPC_STATUS WINAPI RpcServerUseProtseqEpW(RPC_WSTR Protseq, UINT MaxCalls, RPC_WSTR Endpoint, LPVOID SecurityDescriptor)
HRESULT ipid_get_dispatch_params(const IPID *ipid, APARTMENT **stub_apt, struct stub_manager **manager, IRpcStubBuffer **stub, IRpcChannelBuffer **chan, IID *iid, IUnknown **iface) DECLSPEC_HIDDEN
static HRESULT create_local_service(REFCLSID rclsid)
#define REGDB_E_CLASSNOTREG
WINE_DEFAULT_DEBUG_CHANNEL(ole)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
#define InterlockedIncrement
static HRESULT unmarshal_ORPCTHIS(RPC_MESSAGE *msg, ORPCTHIS *orpcthis, ORPC_EXTENT_ARRAY *orpc_ext_array, WIRE_ORPC_EXTENT **first_wire_orpc_extent)
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
static const IRpcChannelBufferVtbl ClientRpcChannelBufferVtbl
HRESULT RPC_RegisterInterface(REFIID riid)
#define FIELD_OFFSET(t, f)
#define ReadFile(a, b, c, d, e)
#define RPC_FLAGS_VALID_BIT
#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
static const IRpcChannelBufferVtbl ServerRpcChannelBufferVtbl
#define RPC_E_VERSION_MISMATCH
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static HRESULT WINAPI ClientRpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus)
HRESULT RPC_ResolveOxid(OXID oxid, OXID_INFO *oxid_info)
static HRESULT WINAPI ServerRpcChannelBuffer_FreeBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
static CRITICAL_SECTION_DEBUG csChannelHook_debug
interface IRpcChannelBuffer * LPRPCCHANNELBUFFER
static HRESULT WINAPI RpcChannelBuffer_QueryInterface(IRpcChannelBuffer *iface, REFIID riid, LPVOID *ppv)
HRESULT RPC_CreateClientChannel(const OXID *oxid, const IPID *ipid, const OXID_INFO *oxid_info, const IID *iid, DWORD dest_context, void *dest_context_data, IRpcChannelBuffer **chan, APARTMENT *apt)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
GLuint GLuint GLsizei GLenum type
static ULONG WINAPI ServerRpcChannelBuffer_Release(LPRPCCHANNELBUFFER iface)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void RPC_StartRemoting(struct apartment *apt)
HANDLE WINAPI CreateNamedPipeW(LPCWSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
#define FILE_FLAG_OVERLAPPED
#define ERROR_SERVICE_ALREADY_RUNNING
RPC_SYNTAX_IDENTIFIER InterfaceId
static SERVICE_STATUS status
BOOL WINAPI ConnectNamedPipe(IN HANDLE hNamedPipe, IN LPOVERLAPPED lpOverlapped)
#define RPC_C_AUTHN_LEVEL_NONE
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
#define HeapFree(x, y, z)
#define RegCloseKey(hKey)
#define IsEqualIID(riid1, riid2)
#define WT_EXECUTEDEFAULT
DWORD WINAPI GetCurrentProcessId(VOID)
static WCHAR wszRpcTransport[]
static void get_localserver_pipe_name(WCHAR *pipefn, REFCLSID rclsid)