Most Politically Correct Way To Call RasHangUp

Environment: VC5-6, Win9x-NT4


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.


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;
    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))
        dwRet = RasGetConnectStatus(hRasConn, &rStatus);

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


This article was originally published on August 10th, 1999

Most Popular Programming Stories

More for Developers

RSS Feeds

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