次の方法で共有


BluetoothGATTGetServices 関数 (bluetoothleapis.h)

BluetoothGATTGetServices 関数は、サーバーで使用できるすべてのプライマリ サービスを取得します。

構文

HRESULT BluetoothGATTGetServices(
  [in]            HANDLE               hDevice,
  [in]            USHORT               ServicesBufferCount,
  [out, optional] PBTH_LE_GATT_SERVICE ServicesBuffer,
  [out]           USHORT               *ServicesBufferActual,
  [in]            ULONG                Flags
);

パラメーター

[in] hDevice

プライマリ サービスの一覧を取得する Bluetooth デバイスを処理します。

[in] ServicesBufferCount

ServicesBuffer パラメーターに割り当てられた要素の数。

[out, optional] ServicesBuffer

サービスを返す BTH_LE_GATT_SERVICE 構造体を含むバッファーへのポインター。

[out] ServicesBufferActual

ServicesBuffer パラメーターで実際のサービス数が返されたバッファーへのポインター。

[in] Flags

BluetoothGATTGetServices の動作を変更するためのフラグ:

フラグ 説明
BLUETOOTH_GATT_FLAG_NONE クライアントに特定の GATT 要件がありません (既定値)。

戻り値

この関数は、次の値を返します。

リターン コード 説明
S_OK
操作は正常に完了しました。
ERROR_MORE_DATA
buffer パラメーターは NULL で、代わりに使用可能な項目の数が返されます。
ERROR_ACCESS_DENIED
親サービスとサービス ハンドルの両方が指定され、サービス階層が指定された親サービス ハンドルにロールアップされない場合に返されます。
ERROR_INVALID_PARAMETER
次のいずれかの条件が発生しました。
  • ServicesBufferNULLServicesBufferCount は 0 です
  • ServicesBufferNULL 以外ですが、 ServicesBufferCountNULL です
  • ServicesBufferNULL 以外で、 ServicesBufferCount は 0 です
ERROR_INVALID_USER_BUFFER
バッファーが指定されていますが、バッファー数のサイズは、必要なサイズよりもバイト単位で小さくなります。
ERROR_INVALID_FUNCTION
サービスはキャッシュから取得するように指定されましたが、キャッシュにサービスは存在しません。
ERROR_BAD_COMMAND
キャッシュ内の現在のデータは矛盾しているように見え、内部エラーが発生しています。
ERROR_NO_SYSTEM_RESOURCES
操作がメモリ不足でした。

注釈

返されたサービスは、デバイスから直接サービスが正常に取得されるとキャッシュされます。 サービス変更イベントを受信しない限り、返されるサービスの一覧は変更されるとは限りません。

プロファイル ドライバーは、返されるプライマリ サービスの配列に十分な大きさのバッファーを事前に割り当てる必要があります。 呼び出し元は、ServicesBufferActualNULL 以外の値を渡し、ServicesBufferNULL を渡すことで、必要なバッファー サイズを決定できます。

返されたサービス構造を変更し、その後の関数呼び出しで変更された構造体を使用しないでください。 呼び出し元がこれを行う場合、動作は未定義です。


////////////////////////////////////////////////////////////////////////////
// Determine Services Buffer Size
////////////////////////////////////////////////////////////////////////////

    hr = BluetoothGATTGetServices(
            hLEDevice,
            0,
            NULL,
            &serviceBufferCount,
            BLUETOOTH_GATT_FLAG_NONE);
    
    if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
        PrintHr("BluetoothGATTGetServices - Buffer Size", hr);
        goto Done;
    }

    pServiceBuffer = (PBTH_LE_GATT_SERVICE)
            malloc(sizeof(BTH_LE_GATT_SERVICE) * serviceBufferCount);
    
    if (NULL == pServiceBuffer) {
        printf("pServiceBuffer out of memory\r\n");
        goto Done;
    } else {
        RtlZeroMemory(pServiceBuffer, 
                sizeof(BTH_LE_GATT_SERVICE) * serviceBufferCount);
    }
    
////////////////////////////////////////////////////////////////////////////
// Retrieve Services
////////////////////////////////////////////////////////////////////////////
    
    hr = BluetoothGATTGetServices(
            hLEDevice,
            serviceBufferCount,
            pServiceBuffer,
            &numServices,
            BLUETOOTH_GATT_FLAG_NONE);
    
    if (S_OK != hr) {
        PrintHr("BluetoothGATTGetServices - Actual Data", hr);
        goto Done;
    }

必要条件

要件
サポートされている最小のクライアント Windows 8 以降のバージョンの Windows でサポートされています。
対象プラットフォーム ユニバーサル
Header bluetoothleapis.h
Library BluetoothAPIs.lib
[DLL] BluetoothAPIs.dll

こちらもご覧ください

BTH_LE_GATT_SERVICE