Most Politically Correct Way To Call RasHangUp | CodeGuru

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 […]

Written By
CodeGuru Staff
CodeGuru Staff
Aug 10, 1999
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

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…

Advertisement

History

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.