DWORD LwpsLegacyGetJoinedDomainTrustEnumerationWaitTime( IN PLWPS_LEGACY_STATE pContext, IN OPTIONAL PCSTR pszDomainName, OUT PDWORD* ppdwTrustEnumerationWaitSeconds, OUT PDWORD* ppdwTrustEnumerationWaitEnabled ) { DWORD dwError = 0; int EE = 0; PSTR pszRegistryPath = NULL; PVOID dwValue = NULL; PVOID dwValue1 = NULL; REG_DATA_TYPE readType = 0; DWORD dwValueSize = 0; DWORD dwValueSize1 = 0; if (pszDomainName) { dwError = LwAllocateStringPrintf( &pszRegistryPath, "%s\\%s", PSTOREDB_REGISTRY_AD_KEY, pszDomainName); GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE); dwError = RegUtilGetValue( pContext->hReg, HKEY_THIS_MACHINE, pszRegistryPath, NULL, PSTOREDB_REGISTRY_TRUSTENUMERATIONWAIT_VALUE, &readType, &dwValue, &dwValueSize); GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE); dwError = RegUtilGetValue( pContext->hReg, HKEY_THIS_MACHINE, pszRegistryPath, NULL, PSTOREDB_REGISTRY_TRUSTENUMERATIONWAITSECONDS_VALUE, &readType, &dwValue1, &dwValueSize1); GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE); *ppdwTrustEnumerationWaitSeconds = (PDWORD) dwValue1; *ppdwTrustEnumerationWaitEnabled = (PDWORD) dwValue; } cleanup: LW_SAFE_FREE_MEMORY(pszRegistryPath); LSA_PSTORE_LOG_LEAVE_ERROR_EE(dwError, EE); return dwError; }
DWORD LwpsLegacyGetDefaultJoinedDomain( IN PLWPS_LEGACY_STATE pContext, OUT PSTR* ppszDomainName ) { DWORD dwError = 0; int EE = 0; PSTR pszDomainName = NULL; DWORD dwValueLen = 0; dwError = RegUtilGetValue( pContext->hReg, HKEY_THIS_MACHINE, PSTOREDB_REGISTRY_AD_KEY, NULL, PSTOREDB_REGISTRY_DEFAULT_VALUE, NULL, (PVOID) &pszDomainName, &dwValueLen); if (dwError == LWREG_ERROR_NO_SUCH_KEY_OR_VALUE) { // Treat as no default domain set assert(!pszDomainName); dwError = 0; GOTO_CLEANUP_EE(EE); } GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE); dwError = LwpsLegacyReadPassword( pContext, pszDomainName, NULL); if (dwError == NERR_SetupNotJoined) { // TODO-INCONSISTENT-FREE-FUNCTION!!! LW_SAFE_FREE_MEMORY(pszDomainName); dwError = 0; GOTO_CLEANUP_EE(EE); } GOTO_CLEANUP_ON_WINERROR_EE(dwError, EE); cleanup: if (dwError) { // TODO-INCONSISTENT-FREE-FUNCTION!!! LW_SAFE_FREE_MEMORY(pszDomainName); } *ppszDomainName = pszDomainName; LSA_PSTORE_LOG_LEAVE_ERROR_EE(dwError, EE); return dwError; }
DWORD LwCAGetRegKeyValueDword( PCSTR pszConfigParamKeyPath, PCSTR pszKey, PDWORD pdwValue, DWORD dwDefaultValue ) { DWORD dwError = 0; DWORD dwValue = 0; REG_DATA_TYPE RegType = 0; if (pszConfigParamKeyPath == NULL || pszKey == NULL || pdwValue == NULL) { dwError = LWCA_ERROR_INVALID_PARAMETER; BAIL_ON_LWCA_ERROR(dwError); } LWCA_LOG_VERBOSE("Reading Reg: %s", pszKey); *pdwValue = dwDefaultValue; dwError = RegUtilGetValue( NULL, HKEY_THIS_MACHINE, NULL, pszConfigParamKeyPath, pszKey, &RegType, (PVOID*)&dwValue, NULL); BAIL_ON_LWCA_ERROR(dwError); if (RegType != REG_DWORD) { dwError = LWCA_ERROR_INVALID_PARAMETER; BAIL_ON_LWCA_ERROR(dwError); } *pdwValue = dwValue; cleanup: return dwError; error: LWCA_LOG_VERBOSE( "VmDirGetRegKeyValueDword failed with error (%u)(%s)", dwError, LWCA_SAFE_STRING(pszKey)); goto cleanup; }
DWORD LwCAGetRegKeyValue( PCSTR pszConfigParamKeyPath, PCSTR pszKey, PSTR pszValue, size_t valueLen ) { DWORD dwError = 0; PSTR pszLocalValue = NULL; DWORD dwLocalValueLen = 0; if (pszValue == NULL) { dwError = LWCA_ERROR_INVALID_PARAMETER; BAIL_ON_LWCA_ERROR(dwError); } dwError = RegUtilGetValue( NULL, HKEY_THIS_MACHINE, NULL, pszConfigParamKeyPath, pszKey, NULL, (PVOID*)&pszLocalValue, &dwLocalValueLen); BAIL_ON_LWCA_ERROR(dwError); if (dwLocalValueLen > valueLen) // in case of string values, dwLocalValueLen includes '\0' and therefore valueLen // should also include space for '\0' { dwError = LWCA_ERROR_INVALID_PARAMETER; // TBD: Better error code?? BAIL_ON_LWCA_ERROR(dwError); } memcpy( pszValue, pszLocalValue, dwLocalValueLen ); cleanup: if (pszLocalValue) { RegFreeMemory(pszLocalValue); } return dwError; error: goto cleanup; }