Функция RasSetCredentials не сохраняет логин и пароль для сетевого подключения в Windows 10

Paul A.

После создания сетевого подключения использую функцию RasSetCredentials(), чтобы сохранить имя пользователя и пароль для соединения. В Windows 7 и XP пароль сохраняется. Однако в Windows 10 имя пользователя и пароль не сохраняются.

Подскажите, пожалуйста, возможную причину по которой код не работает правильно в Windows 10.

Код:

#define UNICODE

#include <windows.h>
#include <ras.h>
#include "GetWinVersion.h"

#pragma comment(lib, "Rasapi32.lib")

DWORD RasConnection(wchar_t *user, wchar_t *password, wchar_t *entryName)
{
    RASENTRY re;
    DWORD RASNP_Ipv6 = 0;

    // создание подключения
    if (GetWinVersion() >= WINVER_VISTA)  RASNP_Ipv6 = 0x00000008;

    memset(&re, 0, sizeof(RASENTRY));
    re.dwSize = sizeof(RASENTRY);//sizeof(re);
    re.dwfOptions = RASEO_PreviewUserPw |
    RASEO_ModemLights |
    RASEO_ShowDialingProgress |
    RASEO_RemoteDefaultGateway |
    // RASEO_SwCompression |
//    RASEO_RequirePAP |
    RASEO_RequireCHAP |
    RASEO_RequireMsCHAP |
    RASEO_RequireMsCHAP2 |
    RASEO_SecureLocalFiles;
    re.dwfOptions2 = RASEO2_DontNegotiateMultilink | RASEO2_ReconnectIfDropped;
    re.dwfNetProtocols = RASNP_Ip | RASNP_Ipv6;
    re.dwFramingProtocol = RASFP_Ppp;
    re.dwType = RASET_Broadband;
    re.dwVpnStrategy = VS_Default;
    re.dwEncryptionType = ET_Optional;
    re.dwDialMode = RASEDM_DialAll;
    re.dwRedialCount = 99;
    re.dwRedialPause = 10;
//  lstrcpy(re.szLocalPhoneNumber, TEXT(""));
    lstrcpy(re.szDeviceType, RASDT_PPPoE);
    lstrcpy(re.szDeviceName, TEXT("PPPoE"));

    DWORD result = RasSetEntryProperties(NULL, entryName,
        &re, sizeof(re), NULL, 0);

    if (result != ERROR_SUCCESS) return result;

    // ввод логина и пароля
    RASCREDENTIALS ras_cred;

    memset(&ras_cred, 0, sizeof(RASCREDENTIALS));
    ras_cred.dwSize = sizeof(ras_cred);
    ras_cred.dwMask = RASCM_UserName | RASCM_Password;
    lstrcpy(ras_cred.szUserName, user);
    lstrcpy(ras_cred.szPassword, password);
    lstrcpy(ras_cred.szDomain, TEXT(""));

    result = RasSetCredentials(NULL, entryName, &ras_cred, FALSE);

    return result;
}
</ras.h></windows.h>
1 ответ

Paul A.

RASEO2_CacheCredentials

Windows 8 or later: If this flag is set, the user credentials will be cached at the end of a successful authentication.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa377274(v=vs.85).aspx

licensed under cc by-sa 3.0 with attribution.