次の方法で共有


IOCTL_BTHX_READ_HCI IOCTL (bthxddi.h)

IOCTL_BTHX_READ_HCIは、トランスポート層から Bluetooth ACL データとイベントを読み取るために使用されます。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

プロファイル ドライバーでは、KMDF とその WdfRequestRetrieveInputMemory メソッドを使用して、入力パラメーターを取得する必要があります。 たとえば、出力バッファーを取得するには、次のようにします。

Status = WdfRequestRetrieveInputMemory(_Request, &ReqInMemory);

詳細については、WDK Bluetooth のサンプルを参照してください。

入力バッファーの長さ

バッファーは、読み取りの種類を表す UCHAR を表します。 バッファーの長さは UCHAR のサイズです。

出力バッファー

プロファイル ドライバーでは、KMDF とその WdfRequestRetrieveOutputMemory メソッドを使用して、入力パラメーターを取得する必要があります。 たとえば、出力バッファーを取得するには、次のようにします。

Status = WdfRequestRetrieveOutputMemory(_Request, &ReqOutMemory);

詳細については、WDK Bluetooth のサンプルを参照してください。

出力バッファーの長さ

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構造体の Information メンバーは、返されるデータのバイト数に設定されます。

Status メンバーは、次の表のいずれかの値に設定されます。

ステータス値 説明
STATUS_SUCCESS IOCTL が正常に完了しました。
STATUS_CANCELLED IOCTL が取り消されました。

注釈

入力バッファーは、読み取られるパケットの種類を指します。

出力バッファーは、 DataLen メンバーが Data メンバー内のバイト数を指定するBTHX_HCI_READ_WRITE_CONTEXT 構造体を指 します。 Type メンバーは、入力パケットの種類と同じに設定する必要があります。

STATUS_BLOCKの Information メンバーは、FIELD_OFFSET(BTHX_HCI_READ_WRITE_CONTEXT、Data) + DataLen に設定する必要があります。

ACL 読み取りの Data メンバーの最大サイズは、BTHX_CAPABILITIES構造体で指定された MaxAclTransferInSize によって決まります。 イベントの Data メンバーの最大サイズは 255 です。

この IOCTL は、通常の操作でのみSTATUS_SUCCESSを返す必要があります。 トランスポート固有のエラーは返されません。 IOCTL は、この IOCTL が取り消された場合にのみSTATUS_CANCELLEDを返す必要があります。

要件

要件
サポートされている最小のクライアント Windows 8 以降でサポートされています。
Header bthxddi.h
IRQL <= PASSIVE_LEVEL