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