34#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
59 PMInterfacePointer
object,
unsigned int *
cookie)
62 static LONG next_cookie;
74 entry->object->ulCntData =
object->ulCntData;
113 PMInterfacePointer *
object)
128 (*object)->ulCntData =
cur->object->ulCntData;
129 memcpy((*object)->abData,
cur->object->abData,
cur->object->ulCntData);
146 static LONG thread_seq_id;
153 static unsigned short irot_protseq[] = IROT_PROTSEQ;
154 static unsigned short irot_endpoint[] = IROT_ENDPOINT;
155 static unsigned short epm_protseq[] =
L"ncacn_np";
156 static unsigned short epm_endpoint[] =
L"\\pipe\\epmapper";
157 static unsigned short epm_protseq_lrpc[] =
L"ncalrpc";
158 static unsigned short epm_endpoint_lrpc[] =
L"epmapper";
159 static unsigned short irpcss_protseq[] = IRPCSS_PROTSEQ;
160 static unsigned short irpcss_endpoint[] = IRPCSS_ENDPOINT;
161 static const struct protseq_map
163 unsigned short *protseq;
167 { epm_protseq, epm_endpoint },
168 { epm_protseq_lrpc, epm_endpoint_lrpc },
169 { irot_protseq, irot_endpoint },
170 { irpcss_protseq, irpcss_endpoint },
176 Irpcss_v0_0_s_ifspec,
205 for (
i = 0;
i <
j; ++
i)
217 status.dwControlsAccepted = 0;
221 status.dwWin32ExitCode = 0;
222 status.dwServiceSpecificExitCode = 0;
230 TRACE(
"shutting down\n" );
235 status.dwControlsAccepted = 0;
256 TRACE(
"starting service\n" );
260 WARN(
"Failed to initialize rpc interfaces, status %ld.\n",
ret);
272 status.dwControlsAccepted = 0;
276 status.dwWin32ExitCode = 0;
277 status.dwServiceSpecificExitCode = 0;
282 status.dwWaitHint = 10000;
293 status.dwControlsAccepted = 0;
295 TRACE(
"service stopped\n" );
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
#define InterlockedIncrement
#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)
VOID DoRpcSsSetupConfiguration(VOID)
void __RPC_FAR *__RPC_USER MIDL_user_allocate(SIZE_T len)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
GLfloat GLfloat GLfloat GLfloat h
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 memcpy(s1, s2, n)
#define SERVICE_ACCEPT_STOP
#define SERVICE_STOP_PENDING
#define SERVICE_CONTROL_SHUTDOWN
#define SERVICE_CONTROL_STOP
RPC_STATUS WINAPI RpcServerListen(UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait)
RPC_STATUS WINAPI RpcServerRegisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv)
RPC_STATUS WINAPI RpcServerUseProtseqEpW(RPC_WSTR Protseq, UINT MaxCalls, RPC_WSTR Endpoint, LPVOID SecurityDescriptor)
static struct list protseqs
RPC_STATUS WINAPI RpcServerUnregisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, UINT WaitForCallsToComplete)
RPC_STATUS WINAPI RpcMgmtStopServerListening(RPC_BINDING_HANDLE Binding)
#define RPC_C_LISTEN_MAX_CALLS_DEFAULT
#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT
static DWORD WINAPI service_handler(DWORD ctrl, DWORD event_type, LPVOID event_data, LPVOID context)
static CRITICAL_SECTION registered_classes_cs
static RPC_STATUS RPCSS_Initialize(void)
static void scm_revoke_class(struct registered_class *_class)
static void WINAPI ServiceMain(DWORD argc, LPWSTR *argv)
static SERVICE_STATUS_HANDLE service_handle
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)
static struct list registered_classes
SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR lpServiceName, LPHANDLER_FUNCTION_EX lpHandlerProc, LPVOID lpContext)
BOOL WINAPI StartServiceCtrlDispatcherW(const SERVICE_TABLE_ENTRYW *lpServiceStartTable)
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
PMInterfacePointer object
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, 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)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)