C ++: отключение RequireCHAP и RequireMsCHAP2 в Windows RAS API

Я пишу программу, которая настроит VPN на компьютере пользователя. Мой системный администратор сказал мне, что страница безопасности VPN должна иметь эти Настройки безопасности проверены, а других нет.

я использовал этот код в качестве основы для моего собственного. Моя версия устанавливает почти все правильно, за исключением того, что она не может снять 2 поля под названием Challenge Handshake Authentication Protocol (CHAP) а также Microsoft CHAP Version 2 (MS-CHAP v2), Можно ли программно снять эти 2 флажка, оставляя Data Encryption выпадающий список установлен как Require Encryption? Вот мой код:

void createVPN()
{
DWORD size = 0;
RasGetEntryProperties(NULL, L"", NULL, &size, NULL, NULL);
LPRASENTRY pras = (LPRASENTRY)malloc(size);
memset(pras, 0, size);
pras->dwSize = size;
pras->dwType = RASET_Vpn;
pras->dwRedialCount = 1;
pras->dwRedialPause = 60;
pras->dwfNetProtocols = RASNP_Ip;
pras->dwEncryptionType = ET_Require;
wcscpy_s(pras->szLocalPhoneNumber, L"meraki.companyname.com");
wcscpy_s(pras->szDeviceType, RASDT_Vpn);
pras->dwfOptions = RASEO_RemoteDefaultGateway;

pras->dwVpnStrategy = VS_L2tpOnly;
pras->dwfOptions2 |= RASEO2_UsePreSharedKey;
pras->dwfOptions &= ~(RASEO_RequireCHAP | RASEO_RequireMsCHAP | RASEO_RequireMsCHAP2);//This should unset the CHAP flags, but it doesn't.

RasSetEntryProperties(NULL, L"CompanyName Meraki VPN", pras, pras->dwSize, NULL, 0);

RASCREDENTIALS ras_cre_psk = { 0 };
ras_cre_psk.dwSize = sizeof(ras_cre_psk);
ras_cre_psk.dwMask = RASCM_PreSharedKey;
wcscpy_s(ras_cre_psk.szPassword, L"redacted");
RasSetCredentials(NULL, L"CompanyName Meraki VPN", &ras_cre_psk, FALSE);

free(pras);
}

Я думаю, что установив pras->dwEncryptionType в ET_Require, что мешает RASEO_RequireCHAP и другие флаги CHAP не установлены, но в графическом интерфейсе Windows их можно снять и оставить Data Encryption установлен в Require Encryption, Мой системный администратор говорит мне, что соединение не будет работать, если установлен флажок CHAP или если Data Encryption не установлен в Require Encryption, Что я могу сделать?

0

Решение

Я наконец понял это. Вы должны установить RASEO_RequirePAP переключатель. Вот окончательная версия функции:

void createVPN()
{
DWORD size = 0;
RasGetEntryProperties(NULL, L"", NULL, &size, NULL, NULL);
RASENTRY rasEntry = {};
rasEntry.dwSize = sizeof(rasEntry);
rasEntry.dwType = RASET_Vpn;
rasEntry.dwRedialCount = 1;
rasEntry.dwRedialPause = 60;
rasEntry.dwfNetProtocols = RASNP_Ip;
rasEntry.dwEncryptionType = ET_Require;
wcscpy_s(rasEntry.szLocalPhoneNumber, L"meraki.enoble.com");
wcscpy_s(rasEntry.szDeviceType, RASDT_Vpn);
rasEntry.dwfOptions = RASEO_RemoteDefaultGateway;

rasEntry.dwVpnStrategy = VS_L2tpOnly;
rasEntry.dwfOptions2 |= RASEO2_UsePreSharedKey;
rasEntry.dwfOptions |= RASEO_RequirePAP;

RasSetEntryProperties(NULL, L"Enoble Meraki VPN", &rasEntry, rasEntry.dwSize, NULL, 0);

RASCREDENTIALS ras_cre_psk = { 0 };
ras_cre_psk.dwSize = sizeof(ras_cre_psk);
ras_cre_psk.dwMask = RASCM_PreSharedKey;
wcscpy_s(ras_cre_psk.szPassword, L"passport2k");
RasSetCredentials(NULL, L"Enoble Meraki VPN", &ras_cre_psk, FALSE);
}

Надеюсь, это кому-нибудь поможет.

2

Другие решения


По вопросам рекламы [email protected]