Freigeben über


IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)

Die IOCTL_BTH_HCI_VENDOR_COMMAND-Anforderung ermöglicht Bluetooth-Anwendungen das Senden von anbieterspezifischen Befehlen an Funkgeräte.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

Der AssociatedIrp.SystemBuffer Member verweist auf eine BTH_VENDOR_SPECIFIC_COMMAND Struktur. Die Struktur enthält einen Herstellerbezeichner, eine LMP-Version (Link Management Protocol), einen HCI-Befehlsheader und die zugehörigen Befehlsdaten des Anbieters, die optionale Musterdaten enthalten, die einem Ereignis mit dem Befehl entsprechen.

Eingabepufferlänge

Die Länge einer BTH_VENDOR_SPECIFIC_COMMAND Struktur.

Ausgabepuffer

Der AssociatedIrp.SystemBuffer Member verweist auf einen Puffer, der die vom Funk zurückgegebenen Ereignisdaten enthält. Die Daten sind im EventInfo Member der BTH_VENDOR_EVENT_INFO Struktur verfügbar.

typedef struct _BTH_VENDOR_EVENT_INFO {
  BTH_ADDR BthAddress;
  ULONG    EventSize;
  UCHAR    EventInfo[1];
} BTH_VENDOR_EVENT_INFO, *PBTH_VENDOR_EVENT_INFO;

Das EventSize Member stellt die Größe der anbieterspezifischen Ereignisdaten bereit, die vom Radio zurückgegeben werden.

Länge des Ausgabepuffers

Die Länge einer BTH_VENDOR_EVENT_INFO Struktur.

Statusblock

Wenn die Anforderung erfolgreich ist, wird das Information Member der STATUS_BLOCK Struktur auf die Größe des Puffers festgelegt, der die Befehlsantwort enthält.

Der Status Member wird auf einen der Werte in der folgenden Tabelle festgelegt.

Statuswert Beschreibung
STATUS_SUCCESS Die IOCTL wurde erfolgreich abgeschlossen.
STATUS_BUFFER_TOO_SMALL Der übergebene Eingabepuffer war zu klein.
STATUS_INVALID_PARAMETER Der übergebene Eingabepuffer war ungültig.
STATUS_PRIVILEGE_NOT_HELD Der Aufrufer verfügt nicht über die erforderlichen Berechtigungen.
STATUS_INSUFFICIENT_RESOURCES Für die Verarbeitung der Anforderung ist nicht genügend Arbeitsspeicher verfügbar.

Bemerkungen

Die IOCTL_BTH_HCI_VENDOR_COMMAND-Anforderung stellt einen Mechanismus bereit, mit dem Anbieter Befehle erstellen können, die für ihre Bluetooth-Funkgeräte spezifisch sind.

Die Werte der Hersteller-ID und des LMP-Versionsprotokolls (Link Management Protocol), die sich im BTH_VENDOR_SPECIFIC_COMMAND Struktur hilft, das Senden von anbieterspezifischen Befehlen an das falsche Radio zu verhindern. Die LMP-Version ermöglicht es den Anbietern, anbieterspezifische Befehle an Funkgeräte zu senden, die über eine entsprechende LMP-Version verfügen. Wenn die LMP-Version null ist, erhalten alle Funkgeräte dieses Anbieters den anbieterspezifischen Befehl.

Muster sind erforderlich, wenn ein anbieterspezifischer Befehl nicht der standardmäßigen HCI-Flusssteuerung folgt und ein herstellerspezifisches Ereignis als Reaktion auf den anbieterspezifischen Befehl generiert wird.

Wenn Muster erforderlich sind, sollte auf den Befehl BTH_VENDOR_PATTERN Strukturen für Muster folgen, die im Ereignis vorhanden sind. Diese Muster ermöglichen es dem Bluetooth-Treiberstapel, anbieterspezifische Ereignisse mit den entsprechenden anbieterspezifischen Befehlen abzugleichen.

Die BTH_VENDOR_PATTERN Struktur gibt solche Muster an, die den anbieterspezifischen Befehlsdaten folgen, die im Data Member der BTH_VENDOR_SPECIFIC_COMMAND Struktur angegeben sind. Die maximale Gesamtgröße aller Muster, die dem Befehl folgen, sollte nicht größer als 255 sein.

Warnung Der Prozess, der IOCTL_BTH_HCI_VENDOR_COMMAND übermittelt, muss über die SE_LOAD_DRIVER_NAME-Berechtigung verfügen. Ein Prozess, der im System oder in einem Administratorkontext ausgeführt wird, kann seine Berechtigungen mithilfe des SDK-LookupPrivilegeValue erhöhen und AdjustTokenPrivileges Funktionen verwenden. Im folgenden Codebeispiel wird veranschaulicht, wie Sie diese Berechtigung abrufen. Beachten Sie, dass das Beispiel keine Fehlerbehandlung veranschaulicht.
 
HANDLE procToken;
LUID luid;
TOKEN_PRIVILEGES tp;

OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &procToken);

LookupPrivilegeValue(NULL, SE_LOAD_DRIVER_NAME, &luid);

Tp.PrivilegeCount = 1;
Tp.privileges[0].Luid = luid;
Tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(procToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD)NULL);

Das Ereignis, das aufgrund dieses Befehls generiert wird, wird in den Ausgabepuffer kopiert (einschließlich des Ereignisheaders).

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Versionen:_Available unter Microsoft Windows Vista SP2 und höheren Betriebssystemversionen.
Header- bthioctl.h (include Bthioctl.h)
IRQL- <= PASSIVE_LEVEL

Siehe auch

BTH_COMMAND_HEADER

BTH_VENDOR_PATTERN

BTH_VENDOR_SPECIFIC_COMMAND