Форум программистов, компьютерный форум CyberForum.ru

Windows PPTP rasdial: не с первого раза.. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
ibmed
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 5
13.08.2009, 17:31     Windows PPTP rasdial: не с первого раза.. #1
Доброго дня
Похоже, какая-то грабля в виндовз.. Надеюсь, кто-то знает, как обходится..

Задача: из программы на С++ создавать и запускать PPTP подключение.
Проблема: если на момент запуска этой программы на компьютере не существует ни одного РРТР подключения - то подключение из программы создается, но не устанавливается (ошибка 800).

При этом задача реализации подключения из программы была решена двумя разными способами:
1) Способ от МС для юзеров: создать pbk-файл и его копировать на машинку, с которой нужно установить подключение, вызывая подключение не из стандартной телефонной книги, а из указанной.
2) Способ создания подключения в телефонной книге по умолчанию средствами С++ (RasSetEntryProperties).

Насколько я понял:
- способом №1 оно не подключается вовсе при указанных условиях
- способом №2 оно _обычно_ не подключается _с первого раза_; т.е. со второго (иногда третьего, четвертого) раза оно подключается, но не с первого. А это, разумеется, крайне важно для правильной работы программы..

Пробовал добавлять паузу между процедурами создания подключения и его вызовом.
Не помогает.

Хелп ми

Добавлено через 1 час 42 минуты 32 секунды
Когда не подключается по способу №2 выдается ошибка 678 (нет ответа).
При этом на РРТР сервер не приходит ни одного запроса от клиента. Т.е. проблема явно внутри винды..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2009, 17:31     Windows PPTP rasdial: не с первого раза..
Посмотрите здесь:

C++ Если кватрат второго числа меньше квадрата первого числа, то увеличить второе число в 3 раза
C++ Определить IP-адрес PPTP-адаптера под Windows?
Найти номер первого максимального элемента среди отрицательных элементов, расположенных до первого элемента, большего Т. C++
Все положительные элементы массива, расположенные правее первого нулевого элемента, увеличить в два раза C++
Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза. C++
C++ Увеличить все элементы этого массива начиная с первого положительного элемента в два раза.
Файлы. Программа, которая определяет если такой момент, что два раза вошли по одному пропуску или два раза вышли по одному (выводит все время истину) C++
Ввести целое двузначное число, 2ю цифру числа увеличить в 2 раза, 1ю - уменьшить в 2 раза C++
C++ Выходной поток первого числа, второго , суммы первого и второго чисел
Найти номер первого максимального элемента среди отрицательных элементов, расположенных до первого элемента, большего заданного числа Т C++
Вывести на экран номера первого положительного и первого отрицательного элементов C++
C++ Найти наибольшее число в массиве, которое повторяется по крайней мере 2 раза, но не более чем 3 раза

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alexandoros
226 / 64 / 4
Регистрация: 02.06.2009
Сообщений: 280
13.08.2009, 21:38     Windows PPTP rasdial: не с первого раза.. #2
а код где?
ibmed
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 5
13.08.2009, 22:32  [ТС]     Windows PPTP rasdial: не с первого раза.. #3
Функции создания и запуска:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
int create_vpn_connection(LPSTR title)
{ 
    OSVERSIONINFOEX OS_version_info;
    int bOsVersionInfoEx;
    int rasentry_struct_size = sizeof(RASENTRY);
 
    ZeroMemory(&OS_version_info, sizeof(OSVERSIONINFOEX));
    OS_version_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
 
    if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &OS_version_info)) )
    {
        OS_version_info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
        if (! GetVersionEx( (OSVERSIONINFO *) &OS_version_info) )
            return 0;
    }
 
    if(OS_version_info.dwPlatformId == VER_PLATFORM_WIN32_NT)
    {
        if ( (OS_version_info.dwMajorVersion == 5 && OS_version_info.dwMinorVersion == 0) 
                || OS_version_info.dwMajorVersion <= 4)
            rasentry_struct_size = 2088;
    }
    else 
        return 0; 
    
 
    RASENTRY rasEntry;
    memset(&rasEntry, 0, rasentry_struct_size);
    rasEntry.dwSize = rasentry_struct_size;
 
    rasEntry.dwFramingProtocol = RASFP_Ppp;
    rasEntry.dwfNetProtocols = RASNP_Ip;
    
    rasEntry.dwfOptions =  RASEO_ShowDialingProgress | RASEO_PreviewUserPw | RASEO_SecureLocalFiles;
    rasEntry.dwfOptions2 = RASEO2_DisableNbtOverIP;
 
    rasEntry.dwRedialCount = 3; 
    rasEntry.dwRedialPause = 1; 
 
    rasEntry.dwEncryptionType = ET_Optional;   
    rasEntry.dwType = RASET_Vpn; 
    rasEntry.dwVpnStrategy = VS_PptpOnly;
 
    strcpy(rasEntry.szLocalPhoneNumber, VPNSERVER);
 
    strcpy(rasEntry.szDeviceName, TEXT("VPN"));
    strcpy(rasEntry.szDeviceType, RASDT_Vpn);
    
 
    DWORD connectionCreated = RasSetEntryProperties(NULL, title, &rasEntry, sizeof(rasEntry), NULL, 0);
    if( connectionCreated == ERROR_SUCCESS) {
            return 1;
    }; 
 
    return 0;
}
 
int start_vpn(HRASCONN * connection)
{
    RASDIALPARAMS dial_params;
    dial_params.dwSize = sizeof(RASDIALPARAMS);
    strcpy(dial_params.szEntryName, VPNNAME);
    strcpy(dial_params.szPhoneNumber,"");
    strcpy(dial_params.szCallbackNumber, "");
    strcpy(dial_params.szUserName, VPNUSER);
    strcpy(dial_params.szPassword, VPNPASSWD);
    strcpy(dial_params.szDomain, "");
    dial_params.dwSubEntry = 0;
    dial_params.dwCallbackId = 0;
    * connection = NULL;
    return RasDial(NULL, NULL, &dial_params, 0, NULL, connection);
}
Yandex
Объявления
13.08.2009, 22:32     Windows PPTP rasdial: не с первого раза..
Ответ Создать тему
Опции темы

Текущее время: 06:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru