Windows Mobile の接続プロファイルを切り替える方法

H11TのBT接続とCLUB AIR-EDGE接続の切り替えツール作りたくて、いろいろ調べて方法はわかったものの、なかなか制作に着手できなくてものすごい勢いで忘れそうなのでメモ。

  • Windows Mobile では Configuration Service Provider というものを用いて、XMLベースでデバイスの各種設定にアクセスできる。
  • 一定のフォーマットに則ったXMLを DMProcessConfigXML というAPIに渡せば設定の取得や変更ができる。
  • .NETにはMicrosoft.WindowsMobile.Configuration.ConfigurationManager.ProcessConfiguration というマネージド実装がある。Microsoft.WindowsMobile.Configuration への参照設定が必要。

接続のプロファイルを切り替える大まかな流れはこんな感じ。

  1. CM_Networks のリストを取得し、定義されているネットワーク接続の一覧を取得する。
  2. 切り替え先のネットワークを取得した一覧から決めて、GUIDを得る。
  3. CM_ProxyEntries の一覧を取得する
  4. 取得した ProxyEntry のうち、DestId の GUID が {436EF144-B4FB-4863-A041-8F905A62C572}*1をみつける。
  5. それと全く同じように、切り替え先の接続設定のGUIDを埋めたエントリを登録する。元のエントリは削除する

実際にやるとしたらこんな感じだろうか。この例ではWILLCOMの設定をEMOBILEの設定に切り替えようとしている。

1.CM_Networks のリストを取得し、定義されているネットワーク接続の一覧を取得する。

リクエスト

 <wap-provisioningdoc>
   <characteristic-query type="CM_Networks" />
 </wap-provisioningdoc>

characteristic-query は取得だけおこない、設定はしない。

リプライ

 <wap-provisioningdoc>
   <characteristic type="CM_Networks">
     <characteristic type="EMOBILE">
       <parm name="DestId" value="{EMOBILE GUID}" />
       <parm name="Secure" value="0" />
     </characteristic>
     <characteristic type="センタ名称設定">
       <parm name="DestId" value="{WILLCOM GUID}" />
       <parm name="Secure" value="0" />
     </characteristic>
     (中略)
     <characteristic type="インターネット設定">
       <parm name="DestId" value="{436EF144-B4FB-4863-A041-8F905A62C572}" />
       <parm name="Secure" value="0" />
     </characteristic>
   </characteristic>
 </wap-provisioningdoc>

3.CM_ProxyEntries の一覧を取得する

リクエスト

 <wap-provisioningdoc>
   <characteristic-query type="CM_ProxyEntries" />
 </wap-provisioningdoc>

リプライ

 <wap-provisioningdoc>
   <characteristic type="CM_ProxyEntries">
     <characteristic type="HTTP-{WILLCOM GUID}">
       <parm name="SrcId" value="{WILLCOM GUID}" />
       <parm name="DestId" value="{436EF144-B4FB-4863-A041-8F905A62C572}" />
       <parm name="Proxy" value="new-inet:1159" />
       <parm name="Override" value="" />
       <parm name="Enable" value="1" />
       <parm name="Type" value="0" />
       <parm name="Username" value="" />
       <parm name="Password" value="" />
       <parm name="ExtraInfo" value="" />
     </characteristic>
     (中略)
   </characteristic>
 </wap-provisioningdoc>

だいたいはもう一つ、社内ネットワーク設定用のものがあるはず。そのうち、DestId が {436EF144-B4FB-4863-A041-8F905A62C572} になっているものを判別する。

5.それと全く同じように、切り替え先の接続設定のGUIDを埋めたエントリを登録する。元のエントリは削除する

リクエスト

 <wap-provisioningdoc>
   <characteristic type="CM_ProxyEntries">
     <nocharacteristic type="HTTP-{WILLCOM GUID}" />
     <characteristic type="HTTP-{EMOBILE GUID}">
       <parm name="SrcId" value="{EMOBILE GUID}" />
       <parm name="DestId" value="{436EF144-B4FB-4863-A041-8F905A62C572}" />
       <parm name="Proxy" value="new-inet:1159" />
       <parm name="Override" value="" />
       <parm name="Enable" value="1" />
       <parm name="Type" value="0" />
       <parm name="Username" value="" />
       <parm name="Password" value="" />
       <parm name="ExtraInfo" value="" />
     </characteristic>
   </characteristic>
 </wap-provisioningdoc>

3. の取得結果のうち、GUIDだけ変えた同じエントリを作る。設定の追加は characteristic、削除は nocharacteristic。

*1:インターネットを表すGUID。