static HANDLE RegSrvIpcGetSessionData( LWMsgCall* pCall ) { LWMsgSession* pSession = lwmsg_call_get_session(pCall); return lwmsg_session_get_data(pSession); }
static DWORD LwmEvtSrvGetConnection( IN LWMsgCall* pCall, OUT PLWMSG_LW_EVENTLOG_CONNECTION* ppConn ) { DWORD dwError = 0; LWMsgSession* pSession = NULL; PLWMSG_LW_EVENTLOG_CONNECTION pConn = NULL; NTSTATUS status = 0; PLW_MAP_SECURITY_CONTEXT pContext = NULL; if (pCall == NULL) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_EVT_ERROR(dwError); } pSession = lwmsg_call_get_session(pCall); if (pSession == NULL) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_EVT_ERROR(dwError); } pConn = (PLWMSG_LW_EVENTLOG_CONNECTION)lwmsg_session_get_data(pSession); if (pConn == NULL) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_EVT_ERROR(dwError); } if (!pConn->pUserToken) { status = LwMapSecurityCreateContext(&pContext); BAIL_ON_EVT_ERROR(status); status = LwMapSecurityCreateAccessTokenFromUidGid( pContext, &pConn->pUserToken, pConn->Uid, pConn->Gid); BAIL_ON_EVT_ERROR(status); dwError = EVTCheckAllowed( pConn->pUserToken, EVENTLOG_READ_RECORD, &pConn->ReadAllowed); BAIL_ON_EVT_ERROR(dwError); dwError = EVTCheckAllowed( pConn->pUserToken, EVENTLOG_WRITE_RECORD, &pConn->WriteAllowed); BAIL_ON_EVT_ERROR(dwError); dwError = EVTCheckAllowed( pConn->pUserToken, EVENTLOG_DELETE_RECORD, &pConn->DeleteAllowed); BAIL_ON_EVT_ERROR(dwError); if (!pConn->ReadAllowed && !pConn->WriteAllowed && !pConn->DeleteAllowed) { dwError = ERROR_ACCESS_DENIED; BAIL_ON_EVT_ERROR(dwError); } } *ppConn = pConn; cleanup: if (pContext) { LwMapSecurityFreeContext(&pContext); } if (dwError == 0 && status) { dwError = LwNtStatusToWin32Error(status); } return dwError; error: *ppConn = NULL; goto cleanup; }