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");
874 msg->ProcNum &= ~RPC_FLAGS_VALID_BIT;
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);
static unsigned char bytes[4]
#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)
static APARTMENT * COM_CurrentApt(void)
ULONG stub_manager_int_release(struct stub_manager *This) DECLSPEC_HIDDEN
static struct oletls * COM_CurrentInfo(void)
HRESULT start_apartment_remote_unknown(APARTMENT *apt) DECLSPEC_HIDDEN
static GUID COM_CurrentCausalityId(void)
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 apartment_getoxid(const struct apartment *apt, OXID *oxid)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define HeapFree(x, y, z)
BOOL WINAPI FlushFileBuffers(IN HANDLE hFile)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
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)
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)
DWORD WINAPI GetTickCount(VOID)
HRESULT COM_OpenKeyForCLSID(REFCLSID clsid, LPCWSTR keyname, REGSAM access, HKEY *subkey)
DWORD apartment_release(struct apartment *apt)
HRESULT COM_OpenKeyForAppIdFromCLSID(REFCLSID clsid, REGSAM access, HKEY *subkey)
HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, LPHANDLE pHandles, LPDWORD lpdwindex)
void leave_apartment(struct oletls *info)
HRESULT enter_apartment(struct oletls *info, DWORD model)
APARTMENT * apartment_get_current_or_mta(void)
HWND apartment_getwindow(const struct apartment *apt)
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
HRESULT WINAPI CoUnmarshalInterface(IStream *pStream, REFIID riid, LPVOID *ppv)
static unsigned char * ChannelHooks_ClientFillBuffer(SChannelHookCallInfo *info, unsigned char *buffer, struct channel_hook_buffer_data *data, unsigned int hook_count)
static void get_localserver_pipe_name(WCHAR *pipefn, REFCLSID rclsid)
static HRESULT unmarshal_ORPCTHAT(RPC_MESSAGE *msg, ORPCTHAT *orpcthat, ORPC_EXTENT_ARRAY *orpc_ext_array, WIRE_ORPC_EXTENT **first_wire_orpc_extent)
static DWORD WINAPI local_server_thread(LPVOID param)
static HRESULT create_server(REFCLSID rclsid, HANDLE *process)
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)
void RPC_StopLocalServer(void *registration)
static DWORD WINAPI rpc_sendreceive_thread(LPVOID param)
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)
static HRESULT WINAPI ServerRpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus)
void RPC_UnregisterInterface(REFIID riid, BOOL wait)
static RPC_DISPATCH_FUNCTION rpc_dispatch_table[1]
HRESULT RPC_RegisterChannelHook(REFGUID rguid, IChannelHook *hook)
static HRESULT WINAPI ServerRpcChannelBuffer_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD *dest_context, void **dest_context_data)
static HRESULT ClientRpcChannelBuffer_IsCorrectApartment(ClientRpcChannelBuffer *This, APARTMENT *apt)
static RPC_DISPATCH_TABLE rpc_dispatch
void RPC_StartRemoting(struct apartment *apt)
static HANDLE ClientRpcChannelBuffer_GetEventHandle(ClientRpcChannelBuffer *This)
void RPC_UnregisterAllChannelHooks(void)
HRESULT RPC_RegisterInterface(REFIID riid)
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
HRESULT RPC_StartLocalServer(REFCLSID clsid, IStream *stream, BOOL multi_use, void **registration)
static void ClientRpcChannelBuffer_ReleaseEventHandle(ClientRpcChannelBuffer *This, HANDLE event)
static struct list channel_hooks
static HRESULT WINAPI RpcChannelBuffer_IsConnected(LPRPCCHANNELBUFFER iface)
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)
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)
HRESULT RPC_ResolveOxid(OXID oxid, OXID_INFO *oxid_info)
HRESULT RPC_GetLocalClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
static HRESULT WINAPI ClientRpcChannelBuffer_FreeBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg)
void RPC_ExecuteCall(struct dispatch_params *params)
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)
static CRITICAL_SECTION_DEBUG csChannelHook_debug
static struct list registered_interfaces
static ULONG WINAPI RpcChannelBuffer_AddRef(LPRPCCHANNELBUFFER iface)
static HRESULT WINAPI ClientRpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus)
HRESULT RPC_CreateServerChannel(DWORD dest_context, void *dest_context_data, IRpcChannelBuffer **chan)
static WCHAR wszRpcTransport[]
static void __RPC_STUB dispatch_rpc(RPC_MESSAGE *msg)
static DWORD start_local_service(LPCWSTR name, DWORD num, LPCWSTR *params)
#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
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
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
#define InterlockedCompareExchangePointer
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define seekto(pos, errstr)
#define memcpy(s1, s2, n)
#define FILE_FLAG_OVERLAPPED
BOOL WINAPI ConnectNamedPipe(IN HANDLE hNamedPipe, IN LPOVERLAPPED lpOverlapped)
BOOL WINAPI DisconnectNamedPipe(HANDLE hNamedPipe)
HANDLE WINAPI CreateNamedPipeW(LPCWSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI WaitNamedPipeW(LPCWSTR lpNamedPipeName, DWORD nTimeOut)
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)
#define RPC_C_LISTEN_MAX_CALLS_DEFAULT
#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT
#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)
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
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
LIST_ENTRY ProcessLocksList
RPC_SYNTAX_IDENTIFIER InterfaceId
RPC_SYNTAX_IDENTIFIER InterfaceId
PRPC_DISPATCH_TABLE DispatchTable
RPC_VERSION SyntaxVersion
unsigned short MajorVersion
unsigned short MinorVersion
SChannelHookCallInfo channel_hook_info
struct dispatch_params params
RPC_BINDING_HANDLE binding_handle
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
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)
static EFI_HANDLE * handles
DWORD WINAPI GetLastError(void)
#define NMPWAIT_WAIT_FOREVER
#define PIPE_ACCESS_DUPLEX
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
DWORD WINAPI GetCurrentProcessId(void)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define PIPE_UNLIMITED_INSTANCES
#define REGDB_E_CLASSNOTREG
#define RPC_E_INVALID_HEADER
#define ERROR_SERVICE_ALREADY_RUNNING
#define RPC_S_INVALID_BOUND
#define RPC_E_WRONG_THREAD
#define RPC_E_CANTCALLOUT_ININPUTSYNCCALL
#define HRESULT_FROM_WIN32(x)
#define ERROR_FUNCTION_FAILED
#define RPC_E_VERSION_MISMATCH
#define RPC_E_CALL_REJECTED
#define ERROR_PIPE_CONNECTED
#define WT_EXECUTEDEFAULT
#define SC_MANAGER_CONNECT
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)