72 {
"ncacn_np",
"\\pipe\\epmapper" },
73 {
"ncacn_ip_tcp",
"135" },
74 {
"ncacn_ip_udp",
"135" },
75 {
"ncalrpc",
"epmapper" },
76 {
"ncacn_http",
"593" },
81 SC_HANDLE scm, service;
89 ERR(
"failed to open service manager\n" );
94 ERR(
"failed to open RpcSs service\n" );
119 WARN(
"RpcSs failed to start %lu\n",
status.dwCurrentState );
121 else ERR(
"failed to start RpcSs service\n" );
131 const char *protseq =
bind->Protseq;
132 const char *network_addr =
bind->NetworkAddr;
134 return (!
strcmp(protseq,
"ncalrpc") ||
135 (!
strcmp(protseq,
"ncacn_np") &&
136 (!network_addr || !
strcmp(network_addr,
"."))));
142 const char * pszEndpoint =
NULL;
156 FIXME(
"no endpoint for the endpoint-mapper found for protseq %s\n",
debugstr_a(
bind->Protseq));
163 epm_bind = *epm_handle;
178 unsigned char string_binding[] =
"ncacn_np:.[\\\\pipe\\\\epmapper]";
202 ept_entry_t *entries;
205 TRACE(
"(%p,%p,%p,%s) replace=%d\n", IfSpec, BindingVector, UuidVector,
debugstr_a((
char*)Annotation),
replace);
207 for (
i=0;
i<BindingVector->
Count;
i++) {
219 entries =
calloc(BindingVector->
Count * (UuidVector ? UuidVector->
Count : 1),
sizeof(*entries));
230 for (
i = 0;
i < BindingVector->
Count;
i++)
234 for (
j = 0;
j < (UuidVector ? UuidVector->
Count : 1);
j++)
239 &entries[
i*(UuidVector ? UuidVector->
Count : 1) +
j].tower);
245 memset(&entries[
i].
object, 0,
sizeof(entries[
i].
object));
248 min(
strlen((
char *)Annotation) + 1, ept_max_annotation_size));
273 ERR(
"ept_insert failed with error %ld\n", status2);
280 for (
i = 0;
i < BindingVector->
Count;
i++)
283 for (
j = 0;
j < (UuidVector ? UuidVector->
Count : 1);
j++)
350 ept_entry_t *entries;
353 TRACE(
"(%p,%p,%p)\n", IfSpec, BindingVector, UuidVector);
355 for (
i=0;
i<BindingVector->
Count;
i++) {
365 entries =
calloc(BindingVector->
Count * (UuidVector ? UuidVector->
Count : 1),
sizeof(*entries));
376 for (
i = 0;
i < BindingVector->
Count;
i++)
380 for (
j = 0;
j < (UuidVector ? UuidVector->
Count : 1);
j++)
385 &entries[
i*(UuidVector ? UuidVector->
Count : 1) +
j].tower);
391 memset(&entries[
i].
object, 0,
sizeof(entries[
i].
object));
400 entries,
TRUE, &status2);
410 ERR(
"ept_insert failed with error %ld\n", status2);
415 for (
i = 0;
i < BindingVector->
Count;
i++)
418 for (
j = 0;
j < (UuidVector ? UuidVector->
Count : 1);
j++)
437 ept_lookup_handle_t entry_handle =
NULL;
442 char *resolved_endpoint =
NULL;
451 if (
bind->Endpoint && (
bind->Endpoint[0] !=
'\0'))
459 bind->NetworkAddr, &tower);
462 WARN(
"couldn't get tower\n");
497 for (
i = 0;
i < num_towers;
i++)
501 if (!resolved_endpoint)
509 if (resolved_endpoint)
516 WARN(
"couldn't find an endpoint\n");
529 const unsigned char *
p;
534 TRACE(
"(%p, %p, %p, %p, %p, %p)\n", tower,
object, syntax, protseq,
546 if (tower_size <
sizeof(
u_int16))
554 TRACE(
"floor_count: %d\n", floor_count);
557 if (tower_size <
sizeof(*object_floor) +
sizeof(*syntax_floor))
561 p +=
sizeof(*object_floor);
562 tower_size -=
sizeof(*object_floor);
564 p +=
sizeof(*syntax_floor);
565 tower_size -=
sizeof(*syntax_floor);
585 object->SyntaxGUID = object_floor->
uuid;
586 object->SyntaxVersion.MajorVersion = object_floor->
major_version;
587 object->SyntaxVersion.MinorVersion = object_floor->
minor_version;
606 TRACE(
"(%p, %p, %s, %s, %s, %p)\n",
object, syntax,
debugstr_a(protseq),
616 tower_size +=
sizeof(
u_int16) +
sizeof(*object_floor) +
sizeof(*syntax_floor);
621 (*tower)->tower_length = tower_size;
622 p = &(*tower)->tower_octet_string[0];
626 p +=
sizeof(*object_floor);
628 p +=
sizeof(*syntax_floor);
634 object_floor->
uuid =
object->SyntaxGUID;
635 object_floor->
major_version =
object->SyntaxVersion.MajorVersion;
636 object_floor->
minor_version =
object->SyntaxVersion.MinorVersion;
int strcmp(const char *String1, const char *String2)
ACPI_SIZE strlen(const char *String)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
unsigned long error_status_t
ULONGLONG WINAPI DECLSPEC_HOTPATCH GetTickCount64(void)
#define EPM_PROTOCOL_UUID
void __cdecl ept_insert(handle_t h, unsigned32 num_ents, ept_entry_t entries[], boolean32 replace, error_status_t *status)
void __cdecl ept_map(handle_t h, uuid_p_t object, twr_p_t map_tower, ept_lookup_handle_t *entry_handle, unsigned32 max_towers, unsigned32 *num_towers, twr_p_t *towers, error_status_t *status)
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 const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define EXCEPTION_EXECUTE_HANDLER
#define EXCEPTION_CONTINUE_SEARCH
#define EXCEPTION_ILLEGAL_INSTRUCTION
#define EXCEPTION_ACCESS_VIOLATION
#define memcpy(s1, s2, n)
INT replace(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], DWORD dwFlags, BOOL *doMore)
LPSTR RPCRT4_strdupWtoA(LPCWSTR src)
RPC_STATUS RPCRT4_ResolveBinding(RpcBinding *Binding, LPCSTR Endpoint)
RPC_STATUS WINAPI RpcBindingFree(RPC_BINDING_HANDLE *Binding)
ULONG RpcAuthInfo_Release(RpcAuthInfo *AuthInfo)
RPC_STATUS RPC_ENTRY RpcBindingCopy(RPC_BINDING_HANDLE SourceBinding, RPC_BINDING_HANDLE *DestinationBinding)
RPC_STATUS WINAPI RpcBindingFromStringBindingA(RPC_CSTR StringBinding, RPC_BINDING_HANDLE *Binding)
RPC_STATUS RpcTransport_ParseTopOfTower(const unsigned char *tower_data, size_t tower_size, char **protseq, char **networkaddr, char **endpoint)
RPC_STATUS RpcTransport_GetTopOfTower(unsigned char *tower_data, size_t *tower_size, const char *protseq, const char *networkaddr, const char *endpoint)
RPC_STATUS WINAPI RpcEpUnregister(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector)
static RPC_STATUS get_epm_handle_server(RPC_BINDING_HANDLE *epm_handle)
RPC_STATUS WINAPI RpcEpRegisterNoReplaceW(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector, RPC_WSTR Annotation)
RPC_STATUS WINAPI TowerExplode(const twr_t *tower, PRPC_SYNTAX_IDENTIFIER object, PRPC_SYNTAX_IDENTIFIER syntax, char **protseq, char **endpoint, char **address)
RPC_STATUS WINAPI RpcEpRegisterNoReplaceA(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector, RPC_CSTR Annotation)
static RPC_STATUS get_epm_handle_client(RPC_BINDING_HANDLE handle, RPC_BINDING_HANDLE *epm_handle)
void __RPC_USER MIDL_user_free(void __RPC_FAR *ptr)
RPC_STATUS WINAPI TowerConstruct(const RPC_SYNTAX_IDENTIFIER *object, const RPC_SYNTAX_IDENTIFIER *syntax, const char *protseq, const char *endpoint, const char *address, twr_t **tower)
static RPC_STATUS epm_register(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector, RPC_CSTR Annotation, BOOL replace)
RPC_STATUS WINAPI RpcEpResolveBinding(RPC_BINDING_HANDLE Binding, RPC_IF_HANDLE IfSpec)
RPC_STATUS WINAPI RpcEpRegisterW(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector, RPC_WSTR Annotation)
static BOOL is_epm_destination_local(RPC_BINDING_HANDLE handle)
static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *__eptr)
RPC_STATUS WINAPI RpcEpRegisterA(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector, RPC_CSTR Annotation)
void __RPC_FAR *__RPC_USER MIDL_user_allocate(SIZE_T len)
static BOOL start_rpcss(void)
unsigned short * RPC_WSTR
#define RPC_S_OUT_OF_MEMORY
void WINAPI I_RpcFree(void *Object)
void *WINAPI I_RpcAllocate(unsigned int Size)
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)
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
PEXCEPTION_RECORD ExceptionRecord
RPC_BINDING_HANDLE BindingH[1]
RPC_SYNTAX_IDENTIFIER InterfaceId
RPC_SYNTAX_IDENTIFIER TransferSyntax
RPC_SYNTAX_IDENTIFIER InterfaceId
RPC_SYNTAX_IDENTIFIER TransferSyntax
RPC_VERSION SyntaxVersion
unsigned short MajorVersion
unsigned short MinorVersion
byte tower_octet_string[1]
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
#define FIELD_OFFSET(t, f)
DWORD WINAPI GetLastError(void)
#define RPC_S_PROTSEQ_NOT_SUPPORTED
#define RPC_S_OUT_OF_RESOURCES
#define ERROR_SERVICE_ALREADY_RUNNING
#define EPT_S_NOT_REGISTERED
#define RPC_S_SERVER_UNAVAILABLE
#define RPC_S_INVALID_BINDING
#define SERVICE_QUERY_STATUS
#define SERVICE_START_PENDING