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.

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…


More by Author

Must Read