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
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.
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 |