IMbnDeviceService
COM公式ドキュメント
特定の Mobile Broadband デバイス上のデバイスサービスと通信できるようにします。
解説(Remarks)
IMbnDeviceService オブジェクトは、IMbnDeviceServicesContext インターフェイスの GetDeviceService メソッドを呼び出すことで提供されます。
メソッド 12
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Mobile Broadband デバイスサービスがサポートするコマンド ID の一覧を取得します。
| requestID | DWORD* | out | この要求を識別するために Mobile Broadband サービスによって割り当てられる一意の要求 ID。 |
戻り値
このメソッドは次の値のいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| このデバイスサービスコマンドは、呼び出し元プロセスの権限では許可されていません。 | |
|
このメソッドの実行中にエラーが発生しました。 |
解説(Remarks)
QuerySupportedCommands を使用すると、アプリケーションは Mobile Broadband デバイス上のデバイスサービスがサポートするコマンドメッセージの一覧を列挙できます。
これは非同期操作であり、QuerySupportedCommands は直ちに制御を返します。操作の完了時に、Mobile Broadband サービスは IMbnDeviceServicesEvents インターフェイスの OnQuerySupportedCommandsComplete メソッドを呼び出します。
Mobile Broadband デバイス上のデバイスサービスへのコマンドセッションを開きます。
| requestID | DWORD* | out | この要求を識別するために Mobile Broadband サービスによって割り当てられる一意の要求 ID。 |
戻り値
このメソッドは次の値のいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| このデバイスサービスコマンドは、呼び出し元プロセスの権限では許可されていません。 | |
|
このメソッドの実行中にエラーが発生しました。 |
解説(Remarks)
OpenCommandSession を使用すると、アプリケーションは Mobile Broadband デバイス上のデバイスサービスへのコマンドセッションを開くことができます。
これは非同期操作であり、OpenCommandSession は直ちに制御を返します。操作の完了時に、Mobile Broadband サービスは IMbnDeviceServicesEvents インターフェイスの OnOpenCommandSessionComplete メソッドを呼び出します。
Mobile Broadband デバイス上のデバイスサービスへのコマンドセッションを閉じます。
| requestID | DWORD* | out | この要求を識別するために Mobile Broadband サービスによって割り当てられる一意の要求 ID。 |
戻り値
このメソッドは次の値のいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| このデバイスサービスコマンドは、呼び出し元プロセスの権限では許可されていません。 | |
|
このメソッドの実行中にエラーが発生しました。 |
解説(Remarks)
CloseCommandSession は、Mobile Broadband デバイスサービスへのコマンドセッションを閉じます。
これは非同期操作であり、CloseCommandSession は直ちに制御を返します。操作の完了時に、Mobile Broadband サービスは IMbnDeviceServicesEvents インターフェイスの OnCloseCommandSessionComplete メソッドを呼び出します。
Mobile Broadband デバイスのデバイスサービスに SET 制御コマンドを送信します。
| commandID | DWORD | in | コマンドの識別子。 |
| deviceServiceData | SAFEARRAY* | in | デバイスに渡されるバイト配列。 |
| requestID | DWORD* | out | この要求を識別するために Mobile Broadband サービスによって割り当てられる一意の要求 ID。 |
戻り値
このメソッドは次の値のいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| このデバイスサービスコマンドは、呼び出し元プロセスの権限では許可されていません。 | |
|
このメソッドの実行中にエラーが発生しました。 |
解説(Remarks)
SetCommand は、Mobile Broadband API で他にカバーされていないベンダー固有のデバイスサービス機能を実装するために存在します。アプリケーションが SetCommand を呼び出す前に、デバイスサービス上のコマンドセッションを開いておく必要があります。
Mobile Broadband サービスは、デバイスに SET 要求を発行します。deviceServiceData は、要求に渡されるデータバッファーにバイト単位でコピーされます。このデータバッファーは MaxCommandSize バイト未満である必要があります。
これは非同期操作であり、SetCommand は直ちに制御を返します。操作の完了時に、Mobile Broadband サービスは IMbnDeviceServicesEvents インターフェイスの OnSetCommandComplete メソッドを呼び出します。
Mobile Broadband デバイスのデバイスサービスに QUERY 制御コマンドを送信します。
| commandID | DWORD | in | コマンドの識別子。 |
| deviceServiceData | SAFEARRAY* | in | デバイスに渡されるバイト配列。 |
| requestID | DWORD* | out | この要求を識別するために Mobile Broadband サービスによって割り当てられる一意の要求 ID。 |
戻り値
このメソッドは次の値のいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| このデバイスサービスコマンドは、呼び出し元プロセスの権限では許可されていません。 | |
|
このメソッドの実行中にエラーが発生しました。 |
解説(Remarks)
QueryCommand は、Mobile Broadband API で他にカバーされていないベンダー固有のデバイスサービス機能を実装するために存在します。アプリケーションが QueryCommand を呼び出す前に、デバイスサービス上のコマンドセッションを開いておく必要があります。
Mobile Broadband サービスは、デバイスに QUERY 要求を発行します。deviceServiceData は、要求に渡されるデータバッファーにバイト単位でコピーされます。このデータバッファーは MaxCommandSize バイトを超えてはなりません。
これは非同期操作であり、QueryCommand は直ちに制御を返します。操作の完了時に、Mobile Broadband サービスは IMbnDeviceServicesEvents インターフェイスの OnQueryCommandComplete メソッドを呼び出します。
Mobile Broadband デバイス上のデバイスサービスへのデータセッションを開きます。
| requestID | DWORD* | out | この要求を識別するために Mobile Broadband サービスによって割り当てられる一意の要求 ID。 |
戻り値
このメソッドは次の値のいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| このデバイスサービスコマンドは、呼び出し元プロセスの権限では許可されていません。 | |
|
デバイスサービスがサポートできるセッションの最大数に達しました。 |
|
このメソッドの実行中にエラーが発生しました。 |
解説(Remarks)
OpenDataSession を使用すると、アプリケーションは Mobile Broadband デバイスサービスへのデータセッションを開くことができます。
これは非同期操作であり、OpenDataSession は直ちに制御を返します。操作の完了時に、Mobile Broadband サービスは IMbnDeviceServicesEvents インターフェイスの OnOpenDataSessionComplete メソッドを呼び出します。
Mobile Broadband デバイス上のデバイスサービスへのデータセッションを閉じます。
| requestID | DWORD* | out | この要求を識別するために Mobile Broadband サービスによって割り当てられる一意の要求 ID。 |
戻り値
このメソッドは次の値のいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| このデバイスサービスコマンドは、呼び出し元プロセスの権限では許可されていません。 | |
|
このメソッドの実行中にエラーが発生しました。 |
解説(Remarks)
CloseDataSession は、Mobile Broadband デバイスサービスへのデータセッションを閉じます。アプリケーションが CloseDataSession を呼び出す前に、データセッションを開いておく必要があります。
これは非同期操作であり、CloseDataSession は直ちに制御を返します。操作の完了時に、Mobile Broadband サービスは IMbnDeviceServicesEvents インターフェイスの OnCloseDataSessionComplete メソッドを呼び出します。
デバイスサービスのデータセッションにデータを書き込みます。
| deviceServiceData | SAFEARRAY* | in | 書き込みのためにデバイスに渡されるバイト配列。 |
| requestID | DWORD* | out | この要求を識別するために Mobile Broadband サービスによって割り当てられる一意の要求 ID。 |
戻り値
このメソッドは次の値のいずれかを返すことがあります。
| 戻りコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| このデバイスサービスコマンドは、呼び出し元プロセスの権限では許可されていません。 | |
|
deviceServiceData の長さが、サポートされている MaxDataSize を超えています。 |
|
デバイスサービスセッションが開かれていません。 |
|
このメソッドの実行中にエラーが発生しました。 |
解説(Remarks)
WriteData は、デバイス上のベンダー固有のデバイスサービスに一括データを渡します。Mobile Broadband サービスは、この要求をデバイスに転送します。deviceServiceData は、要求に渡されるデータバッファーにバイト単位でコピーされます。このデータバッファーは MaxDataSize バイト未満である必要があります。
アプリケーションが WriteData を呼び出す前に、データセッションを開いておく必要があります。オペレーティングシステムは、WriteData のレイテンシやパフォーマンスについて保証しません。
これは非同期操作であり、WriteData は直ちに制御を返します。操作の完了時に、Mobile Broadband サービスは IMbnDeviceServicesEvents インターフェイスの OnWriteDataComplete メソッドを呼び出します。
このオブジェクトが関連付けられている Mobile Broadband デバイスのインターフェイス ID。
| InterfaceID | LPWSTR* | out | このデバイスサービスが属するインターフェイスのID文字列を受け取る出力ポインタ。呼び出し側が解放する。 |
このオブジェクトが関連付けられているデバイスサービスの ID。
| DeviceServiceID | LPWSTR* | out | このデバイスサービスを識別するGUID文字列を受け取る出力ポインタ。呼び出し側が解放する。 |
デバイスサービスのコマンドセッションが開いているかどうかを報告します。
| value | BOOL* | out | コマンドセッションが開いているかを示すBOOLを受け取る出力ポインタ。TRUEで開いている。 |
デバイスサービスのデータセッションが開いているかどうかを報告します。
| value | BOOL* | out | データセッションが開いているかを示すBOOLを受け取る出力ポインタ。TRUEで開いている。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMbnDeviceService "{B3BB9A71-DC70-4BE9-A4DA-7886AE8B191B}" #usecom global IMbnDeviceService IID_IMbnDeviceService "{}" #comfunc global IMbnDeviceService_QuerySupportedCommands 3 var #comfunc global IMbnDeviceService_OpenCommandSession 4 var #comfunc global IMbnDeviceService_CloseCommandSession 5 var #comfunc global IMbnDeviceService_SetCommand 6 int,var,var #comfunc global IMbnDeviceService_QueryCommand 7 int,var,var #comfunc global IMbnDeviceService_OpenDataSession 8 var #comfunc global IMbnDeviceService_CloseDataSession 9 var #comfunc global IMbnDeviceService_WriteData 10 var,var #comfunc global IMbnDeviceService_get_InterfaceID 11 var #comfunc global IMbnDeviceService_get_DeviceServiceID 12 var #comfunc global IMbnDeviceService_get_IsCommandSessionOpen 13 var #comfunc global IMbnDeviceService_get_IsDataSessionOpen 14 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMbnDeviceService "{B3BB9A71-DC70-4BE9-A4DA-7886AE8B191B}" #usecom global IMbnDeviceService IID_IMbnDeviceService "{}" #comfunc global IMbnDeviceService_QuerySupportedCommands 3 sptr #comfunc global IMbnDeviceService_OpenCommandSession 4 sptr #comfunc global IMbnDeviceService_CloseCommandSession 5 sptr #comfunc global IMbnDeviceService_SetCommand 6 int,sptr,sptr #comfunc global IMbnDeviceService_QueryCommand 7 int,sptr,sptr #comfunc global IMbnDeviceService_OpenDataSession 8 sptr #comfunc global IMbnDeviceService_CloseDataSession 9 sptr #comfunc global IMbnDeviceService_WriteData 10 sptr,sptr #comfunc global IMbnDeviceService_get_InterfaceID 11 sptr #comfunc global IMbnDeviceService_get_DeviceServiceID 12 sptr #comfunc global IMbnDeviceService_get_IsCommandSessionOpen 13 sptr #comfunc global IMbnDeviceService_get_IsDataSessionOpen 14 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。