LWMsgStatus lwmsg_assoc_send_transact( LWMsgAssoc* assoc, LWMsgTag in_type, void* in_object, LWMsgTag* out_type, void** out_object ) { LWMsgStatus status = LWMSG_STATUS_SUCCESS; LWMsgMessage in_message = LWMSG_MESSAGE_INITIALIZER; LWMsgMessage out_message = LWMSG_MESSAGE_INITIALIZER; in_message.tag = in_type; in_message.data = in_object; BAIL_ON_ERROR(status = lwmsg_assoc_send_message_transact(assoc, &in_message, &out_message)); *out_type = out_message.tag; *out_object = out_message.data; error: return status; }
DWORD LsaGetTraceFlag( HANDLE hLsaConnection, DWORD dwTraceFlag, PLSA_TRACE_INFO* ppTraceFlag ) { DWORD dwError = 0; PLSA_CLIENT_CONNECTION_CONTEXT pContext = (PLSA_CLIENT_CONNECTION_CONTEXT)hLsaConnection; PLSA_TRACE_INFO_LIST pResult = NULL; PLSA_IPC_ERROR pError = NULL; LWMsgMessage request = LWMSG_MESSAGE_INITIALIZER; LWMsgMessage response = LWMSG_MESSAGE_INITIALIZER; request.tag = LSA_Q_GET_TRACE_INFO; request.object = &dwTraceFlag; dwError = MAP_LWMSG_ERROR(lwmsg_assoc_send_message_transact( pContext->pAssoc, &request, &response)); BAIL_ON_LSA_ERROR(dwError); switch (response.tag) { case LSA_R_GET_TRACE_INFO_SUCCESS: pResult = (PLSA_TRACE_INFO_LIST) response.object; if (pResult->dwNumFlags != 1) { dwError = LW_ERROR_INTERNAL; BAIL_ON_LSA_ERROR(dwError); } *ppTraceFlag = pResult->pTraceInfoArray; pResult->pTraceInfoArray = NULL; pResult->dwNumFlags = 0; break; case LSA_R_GET_TRACE_INFO_FAILURE: pError = (PLSA_IPC_ERROR) response.object; dwError = pError->dwError; BAIL_ON_LSA_ERROR(dwError); break; default: dwError = LW_ERROR_UNEXPECTED_MESSAGE; BAIL_ON_LSA_ERROR(dwError); } cleanup: return dwError; error: if (response.object) { lwmsg_assoc_free_message(pContext->pAssoc, &response); } goto cleanup; }
DWORD LsaEnumTraceFlags( HANDLE hLsaConnection, PLSA_TRACE_INFO* ppTraceFlagArray, PDWORD pdwNumFlags ) { DWORD dwError = 0; PLSA_CLIENT_CONNECTION_CONTEXT pContext = (PLSA_CLIENT_CONNECTION_CONTEXT)hLsaConnection; // Do not free pResultList and pError PLSA_TRACE_INFO_LIST pResultList = NULL; PLSA_IPC_ERROR pError = NULL; LWMsgMessage request = LWMSG_MESSAGE_INITIALIZER; LWMsgMessage response = LWMSG_MESSAGE_INITIALIZER; request.tag = LSA_Q_ENUM_TRACE_INFO; request.object = NULL; dwError = MAP_LWMSG_ERROR(lwmsg_assoc_send_message_transact( pContext->pAssoc, &request, &response)); BAIL_ON_LSA_ERROR(dwError); switch (response.tag) { case LSA_R_ENUM_TRACE_INFO_SUCCESS: pResultList = (PLSA_TRACE_INFO_LIST)response.object; *ppTraceFlagArray = pResultList->pTraceInfoArray; pResultList->pTraceInfoArray = NULL; *pdwNumFlags = pResultList->dwNumFlags; pResultList->dwNumFlags = 0; break; case LSA_R_ENUM_TRACE_INFO_FAILURE: pError = (PLSA_IPC_ERROR) response.object; dwError = pError->dwError; BAIL_ON_LSA_ERROR(dwError); break; default: dwError = LW_ERROR_UNEXPECTED_MESSAGE; BAIL_ON_LSA_ERROR(dwError); } cleanup: if (response.object) { lwmsg_assoc_free_message(pContext->pAssoc, &response); } return dwError; error: *pdwNumFlags = 0; *ppTraceFlagArray = NULL; goto cleanup; }
DWORD LsaSetTraceFlags( HANDLE hLsaConnection, PLSA_TRACE_INFO pTraceFlagArray, DWORD dwNumFlags ) { DWORD dwError = 0; PLSA_CLIENT_CONNECTION_CONTEXT pContext = (PLSA_CLIENT_CONNECTION_CONTEXT)hLsaConnection; LSA_IPC_SET_TRACE_INFO_REQ setTraceinfoReq; PLSA_IPC_ERROR pError = NULL; LWMsgMessage request = LWMSG_MESSAGE_INITIALIZER; LWMsgMessage response = LWMSG_MESSAGE_INITIALIZER; setTraceinfoReq.dwNumFlags = dwNumFlags; setTraceinfoReq.pTraceFlagArray = pTraceFlagArray; request.tag = LSA_Q_SET_TRACE_INFO; request.object = &setTraceinfoReq; dwError = MAP_LWMSG_ERROR(lwmsg_assoc_send_message_transact( pContext->pAssoc, &request, &response)); BAIL_ON_LSA_ERROR(dwError); switch (response.tag) { case LSA_R_SET_TRACE_INFO_SUCCESS: // response.object == NULL break; case LSA_R_SET_TRACE_INFO_FAILURE: pError = (PLSA_IPC_ERROR) response.object; dwError = pError->dwError; BAIL_ON_LSA_ERROR(dwError); break; default: dwError = LW_ERROR_UNEXPECTED_MESSAGE; BAIL_ON_LSA_ERROR(dwError); } cleanup: return dwError; error: if (response.object) { lwmsg_assoc_free_message(pContext->pAssoc, &response); } goto cleanup; }
DWORD LsaGetStatus2( HANDLE hLsaConnection, PCSTR pszTargetProvider, PLSASTATUS* ppLsaStatus ) { DWORD dwError = 0; PLSA_CLIENT_CONNECTION_CONTEXT pContext = (PLSA_CLIENT_CONNECTION_CONTEXT)hLsaConnection; PLSA_IPC_ERROR pError = NULL; LWMsgMessage request = LWMSG_MESSAGE_INITIALIZER; LWMsgMessage response = LWMSG_MESSAGE_INITIALIZER; request.tag = LSA_Q_GET_STATUS; request.object = (PVOID)pszTargetProvider; dwError = MAP_LWMSG_ERROR(lwmsg_assoc_send_message_transact( pContext->pAssoc, &request, &response)); BAIL_ON_LSA_ERROR(dwError); switch (response.tag) { case LSA_R_GET_STATUS_SUCCESS: *ppLsaStatus = (PLSASTATUS)response.object; break; case LSA_R_GET_STATUS_FAILURE: pError = (PLSA_IPC_ERROR) response.object; dwError = pError->dwError; BAIL_ON_LSA_ERROR(dwError); break; default: dwError = LW_ERROR_UNEXPECTED_MESSAGE; BAIL_ON_LSA_ERROR(dwError); } cleanup: return dwError; error: if (response.object) { lwmsg_assoc_free_message(pContext->pAssoc, &response); } *ppLsaStatus = NULL; goto cleanup; }
LSASS_API DWORD LsaGetPamConfig( IN HANDLE hLsaConnection, OUT PLSA_PAM_CONFIG *ppPamConfig ) { DWORD dwError = 0; PLSA_CLIENT_CONNECTION_CONTEXT pContext = (PLSA_CLIENT_CONNECTION_CONTEXT)hLsaConnection; PLSA_IPC_ERROR pError = NULL; LWMsgMessage request = LWMSG_MESSAGE_INITIALIZER; LWMsgMessage response = LWMSG_MESSAGE_INITIALIZER; request.tag = LSA_Q_GET_PAM_CONFIG; request.object = NULL; dwError = MAP_LWMSG_ERROR(lwmsg_assoc_send_message_transact( pContext->pAssoc, &request, &response)); BAIL_ON_LSA_ERROR(dwError); switch (response.tag) { case LSA_R_GET_PAM_CONFIG_SUCCESS: *ppPamConfig = (PLSA_PAM_CONFIG) response.object; break; case LSA_R_GET_PAM_CONFIG_FAILURE: pError = (PLSA_IPC_ERROR) response.object; dwError = pError->dwError; BAIL_ON_LSA_ERROR(dwError); break; default: dwError = LW_ERROR_UNEXPECTED_MESSAGE; BAIL_ON_LSA_ERROR(dwError); } cleanup: return dwError; error: if (response.object) { lwmsg_assoc_free_message(pContext->pAssoc, &response); } goto cleanup; }