72 {
"ncacn_np",
"\\pipe\\epmapper" },
73 {
"ncacn_ip_tcp",
"135" },
74 {
"ncacn_ip_udp",
"135" },
75 {
"ncalrpc",
"epmapper" },
76 {
"ncacn_http",
"593" },
81 static const WCHAR rpcssW[] = {
'R',
'p',
'c',
'S',
's',0};
82 SC_HANDLE scm, service;
90 ERR(
"failed to open service manager\n" );
95 ERR(
"failed to open RpcSs service\n" );
120 WARN(
"RpcSs failed to start %u\n",
status.dwCurrentState );
122 else ERR(
"failed to start RpcSs service\n" );
132 const char *protseq =
bind->Protseq;
133 const char *network_addr =
bind->NetworkAddr;
135 return (!
strcmp(protseq,
"ncalrpc") ||
136 (!
strcmp(protseq,
"ncacn_np") &&
137 (!network_addr || !
strcmp(network_addr,
"."))));
143 const char * pszEndpoint =
NULL;
157 FIXME(
"no endpoint for the endpoint-mapper found for protseq %s\n",
debugstr_a(
bind->Protseq));
164 epm_bind = *epm_handle;
179 unsigned char string_binding[] =
"ncacn_np:.[\\\\pipe\\\\epmapper]";
203 ept_entry_t *entries;
206 TRACE(
"(%p,%p,%p,%s) replace=%d\n", IfSpec, BindingVector, UuidVector,
debugstr_a((
char*)Annotation),
replace);
208 for (
i=0;
i<BindingVector->
Count;
i++) {
231 for (
i = 0;
i < BindingVector->
Count;
i++)
235 for (
j = 0;
j < (UuidVector ? UuidVector->
Count : 1);
j++)
240 &entries[
i*(UuidVector ? UuidVector->
Count : 1) +
j].tower);
246 memset(&entries[
i].
object, 0,
sizeof(entries[
i].
object));
249 min(
strlen((
char *)Annotation) + 1, ept_max_annotation_size));
274 ERR(
"ept_insert failed with error %d\n", status2);
281 for (
i = 0;
i < BindingVector->
Count;
i++)
284 for (
j = 0;
j < (UuidVector ? UuidVector->
Count : 1);
j++)
351 ept_entry_t *entries;
354 TRACE(
"(%p,%p,%p)\n", IfSpec, BindingVector, UuidVector);
356 for (
i=0;
i<BindingVector->
Count;
i++) {
377 for (
i = 0;
i < BindingVector->
Count;
i++)
381 for (
j = 0;
j < (UuidVector ? UuidVector->
Count : 1);
j++)
386 &entries[
i*(UuidVector ? UuidVector->
Count : 1) +
j].tower);
392 memset(&entries[
i].
object, 0,
sizeof(entries[
i].
object));
401 entries,
TRUE, &status2);
411 ERR(
"ept_insert failed with error %d\n", status2);
416 for (
i = 0;
i < BindingVector->
Count;
i++)
419 for (
j = 0;
j < (UuidVector ? UuidVector->
Count : 1);
j++)
438 ept_lookup_handle_t entry_handle =
NULL;
443 char *resolved_endpoint =
NULL;
452 if (
bind->Endpoint && (
bind->Endpoint[0] !=
'\0'))
460 bind->NetworkAddr, &tower);
463 WARN(
"couldn't get tower\n");
498 for (
i = 0;
i < num_towers;
i++)
502 if (!resolved_endpoint)
510 if (resolved_endpoint)
517 WARN(
"couldn't find an endpoint\n");
530 const unsigned char *
p;
535 TRACE(
"(%p, %p, %p, %p, %p, %p)\n", tower,
object, syntax, protseq,
547 if (tower_size <
sizeof(
u_int16))
555 TRACE(
"floor_count: %d\n", floor_count);
558 if (tower_size <
sizeof(*object_floor) +
sizeof(*syntax_floor))
562 p +=
sizeof(*object_floor);
563 tower_size -=
sizeof(*object_floor);
565 p +=
sizeof(*syntax_floor);
566 tower_size -=
sizeof(*syntax_floor);
586 object->SyntaxGUID = object_floor->
uuid;
587 object->SyntaxVersion.MajorVersion = object_floor->
major_version;
588 object->SyntaxVersion.MinorVersion = object_floor->
minor_version;
607 TRACE(
"(%p, %p, %s, %s, %s, %p)\n",
object, syntax,
debugstr_a(protseq),
617 tower_size +=
sizeof(
u_int16) +
sizeof(*object_floor) +
sizeof(*syntax_floor);
622 (*tower)->tower_length = tower_size;
623 p = &(*tower)->tower_octet_string[0];
627 p +=
sizeof(*object_floor);
629 p +=
sizeof(*syntax_floor);
635 object_floor->
uuid =
object->SyntaxGUID;
636 object_floor->
major_version =
object->SyntaxVersion.MajorVersion;
637 object_floor->
minor_version =
object->SyntaxVersion.MinorVersion;
ULONGLONG WINAPI GetTickCount64(VOID)
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
#define HeapFree(x, y, z)
#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 memcpy(s1, s2, n)
#define GetExceptionCode()
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) DECLSPEC_HIDDEN
RPC_STATUS RpcTransport_GetTopOfTower(unsigned char *tower_data, size_t *tower_size, const char *protseq, const char *networkaddr, const char *endpoint) DECLSPEC_HIDDEN
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 EXCEPTION_ILLEGAL_INSTRUCTION
#define EXCEPTION_ACCESS_VIOLATION
#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