IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)

Mit der IOCTL_BTH_HCI_VENDOR_COMMAND-Anforderung können Bluetooth-Anwendungen herstellerspezifische Befehle an Funkgeräte senden.

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 Herstellerbefehlsdaten, die optionale Musterdaten zum Abgleichen eines Ereignisses mit dem Befehl enthalten.

Länge des Eingabepuffers

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-Element 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-Element stellt die Größe der anbieterspezifischen Ereignisdaten bereit, die vom Funkgerät zurückgegeben werden.

Länge des Ausgabepuffers

Die Länge einer BTH_VENDOR_EVENT_INFO-Struktur .

Statusblock

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

Das Status-Element 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 Es war nicht genügend Arbeitsspeicher verfügbar, um die Anforderung zu verarbeiten.

Hinweise

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 der LMP-Version (Link Management Protocol) im BTH_VENDOR_SPECIFIC_COMMAND Struktur helfen, das Senden von anbieterspezifischen Befehlen an das falsche Funkgerät 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 herstellerspezifischen Befehl.

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

Wenn Muster erforderlich sind, sollten 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 herstellerspezifischen 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 berechtigung SE_LOAD_DRIVER_NAME verfügen. Ein Prozess, der im System oder in einem Administratorkontext ausgeführt wird, kann seine Berechtigungen mithilfe der Funktionen SDK LookupPrivilegeValueValue und AdjustTokenPrivileges erhöhen. Im folgenden Codebeispiel wird veranschaulicht, wie Sie diese Berechtigung erhalten. 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 (einschließlich des Ereignisheaders) kopiert.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Versionen: _Available unter Microsoft Windows Vista SP2 und höheren Betriebssystemversionen.
Kopfzeile bthioctl.h (einschließlich Bthioctl.h)
IRQL <= PASSIVE_LEVEL

Weitere Informationen

BTH_COMMAND_HEADER

BTH_VENDOR_PATTERN

BTH_VENDOR_SPECIFIC_COMMAND