Partager via


Fonction BluetoothGATTGetDescriptorValue (bluetoothleapis.h)

La fonction BluetoothGATTGetDescriptorValue obtient la valeur du descripteur spécifié.

Syntaxe

HRESULT BluetoothGATTGetDescriptorValue(
  [in]            HANDLE                        hDevice,
  [in]            PBTH_LE_GATT_DESCRIPTOR       Descriptor,
  [in]            ULONG                         DescriptorValueDataSize,
  [out, optional] PBTH_LE_GATT_DESCRIPTOR_VALUE DescriptorValue,
  [out, optional] USHORT                        *DescriptorValueSizeRequired,
  [in]            ULONG                         Flags
);

Paramètres

[in] hDevice

Gérez le service.

[in] Descriptor

Pointeur vers BTH_LE_GATT_DESCRIPTOR structure contenant le descripteur parent de la valeur de descripteur à récupérer.

[in] DescriptorValueDataSize

Nombre d’octets alloués pour le paramètre DescriptorValue .

[out, optional] DescriptorValue

Pointeur vers BTH_LE_GATT_DESCRIPTOR_VALUE structure dans laquelle retourner la valeur de descripteur.

[out, optional] DescriptorValueSizeRequired

Pointeur vers la mémoire tampon dans laquelle stocker le nombre d’octets supplémentaires nécessaires pour retourner des données dans la mémoire tampon pointée par DescriptorValue.

[in] Flags

Indicateurs permettant de modifier le comportement de BluetoothGATTGetDescriptorValue :

Indicateur Description
BLUETOOTH_GATT_FLAG_NONE Le client n’a pas d’exigences GATT spécifiques (par défaut).
BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED Le client demande que les données soient transmises sur un canal chiffré.
BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED Le client demande que les données soient transmises sur un canal authentifié.
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE La valeur du descripteur doit être lue directement à partir de l’appareil. Cela remplace celui dans le cache si l’un d’eux est déjà présent.
BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE La valeur du descripteur doit être lue à partir du cache (qu’elle soit présente ou non dans le cache).

Valeur retournée

La fonction BluetoothGATTGetDescriptorValue retourne les valeurs suivantes :

Code de retour Description
S_OK
L’opération s’est terminée avec succès.
ERROR_MORE_DATA
Le paramètre de mémoire tampon est NULL et le nombre d’éléments disponibles est retourné à la place.
ERROR_ACCESS_DENIED
Retourné si un service parent et un handle de service sont fournis et que la hiérarchie de service ne se cumule pas sur le handle de service parent fourni.
ERROR_INVALID_PARAMETER
DescriptorValue et DescriptorValueSizeRequired sont tous deux 0.
ERROR_INVALID_USER_BUFFER
Une mémoire tampon est spécifiée, mais la taille du nombre de mémoires tampons est inférieure à ce qui est requis, en octets.
ERROR_INVALID_FUNCTION
Une valeur de descripteur a été spécifiée pour être récupérée à partir du cache, mais la valeur du descripteur n’est pas présente dans le cache.
ERROR_BAD_COMMAND
Les données actuelles dans le cache semblent incohérentes et entraînent des erreurs internes.
ERROR_BAD_NET_RESP
Le serveur cible n’a pas fourni de réponse réseau appropriée.
ERROR_SEM_TIMEOUT
La requête a expiré.
ERROR_NO_SYSTEM_RESOURCES
L’opération a manqué de mémoire.
E_BLUETOOTH_ATT_INVALID_HANDLE
Le handle d’attribut donné n’était pas valide sur ce serveur.
E_BLUETOOTH_ATT_READ_NOT_PERMITTED
Impossible de lire l’attribut.
E_BLUETOOTH_ATT_WRITE_NOT_PERMITTED
L’attribut ne peut pas être écrit.
E_BLUETOOTH_ATT_INVALID_PDU
L’attribut PDU n’était pas valide.
E_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION
L’attribut nécessite une authentification avant de pouvoir être lu ou écrit.
E_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED
Le serveur d’attributs ne prend pas en charge la demande reçue du client.
E_BLUETOOTH_ATT_INVALID_OFFSET
Le décalage spécifié a dépassé la fin de l’attribut.
E_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION
L’attribut nécessite une autorisation avant de pouvoir être lu ou écrit.
E_BLUETOOTH_ATT_PREPARE_QUEUE_FULL
Trop d’écritures de préparation ont été mises en file d’attente.
E_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND
Aucun attribut trouvé dans la plage de handle d’attribut donnée.
E_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG
L’attribut ne peut pas être lu ou écrit à l’aide de la demande de lecture d’objet blob.
E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE
La taille de clé de chiffrement utilisée pour chiffrer ce lien est insuffisante.
E_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH
La longueur de la valeur de l’attribut n’est pas valide pour l’opération.
E_BLUETOOTH_ATT_UNLIKELY
La demande d’attribut demandée a rencontré une erreur peu probable et n’a donc pas pu être effectuée comme demandé.
E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION
L’attribut nécessite un chiffrement avant de pouvoir être lu ou écrit.
E_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE
Le type d’attribut n’est pas un attribut de regroupement pris en charge tel que défini par une spécification de couche supérieure.
E_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES
Ressources insuffisantes pour terminer la demande.
E_BLUETOOTH_ATT_UNKNOWN_ERROR
Une erreur qui se trouve dans la plage réservée a été reçue.

