static NTSTATUS LwIoThreadInit( void ) { NTSTATUS Status = 0; BOOL bInLock = FALSE; LWIO_LOCK_MUTEX(bInLock, &gLock); if (!gpLwIoProtocol) { LwIoInitialize(); } if (!gbStateKeyInit) { Status = LwErrnoToNtStatus(pthread_key_create(&gStateKey, LwIoThreadStateDestruct)); BAIL_ON_NT_STATUS(Status); gbStateKeyInit = TRUE; } if (!gpProcessCreds) { Status = LwIoInitProcessCreds(); BAIL_ON_NT_STATUS(Status); } if (!gpClient) { Status = NtIpcLWMsgStatusToNtStatus(lwmsg_peer_new(NULL, gpLwIoProtocol, &gpClient)); BAIL_ON_NT_STATUS(Status); Status = NtIpcLWMsgStatusToNtStatus(lwmsg_peer_add_connect_endpoint( gpClient, LWMSG_ENDPOINT_DIRECT, "lwio")); Status = NtIpcLWMsgStatusToNtStatus(lwmsg_peer_add_connect_endpoint( gpClient, LWMSG_ENDPOINT_LOCAL, LWIO_SERVER_FILENAME)); BAIL_ON_NT_STATUS(Status); } if (!gpSession) { Status = NtIpcLWMsgStatusToNtStatus(lwmsg_peer_connect( gpClient, &gpSession)); BAIL_ON_NT_STATUS(Status); } error: LWIO_UNLOCK_MUTEX(bInLock, &gLock); return Status; }
VOID LwmEvtOpenServerOnce( VOID ) { DWORD dwError = 0; dwError = MAP_LWMSG_ERROR(lwmsg_protocol_new(NULL, &gContext.pProtocol)); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_protocol_add_protocol_spec(gContext.pProtocol, LwEvtIPCGetProtocolSpec())); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_peer_new(NULL, gContext.pProtocol, &gContext.pClient)); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_peer_add_connect_endpoint( gContext.pClient, LWMSG_ENDPOINT_DIRECT, "eventlog")); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_peer_add_connect_endpoint( gContext.pClient, LWMSG_ENDPOINT_LOCAL, CACHEDIR "/" EVT_SERVER_FILENAME)); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_peer_connect(gContext.pClient, &gContext.pSession)); BAIL_ON_EVT_ERROR(dwError); cleanup: gdwOnceError = dwError; return; error: if (gContext.pClient) { lwmsg_peer_delete(gContext.pClient); gContext.pClient = NULL; } if (gContext.pProtocol) { lwmsg_protocol_delete(gContext.pProtocol); gContext.pProtocol = NULL; } goto cleanup; }
static void __LwSmIpcCallInit( void ) { DWORD dwError = 0; dwError = MAP_LWMSG_STATUS(lwmsg_protocol_new(NULL, &gpProtocol)); BAIL_ON_ERROR(dwError); dwError = MAP_LWMSG_STATUS(lwmsg_protocol_add_protocol_spec( gpProtocol, LwSmIpcGetProtocolSpec())); BAIL_ON_ERROR(dwError); dwError = MAP_LWMSG_STATUS(lwmsg_peer_new(NULL, gpProtocol, &gpClient)); BAIL_ON_ERROR(dwError); dwError = MAP_LWMSG_STATUS(lwmsg_peer_add_connect_endpoint( gpClient, (LWMsgEndpointType)LWMSG_CONNECTION_MODE_LOCAL, SM_ENDPOINT)); BAIL_ON_ERROR(dwError); dwError = MAP_LWMSG_STATUS(lwmsg_peer_connect( gpClient, &gpSession)); BAIL_ON_ERROR(dwError); cleanup: gOnceError = dwError; return; error: if (gpClient) { lwmsg_peer_delete(gpClient); } if (gpProtocol) { lwmsg_protocol_delete(gpProtocol); } goto cleanup; }