IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (b)
IOCTL_BTH_HCI_VENDOR_COMMAND要求可讓藍牙應用程式將廠商特定的命令傳送至無線電。
主要程序代碼
輸入緩衝區
AssociatedIrp.SystemBuffer 成員指向BTH_VENDOR_SPECIFIC_COMMAND結構。 結構包含製造商標識碼、連結管理通訊協定 (LMP) 版本、HCI 命令標頭,以及包含選擇性模式數據的相關聯廠商命令數據,以符合事件與命令。
輸入緩衝區長度
BTH_VENDOR_SPECIFIC_COMMAND 結構的長度。
輸出緩衝區
AssociatedIrp.SystemBuffer 成員指向緩衝區,其中包含從無線電傳回的事件數據。 數據可在 BTH_VENDOR_EVENT_INFO 結構的 EventInfo 成員中使用。
typedef struct _BTH_VENDOR_EVENT_INFO {
BTH_ADDR BthAddress;
ULONG EventSize;
UCHAR EventInfo[1];
} BTH_VENDOR_EVENT_INFO, *PBTH_VENDOR_EVENT_INFO;
EventSize 成員提供從無線電傳回之廠商特定事件數據的大小。
輸出緩衝區長度
BTH_VENDOR_EVENT_INFO 結構的長度。
狀態區塊
如果要求成功,STATUS_BLOCK 結構 的信息成員會 設定為保留命令回應之緩衝區的大小,以位元組為單位。
Status 成員會設定為下表中的其中一個值。
狀態值 | 描述 |
---|---|
STATUS_SUCCESS | IOCTL 已順利完成。 |
STATUS_BUFFER_TOO_SMALL | 傳遞的輸入緩衝區太小。 |
STATUS_INVALID_PARAMETER | 傳遞的輸入緩衝區無效。 |
STATUS_PRIVILEGE_NOT_HELD | 呼叫端沒有必要的許可權。 |
STATUS_INSUFFICIENT_RESOURCES | 記憶體不足,無法處理要求。 |
備註
IOCTL_BTH_HCI_VENDOR_COMMAND要求提供一種機制,可讓廠商建立其藍牙無線電專用的命令。
製造商標識碼和連結管理通訊協定 (LMP) 位於 中的版本值 BTH_VENDOR_SPECIFIC_COMMAND 結構有助於防止將廠商特定的命令傳送到錯誤的無線電。 LMP 版本可讓廠商將廠商特定的命令傳送至具有相符 LMP 版本的無線電。 如果 LMP 版本為零,該廠商的所有無線電都會收到廠商特定的命令。
如果廠商特定命令未遵循標準 HCI 流程控制,而且產生廠商特定事件以回應廠商特定的命令,則需要模式。
如果需要模式,命令應該接著 BTH_VENDOR_PATTERN 存在於 事件中的模式結構。 這些模式可讓藍牙驅動程式堆疊與對應的廠商特定命令比對廠商特定的事件。
BTH_VENDOR_PATTERN 結構會指定這類模式,這些模式會遵循BTH_VENDOR_SPECIFIC_COMMAND 結構之 Data 成員中指定的廠商特定命令數據。 遵循命令之所有模式的總大小上限不應大於 255。
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);
由於此命令所產生的事件會複製到輸出緩衝區中, (包括事件標頭) 。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 版本:_Available Microsoft Windows Vista SP2 和更新版本的作業系統版本。 |
標頭 | b (ctl.h) |
IRQL | <= PASSIVE_LEVEL |