Remarques

La valeur de descripteur est retournée à partir du cache si l’un d’eux est déjà présent. Ce serait le cas la plupart du temps, car tous les attributs d’appareil sont mis en cache au moment de l’appairage ou de l’association. Toutefois, s’il n’est pas présent, la valeur du descripteur est lue directement à partir de l’appareil et sera mise en cache après la lecture réussie à partir de l’appareil. Si BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE ou BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE est présent, la valeur du descripteur est lue à l’aide de la méthode spécifiée.

Les valeurs de descripteurs retournées sont mises en cache lors de la récupération réussie des valeurs de descripteur directement de l’appareil. Sauf si un événement de modification de service est reçu, les valeurs de descripteur ne sont pas censées changer.

Les pilotes de profil doivent préallouer une mémoire tampon suffisamment grande pour que le tableau de valeurs de descripteur soit retourné. Les appelants peuvent déterminer la taille de mémoire tampon nécessaire en transmettant une valeur non NULL dans DescriptorValueSizeRequired et NULL dans DescriptorValue.

Le service parent doit être présent dans le cache, sinon la fonction échoue. Le service parent doit être un service retourné par BluetoothGATTGetServices ou BluetoothGATTGetIncludedServices.

Exemple


////////////////////////////////////////////////////////////////////////////
// Determine Descriptor Value Buffer Size
////////////////////////////////////////////////////////////////////////////
                hr = BluetoothGATTGetDescriptorValue(
                        hCurrService,
                        currGattDescriptor,
                        0,
                        NULL,
                        &descValueDataSize,
                        BLUETOOTH_GATT_FLAG_NONE);

                if (HRESULT_FROM_WIN32(ERROR_MORE_DATA) != hr) {
                    PrintHr("BluetoothGATTGetDescriptorValue - Buffer Size", hr);
                    goto Done; // allow continuation
                }

                pDescValueBuffer = (PBTH_LE_GATT_DESCRIPTOR_VALUE)malloc(descValueDataSize);

                if (NULL == pDescValueBuffer) {
                    printf("pDescValueBuffer out of memory\r\n");
                    goto Done;
                } else {
                    RtlZeroMemory(pDescValueBuffer, descValueDataSize);
                }

////////////////////////////////////////////////////////////////////////////
// Retrieve the Descriptor Value
////////////////////////////////////////////////////////////////////////////

                hr = BluetoothGATTGetDescriptorValue(
                        hCurrService,
                        currGattDescriptor,
                        (ULONG)descValueDataSize,
                        pDescValueBuffer,
                        NULL,
                        BLUETOOTH_GATT_FLAG_NONE);

                if (S_OK != hr) {
                    PrintHr("BluetoothGATTGetDescriptorValue - Actual Data", hr);
                    goto Done; // allow continuation
                }

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge dans Windows 8 et versions ultérieures de Windows.
Plateforme cible Universal
En-tête bluetoothleapis.h
Bibliothèque BluetoothAPIs.lib
DLL BluetoothAPIs.dll

Voir aussi

BTH_LE_GATT_DESCRIPTOR

BTH_LE_GATT_DESCRIPTOR_VALUE