void ForceDisConnect() { // 接続を強制開放 RASCONN* lpConn = new RASCONN[1]; lpConn->dwSize = sizeof(RASCONN); DWORD cb = lpConn->dwSize; DWORD cbConns = 0; DWORD ret = RasEnumConnections(lpConn, &cb, &cbConns); if (ret == 603) { delete[] lpConn; lpConn = (RASCONN*)new char[cb]; lpConn->dwSize = sizeof(RASCONN); RasEnumConnections(lpConn, &cb, &cbConns); } for (int i = 0; i < cbConns; ++i) { RasHangUp(lpConn[i].hrasconn); RASCONNSTATUS status; status.dwSize = sizeof(RASCONNSTATUS); while (1) { if (RasGetConnectStatus(lpConn[i].hrasconn, &status) == ERROR_INVALID_HANDLE) break; // 1秒休憩 Sleep(1000); } } delete[] lpConn; // 内部状態を更新 HANDLE hConn = NULL; CONNMGR_CONNECTIONINFO ConnInfo = {0}; ConnInfo.cbSize = sizeof(ConnInfo); ConnInfo.bDisabled = true; ConnMgrEstablishConnectionSync(&ConnInfo, &hConn, INFINITE, NULL); ConnMgrReleaseConnection(hConn, FALSE); }
WindowsMobileの回線強制切断関数。
次いつ使うかわからんからおいとく。