IOCTL_BTHX_READ_HCI IOCTL (bthxddi.h)
IOCTL_BTHX_READ_HCI可用來從傳輸層讀取藍牙 ACL 數據和事件。
主要程序代碼
輸入緩衝區
配置文件驅動程序應該使用 KMDF 及其 WdfRequestRetrieveInputMemory 方法來擷取輸入參數。 例如,若要取得輸出緩衝區:
Status = WdfRequestRetrieveInputMemory(_Request, &ReqInMemory);
如需詳細資訊,請參閱 WDK 藍牙範例。
輸入緩衝區長度
緩衝區描述代表讀取類型的UCHAR。 緩衝區的長度是UCHAR的大小。
輸出緩衝區
配置文件驅動程序應該使用 KMDF 及其 WdfRequestRetrieveOutputMemory 方法來擷取輸入參數。 例如,若要取得輸出緩衝區:
Status = WdfRequestRetrieveOutputMemory(_Request, &ReqOutMemory);
如需詳細資訊,請參閱 WDK 藍牙範例。
輸出緩衝區長度
AssociatedIrp.SystemBuffer 成員指向一個緩衝區,該緩衝區會保存BTHX_HCI_READ_WRITE_CONTEXT結構和與讀取相關聯的其他數據。 緩衝區必須夠大,才能保存最大的事件或 ACL 數據封包,視其封包類型而定。
如果是事件封包,則會FIELD_OFFSET (BTHX_HCI_READ_WRITE_CONTEXT數據) +257,其中 257 是 2 位元節事件標頭和 255 位元節事件數據的總和。
針對 ACL 數據封包,它是FIELD_OFFSET (BTHX_HCI_READ_WRITE_CONTEXT Data) + MaxAclTransferInSize,其中 MaxAclTransferInSize 是從具有 IOCTL_BTHX_QUERY_CAPABILITIES 的傳輸驅動程式傳回BTHX_CAPABILITIES中的值。
狀態區塊
STATUS_BLOCK 結構 的信息成員會 設定為傳回的數據位元組數目。
Status 成員會設定為下表中的其中一個值。
狀態值 | 描述 |
---|---|
STATUS_SUCCESS | IOCTL 成功完成。 |
STATUS_CANCELLED | IOCTL 已取消。 |
備註
輸入緩衝區會指向正在讀取的封包類型。
輸出緩衝區會指向 DataLen 成員指定 Data 成員中位元組數的BTHX_HCI_READ_WRITE_CONTEXT結構。 Type 成員必須設定為與輸入封包類型相同的 。
STATUS_BLOCK 的信息成員應該 設定為 FIELD_OFFSET (BTHX_HCI_READ_WRITE_CONTEXT Data) + DataLen。
ACL 讀取的數據成員 大小上限取決於BTHX_CAPABILITIES 結構中指定的 MaxAclTransferInSize。 事件 的數據 成員大小上限為 255。
此 IOCTL 應該只在正常作業下傳回STATUS_SUCCESS。 不應該傳回傳輸特定錯誤。 只有在取消此 IOCTL 時,IOCTL 才會傳回STATUS_CANCELLED。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 8 開始支援。 |
標頭 | bthxddi.h |
IRQL | <= PASSIVE_LEVEL |