tmytのらくがき

個人の日記レベルです

void ForceDisConnect();

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の回線強制切断関数。
次いつ使うかわからんからおいとく。