Most Politically Correct Way To Call RasHangUp

Environment: VC5-6, Win9x-NT4

Problem

The RasHangUp function terminates a remote access connection. The connection is specified with a RAS connection handle. The function releases all RASAPI32.DLL resources associated with the handle. (MSDN)

Then, in remarks, it is mentioned that application should sleep about 3 seconds, or until RasGetConnectStatus returns ERROR_INVALID_HANDLE. In article Disconnect Dialup Connection author don't carry about that but if you realy just call RasHangUp and exit - you can "hang" both modem and rnaapp (application that implement Dial-Up Service). Furthermore, if you do everything as described in MSDN you still may receive the following error message:
RNAAPP caused an invalid page fault in module xxxx.

Solution

This problem was a besetting sin when I wrote my Dial-up dialer program, until I found solution that work in my program now:


    DWORD dwRet;
    RASCONNSTATUS rStatus;
    ZeroMemory(&rStatus, sizeof(RASCONNSTATUS));
    rStatus.dwSize = sizeof(RASCONNSTATUS);
    dwRet = RasGetConnectStatus(hRasConn, &rStatus);
    if (dwRet != ERROR_INVALID_HANDLE)
    {
        RasHangUp(hRasConn);  // hRasConn - valid handle to the RAS connection
        MSG msg;
        while (dwRet != ERROR_INVALID_HANDLE)
        {
            while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
        dwRet = RasGetConnectStatus(hRasConn, &rStatus);
    }

Actually, I remove some unimportant shuff so check this code before using...

History



Comments

  • cut + paste ???

    Posted by Legacy on 08/10/1999 12:00am

    Originally posted by: homer

    don't you mean this ...
    
    

    DWORD dwRet;
    RASCONNSTATUS rStatus;
    ZeroMemory(&rStatus, sizeof(RASCONNSTATUS));
    rStatus.dwSize = sizeof(RASCONNSTATUS);
    dwRet = RasGetConnectStatus(hRasConn, &rStatus);
    if (dwRet != ERROR_INVALID_HANDLE)
    {
    RasHangUp(hRasConn); // hRasConn - valid handle to the RAS connection
    MSG msg;
    while (dwRet != ERROR_INVALID_HANDLE)
    {
    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    dwRet = RasGetConnectStatus(hRasConn, &rStatus);
    }
    }

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

  • On-demand Event Event Date: August 27, 2015 With the cloud enabling companies to spin up servers and stand up data stores more quickly, mobile apps can be created faster, reducing the time-to-value. But three major obstacles stand in the way for many organizations: The backlog of app project requests confronting every enterprise regardless of their internal app development capabilities Finding and employing better, faster tools to speed and simplify the process of developing those apps. The emergence of …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date