VPN Verbindung aufbauen



  • Du solltest etwas besser die Doku lesen 😉

    Pointer to a RASDIALPARAMS structure.
    On input, the dwSize member specifies the size of the RASDIALPARAMS structure, and the szEntryName member specifies a valid phone-book entry.

    Fazit:

    RASDIALPARAMS rdParams;
    ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
    rdParams.dwSize = sizeof(RASDIALPARAMS);
    


  • Ok,
    viel dank, dass du mir hilfst. Ich hab dies noch eingefüght, jetzt krieg ich den ErrorCode 623, kannst du noch einen anderen Fehler erkennen, oder hast du zumindest ne Ahnung, was dieser ErrorCode zu bedeuten hat?



  • 623 Der Telefonbucheintrag für diese Verbindung konnte nicht gefunden werden.



  • Versuch mal mit GetLastError() mehr Informationen zu bekommen.

    Eventuelle Fehlercodes kannst du hier nachschlagen, diese haben aber nichts mit deinem Fehlercode 623 zu tun.
    Sie betreffen nur GetLastError().

    Zerebus



  • du hast die RASDIALPARAMS struktur ja gar nicht richtig ausgefüllt 👎 👎



  • Ok, danke.
    @Zerebus GetLastError() habe ich scho versucht, gibt allerdings 0 zurück. Aber den Fehler hinter diesem Fehler Code wurde mir ja mitgeteilt.
    Die Sache mit dem Telefonbucheintrag hab ich eh nicht so ganz kapiert. Das macht mir eher den Anschein, als könnte ich so eine Dial-Up Verbindung herstellen, ich möchte aber die VPN Verbindung normal über mein Cabel Internet Verbindung herstellen, so wie das auch passiert, wenn ich auf Start->Einstellungen->Netzwerkverbindungen->VPNblablabla klicke.



  • Und wie füll ich die richtig?



  • Also, mit dem folgenden Code bekommst Du zuerst mal raus wie den der Eintrag heisst:

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <ras.h>
    #include <raserror.h>
    #pragma comment(lib, "Rasapi32.lib")
    
    int _tmain()
    {
      DWORD dwCb = sizeof(RASENTRYNAME);
      DWORD dwErr = ERROR_SUCCESS;
      DWORD dwRetries = 5;
      DWORD dwEntries = 0;
      RASENTRYNAME* lpRasEntryName = NULL;
    
      //
      // Loop through in case the information from RAS changes between calls.
      //
      while (dwRetries--)
      {
        //
        // If the memory is allocated, free it.
        //
        if (NULL != lpRasEntryName)
        {
          HeapFree(GetProcessHeap(), 0, lpRasEntryName);
          lpRasEntryName = NULL;
        }
        //
        // Allocate the size need for the RAS structure.
        //
        lpRasEntryName = (RASENTRYNAME*) HeapAlloc(GetProcessHeap(), 0, dwCb);
        if (NULL == lpRasEntryName)
        {
          dwErr = ERROR_NOT_ENOUGH_MEMORY;
          break;
        }
        //
        // Set the structure size for version checking purposes.
        //
        lpRasEntryName->dwSize = sizeof(RASENTRYNAME);
        //
        // Call the RAS API, bail on the loop if we are successful or an unknown
        // error occurs.
        //
        dwErr = RasEnumEntries(
          NULL,
          NULL,
          lpRasEntryName,
          &dwCb,
          &dwEntries);
        if (ERROR_BUFFER_TOO_SMALL != dwErr)
        {
          break;
        }
      }
      //
      // In the success case print the names of the entries.
      //
      if (ERROR_SUCCESS == dwErr)
      {
        DWORD i;
    
        printf("Phone-book entries in the default phone book:\n\n");
        for (i = 0; i < dwEntries; i++)
        {
          _tprintf(_T("'%s'\n"), lpRasEntryName[i].szEntryName);
        }
      }
      else
      {
        printf("RasEnumEntries failed: Error = %d\n", dwErr);
      }
      //
      // Free the memory if necessary.
      //
      if (NULL != lpRasEntryName)
      {
        HeapFree(GetProcessHeap(), 0, lpRasEntryName);
        lpRasEntryName = NULL;
      }
    }
    


  • Und wählen kannst Du dann wie folgt (bitte anstelle "VPN-Test" den passenden Namen eintragen!):

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <ras.h>
    #include <raserror.h>
    #pragma comment(lib, "Rasapi32.lib")
    
    int _tmain()
    {
      RASDIALPARAMS rdParams;
      ZeroMemory(&rdParams, sizeof(RASDIALPARAMS)); 
      rdParams.dwSize = sizeof(RASDIALPARAMS);
      _tcscpy(rdParams.szEntryName, _T("VPN-Test"));
    
      BOOL pPassword; 
      DWORD dwError = RasGetEntryDialParams(NULL, &rdParams, &pPassword); 
      if(dwError != 0)
      { 
        _tprintf(_T("Can't read DialParams (%d)"), dwError); 
        return 1;
      } 
      HRASCONN con = NULL;
      dwError = RasDial(NULL, NULL, &rdParams, 0, NULL, &con); 
      if(dwError != 0) 
      { 
        _tprintf(_T("Can't establishe the connection (%d)"), dwError); 
        return 2; 
      } 
    }
    


  • Funktioniert bestens, tausend dank.👍
    Wie kann ich die Verbindung wieder trennen? Und gibts es eventuel noch eine Möglichkeit, dass einrichten der Verbindung meinem Programm zu überlassen?



  • Bitteschön...

    Aber es ist eigentlich nicht zuviel verlangt, wenn man sich zumindest die Hilfe durchliest... dann wären Deine Fragen bzgl. dem Auflegen schon beantwortet...
    http://msdn.microsoft.com/library/en-us/rras/rras/rasdial.asp

    Bzgl. dem neu anlegen: Es ist nicht ganz einfach... schau Dir mal alle Funktionen an die es da gibt...
    http://msdn.microsoft.com/library/en-us/rras/rras/remote_access_service_functions.asp



  • Okay, werde ich machen, danke nochmals.


Anmelden zum Antworten