我目前正在使用的函数:枚举当前所有连接,然后挂断(我只开了3个内存,节省内存) BOOL CDialerDlg::DisconnectRas() { bool bOk = false; RASCONN ras[3]; DWORD dSize,dNumber,dCount; ras[0].dwSize = sizeof(RASCONN); dSize = sizeof( ras ); // Get active RAS - Connection if( RasEnumConnections( ras, &dSize, &dNumber ) == 0 ) { bOk = true; for( dCount = 0; dCount < dNumber; dCount++ ) { // Hang up that connection if( RasHangUp(ras[dCount].hrasconn) != 0 ) { bOk = false; break; } } } return bOk; }
//from msdn DWORD CloseRasConnections () { int index; // An integer index TCHAR szError[100]; // Buffer for error codes DWORD dwError, // Error code from a function call dwRasConnSize, // Size of RasConn in bytes dwNumConnections; // Number of connections found RASCONN RasConn[20]; // Buffer for connection state data // Assume the maximum number of entries is // 20. // Assume no more than 20 connections. RasConn[0].dwSize = sizeof (RASCONN); dwRasConnSize = 20 * sizeof (RASCONN); // Find all connections. if (dwError = RasEnumConnections (RasConn, &dwRasConnSize, &dwNumConnections)) { wsprintf (szError, TEXT("RasEnumConnections Error: %ld"), dwError); return dwError; } // If there are no connections, return zero. if (!dwNumConnections) { wsprintf (szError, TEXT("No open RAS connections")); return 0; } // Terminate all of the remote access connections. for (index = 0; index < (int)dwNumConnections; ++index) { if (dwError = RasHangUp (RasConn[index].hrasconn)) { wsprintf (szError, TEXT("RasHangUp Error: %ld"), dwError); return dwError; } } return 0; }
if(m_hRasConn != NULL)
{
RasHangUp(m_hRasConn);
m_hRasConn = NULL;
Sleep(3000);
}
BOOL CDialerDlg::DisconnectRas()
{
bool bOk = false;
RASCONN ras[3];
DWORD dSize,dNumber,dCount; ras[0].dwSize = sizeof(RASCONN);
dSize = sizeof( ras ); // Get active RAS - Connection
if( RasEnumConnections( ras, &dSize, &dNumber ) == 0 )
{
bOk = true;
for( dCount = 0; dCount < dNumber; dCount++ )
{
// Hang up that connection
if( RasHangUp(ras[dCount].hrasconn) != 0 )
{
bOk = false;
break;
}
}
}
return bOk;
}
DWORD CloseRasConnections ()
{
int index; // An integer index
TCHAR szError[100]; // Buffer for error codes
DWORD dwError, // Error code from a function call
dwRasConnSize, // Size of RasConn in bytes
dwNumConnections; // Number of connections found
RASCONN RasConn[20]; // Buffer for connection state data
// Assume the maximum number of entries is
// 20. // Assume no more than 20 connections.
RasConn[0].dwSize = sizeof (RASCONN);
dwRasConnSize = 20 * sizeof (RASCONN); // Find all connections.
if (dwError = RasEnumConnections (RasConn, &dwRasConnSize,
&dwNumConnections))
{
wsprintf (szError, TEXT("RasEnumConnections Error: %ld"), dwError);
return dwError;
} // If there are no connections, return zero.
if (!dwNumConnections)
{
wsprintf (szError, TEXT("No open RAS connections"));
return 0;
} // Terminate all of the remote access connections.
for (index = 0; index < (int)dwNumConnections; ++index)
{
if (dwError = RasHangUp (RasConn[index].hrasconn))
{
wsprintf (szError, TEXT("RasHangUp Error: %ld"), dwError);
return dwError;
}
} return 0;
}