IMbnMultiCarrier
COM公式ドキュメント
このインターフェイスは、対応するモバイルブロードバンドデバイスのマルチキャリア機能を公開します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
マルチキャリアデバイスのホームプロバイダーを更新します。
| homeProvider | MBN_PROVIDER2* | in | ホームプロバイダーを格納する MBN_PROVIDER2 構造体です。 注意
SignalStrength および SignalError メンバーは 0 でなければなりません。 |
| requestID | DWORD* | out | このリクエストに対してオペレーティングシステムが設定するリクエストIDへのポインターです。OnSetHomeProviderComplete からの非同期応答には、この同じ requestID が含まれます。 このリクエストに対してオペレーティングシステムが設定するリクエストIDへのポインターです。非同期応答には、この同じ requestID が含まれます。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
このシステムでモバイルブロードバンドサービスが実行されていません。 |
| 無効なインターフェイスです。モバイルブロードバンドデバイスがシステムから取り外された可能性があります。 | |
|
無効なインターフェイスです。多くの場合、モバイルブロードバンドデバイスがシステムから取り外されています。 |
|
この操作はデバイスでサポートされていません。マルチキャリアをサポートしていないデバイスがこの値を返すことがあります。 |
解説(Remarks)
SetHomeProvider メソッドは、インターフェイスのホームプロバイダーの更新を開始します。これは非同期操作であり、メソッド呼び出しはただちに戻ります。このメソッドが S_OK で正常に戻った場合、Windows は IMbnMultiCarrierEvents の OnSetHomeProviderComplete メソッドを呼び出して、この操作の完了ステータスを呼び出し元アプリケーションに通知します。
その後、デバイスは自動的に新しいネットワークに登録された状態で起動し、登録状態の変更を通知します。SetHomeProvider を再度使用して新しいホームプロバイダーを設定しない限り、デバイスは Windows の再起動後もこの新しいホームネットワークに登録された状態で起動し続けます。
この操作が完了する前にデバイスがシステムから取り外された場合、完了通知が呼び出し元アプリケーションに届く保証はありません。
マルチキャリアデバイスについて、現在のエリアで表示される契約済みプロバイダーの一覧を、現在登録されているプロバイダーを除いて取得します。
| preferredMulticarrierProviders | SAFEARRAY** | out | 優先プロバイダーの一覧を格納する MBN_PROVIDER2 構造体の配列へのポインターです。このメソッドが S_OK 以外の値を返した場合、preferredMultiCarrierProviders は NULL になります。GetPreferredProviders が S_OK を返した場合、呼び出し元アプリケーションは SafeArrayDestroy を呼び出して、割り当てられたメモリを解放する必要があります。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。preferredMultiCarrierProviders に有効な値が格納されています。 | |
| 情報は利用できません。モバイルブロードバンドサービスは現在、優先プロバイダーの一覧を取得中です。呼び出し元アプリケーションは、IMbnMultiCarrierEvents の OnPreferredProvidersChange メソッドに登録することで、データが利用可能になったときに通知を受け取ることができます。 | |
| この操作には、デバイスへの PIN の入力が必要です。 | |
| SIM が挿入されていません。 | |
| 不正な SIM がデバイスに挿入されています。 | |
|
SIM またはデバイスメモリから読み取ることができません。たとえば、SIM に優先プロバイダー情報がプロビジョニングされていない場合です。 |
|
デバイスはこの操作をサポートしていません。CDMA デバイスは常にこの値を返します。 |
|
この操作はデバイスでサポートされていません。マルチキャリアをサポートしていないデバイスがこの値を返すことがあります。 |
解説(Remarks)
GetPreferredProviders は、インターフェイスの優先プロバイダー一覧に格納されているプロバイダーの一覧を返します。
回復可能なエラーである E_MBN_PIN_REQUIRED、E_MBN_SIM_NOT_INSERTED、E_MBN_BAD_SIM の場合、モバイルブロードバンドサービスは、エラー状態が解消されたときにデバイスへプロバイダー一覧を再度問い合わせます。たとえば、プロバイダー一覧を取得するためにデバイスへの PIN の入力が必要な場合、GetPreferredProviders は E_MBN_PIN_REQUIRED を返します。アプリケーションが PIN を入力してデバイスのロックを解除すると、モバイルブロードバンドサービスは再度この情報をデバイスから取得しようとします。
回復可能なエラーが発生した後に Windows がプロバイダー一覧を取得するためにデバイスへ問い合わせている間、GetPreferredProviders はただちに E_PENDING を返します。新しい問い合わせが完了すると、適切なコールバックメソッドを使用して呼び出し元アプリケーションに通知が送信されます。たとえば、PIN によるロック解除操作が成功した後は、IMbnPinEvents の OnEnterComplete メソッドが呼び出されます。
モバイルブロードバンドサービスは、IMbnMultiCarrier の OnPreferredProvidersChange メソッドを呼び出して、新しい問い合わせのステータスをアプリケーションに通知します。
場合によっては、デバイスの優先プロバイダー一覧が SMS または OTA(over-the-air update、無線経由の更新)によってネットワーク経由で更新されることがあります。Windows は、IMbnMultiCarrier の OnPreferredProvidersChange メソッドを呼び出して、優先プロバイダー一覧の変更をアプリケーションに通知します。
優先プロバイダーの一覧は、ユーザーが複数の契約(少なくとも 2 つ以上)を持っている場合、またはデバイスが優先ネットワーク向けに事前プロビジョニングされていて、いずれかのネットワークのカバレッジエリア内にある場合に利用できます。ユーザーが複数のネットワークに契約していても、それらのカバレッジエリア外にいる場合は、この一覧が空になることがあります。この一覧には、ユーザーが契約している、またはデバイスが事前プロビジョニングされている、現在表示されているすべてのネットワークが含まれます(ただし現在登録されているネットワークは除きます)。
プロビジョニングによって、マルチキャリアデバイスの既存の優先一覧に新しいホームプロバイダーが追加されることもあります。これは SetHomeProvider を使用して行われます。
マルチキャリアデバイスについて、現在のエリアで表示されるプロバイダーの一覧を、優先プロバイダーおよび登録済みプロバイダーを除いて取得します。
| age | DWORD* | out | デバイスの表示プロバイダー一覧が最後に更新されてからの経過時間(秒単位)へのポインターです。 |
| visibleProviders | SAFEARRAY** | out | インターフェイスのプロバイダー一覧を格納する MBN_PROVIDER2 構造体の配列へのポインターです。このメソッドが S_OK 以外の値を返した場合、visibleProviders は NULL になります。GetVisibleProviders が S_OK を返した場合、呼び出し元アプリケーションは SafeArrayDestroy を呼び出して、割り当てられたメモリを解放する必要があります。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。visibleProviders に有効な値が格納されています。情報の経過時間に基づいて、呼び出し元アプリケーションは ScanNetwork を新たに呼び出すかどうかを判断できます。 | |
| 情報は利用できません。アクティブなネットワークスキャンが進行中です。呼び出し元アプリケーションは、IMbnMultiCarrierEvents の OnScanNetworkComplete メソッドに登録することで、デバイスの機能が利用可能になったときに通知を受け取ることができます。 | |
| 表示ネットワーク一覧に関するモバイルブロードバンドのキャッシュが無効です。呼び出し元アプリケーションは、ScanNetwork を呼び出してキャッシュを作成する必要があります。 | |
|
この操作はデバイスでサポートされていません。マルチキャリアをサポートしていないデバイスがこの値を返すことがあります。 |
解説(Remarks)
このメソッドは、現在表示されているプロバイダーの一覧を返します。CDMA デバイスは、優先ローミング一覧(PRL)内のいずれかのネットワークが利用可能な場合、自身のホームプロバイダーのみを報告します。
頻繁なネットワークスキャン操作を避けるため、Windows は最近のスキャン操作の一覧を保持しており、プロバイダー一覧はキャッシュされた一覧から返されます。
アプリケーションは、ScanNetwork の完了時にこのメソッドを呼び出して、表示プロバイダーの一覧を取得できます。
この一覧には、ユーザーの現在地で利用可能な、現在表示されているすべてのネットワークが含まれます(ただし現在登録されているプロバイダーが報告するものと優先プロバイダーの一覧は除きます)。この一覧には、ユーザーがまだ契約していないネットワークのエントリが含まれます。この一覧により、ユーザーは新たに契約できる可能性のあるネットワークの選択肢を追加で得ることができます。
マルチキャリアデバイスがサポートするセルラークラスの一覧を取得します。
| cellularClasses | SAFEARRAY** | out | サポートされているセルラークラスの一覧を格納する MBN_CELLULAR_CLASS 列挙型の配列へのポインターです。このメソッドが S_OK 以外の値を返した場合、cellularClass は NULL になります。GetSupportedCellularClasses が S_OK を返した場合、呼び出し元アプリケーションは SafeArrayDestroy を呼び出して、割り当てられたメモリを解放する必要があります。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
このシステムでモバイルブロードバンドサービスが実行されていません。 |
| 無効なインターフェイスです。モバイルブロードバンドデバイスがシステムから取り外された可能性があります。 | |
|
無効なインターフェイスです。多くの場合、モバイルブロードバンドデバイスがシステムから取り外されています。 |
|
この操作はデバイスでサポートされていません。マルチキャリアをサポートしていないデバイスがこの値を返すことがあります。 |
マルチキャリアデバイスの現在のセルラークラスを取得します。
| currentCellularClass | MBN_CELLULAR_CLASS* | out |
現在のセルラークラスを指定する MBN_CELLULAR_CLASS 列挙型へのポインターです。このメソッドが S_OK 以外の値を返した場合、currentCellularClass は NULL になります。GetCurrentCellularClass が S_OK を返した場合、呼び出し元アプリケーションは SafeArrayDestroy を呼び出して、割り当てられたメモリを解放する必要があります。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
このシステムでモバイルブロードバンドサービスが実行されていません。 |
| 無効なインターフェイスです。モバイルブロードバンドデバイスがシステムから取り外された可能性があります。 | |
|
無効なインターフェイスです。多くの場合、モバイルブロードバンドデバイスがシステムから取り外されています。 |
|
この操作はデバイスでサポートされていません。マルチキャリアをサポートしていないデバイスがこの値を返すことがあります。 |
マルチキャリアデバイスの表示プロバイダー一覧を取得するために、ネットワークをスキャンします。
| requestID | DWORD* | out | このリクエストに対してオペレーティングシステムが設定するリクエストIDへのポインターです。OnScanNetworkComplete からの非同期応答には、この同じ requestID が含まれます。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
このシステムでモバイルブロードバンドサービスが実行されていません。 |
| インターフェイスが無効です。多くの場合、モバイルブロードバンドデバイスがシステムから取り外されたことが原因です。 | |
|
インターフェイスが無効です。多くの場合、モバイルブロードバンドデバイスがシステムから取り外されたことが原因です。 |
|
この操作はデバイスでサポートされていません。マルチキャリアをサポートしていないデバイスがこの値を返すことがあります。 |
解説(Remarks)
このメソッドは、ネットワークスキャン操作を開始します。正常に完了すると、オペレーティングシステムの表示プロバイダーのキャッシュが作成され、アプリケーションは IMbnMultiCarrier の GetVisibleProviders メソッドを呼び出して、表示ネットワークの一覧を取得できます。
これは時間のかかる操作です。そのため、アプリケーションはまず GetVisibleProviders を呼び出し、キャッシュされた情報が古い場合にのみ ScanNetwork を呼び出す必要があります。
これは非同期操作であり、ScanNetwork はただちに戻ります。このメソッドが正常に戻った場合(S_OK で)、スキャン操作の完了時に、オペレーティングシステムは IMbnMultiCarrierEvents の OnScanNetworkComplete メソッドを呼び出して、操作の完了をアプリケーションに通知します。
この操作が完了する前にデバイスがシステムから取り外された場合、完了通知がアプリケーションに届く保証はありません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMbnMultiCarrier "{DCBBBAB6-2020-4BBB-AAEE-338E368AF6FA}" #usecom global IMbnMultiCarrier IID_IMbnMultiCarrier "{}" #comfunc global IMbnMultiCarrier_SetHomeProvider 3 var,var #comfunc global IMbnMultiCarrier_GetPreferredProviders 4 var #comfunc global IMbnMultiCarrier_GetVisibleProviders 5 var,var #comfunc global IMbnMultiCarrier_GetSupportedCellularClasses 6 var #comfunc global IMbnMultiCarrier_GetCurrentCellularClass 7 var #comfunc global IMbnMultiCarrier_ScanNetwork 8 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMbnMultiCarrier "{DCBBBAB6-2020-4BBB-AAEE-338E368AF6FA}" #usecom global IMbnMultiCarrier IID_IMbnMultiCarrier "{}" #comfunc global IMbnMultiCarrier_SetHomeProvider 3 sptr,sptr #comfunc global IMbnMultiCarrier_GetPreferredProviders 4 sptr #comfunc global IMbnMultiCarrier_GetVisibleProviders 5 sptr,sptr #comfunc global IMbnMultiCarrier_GetSupportedCellularClasses 6 sptr #comfunc global IMbnMultiCarrier_GetCurrentCellularClass 7 sptr #comfunc global IMbnMultiCarrier_ScanNetwork 8 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。