ConnectionManager で確実に切断する

W-ZERO3のダイアルアップは ConnectionManager API で行いますが、ConnMgrReleaseConnection で開放にしても、多くの場合切断されません。

これは、W-SIM の COM ポートにアクセスして位置情報を取得するアプリケーションとしては致命的なので、どうしてもダイアルアップを切断したいときは RasEnumConnections で接続を列挙して RasHangUp で切断するという昔ながらの方法を取ることによって無理やり切断してやります。

すると、今度はその次に実行した ConnMgrEstablishConnection が多くの場合失敗します(特に、RasHangUpしてから時間があまりたっていない場合)。おそらく、ConnectionManagerの内部状態が下位のRASの状態と一致しなくなったために起こっているものだと推測しています。

これを防ぐには、RasHangUp でダイアルアップを切断した後に bDisabled = true で 、ConnMgrEstablishConnection を呼び出してすぐに ConnMgrReleaseConnection を実行します。これにより、ConnectionManagerの内部状態が更新されるらしく、ConnMgrEstablishConnection でうまく接続を行えます。