IOCTL_HID_GET_INDEXED_STRING IOCTL (hidclass.h)
IOCTL_HID_GET_INDEXED_STRING要求は、最上位のコレクションから、指定された埋め込み文字列を取得します。 取得された文字列は、人間が判読できる形式の NULL で終わるワイド文字列です。
HIDClass デバイスの一般的な情報については、HID コレクション を参照してください。
メジャー コード
入力バッファー
IRP の I/O スタック位置にある Parameters.DeviceIoControl.InputBufferLength は、Irp- >AssociatedIrp.SystemBufferが指す位置にある入力バッファーのサイズ (バイト単位) を示します。
IRP の I/O スタック位置の Parameters.DeviceIoControl.OutputBufferLength は、出力バッファーのサイズ (バイト単位) を示します。 出力バッファーが NULL で終わる埋め込み文字列全体を保持するのに十分な大きさでない場合、要求は出力バッファーに何も返しません。
ミニドライバーの処理: IOCTL_HID_GET_INDEXED_STRINGは 2 つの入力バッファーを使用します。
IRP の I/O スタック位置の Parameters.DeviceIoControl.OutputBufferLength は、Irp->MdlAddress が指す位置にある出力バッファーのサイズ (バイト単位) を示します。 出力バッファーが NULL で終わる埋め込み文字列全体を保持するのに十分な大きさでない場合、要求は出力バッファーに何も返しません。 埋め込み文字列内の可能な最大文字数は、デバイス固有です。 USB デバイスの場合、文字列の最大長は 126 文字です (終端の NULL 文字は含まれません)。
Parameters.DeviceIoControl.Type3InputBuffer には、取得する文字列を記述する INT 値が含まれています。 INT 値の最上位の 2 バイトには、言語 ID が含まれます (たとえば、値 1033 は英語を示します)。 INT 値の最下位 2 バイトには、文字列インデックスが含まれます。
入力バッファーの長さ
Parameters.DeviceIoControl.InputBufferLength は >= sizeof(ULONG) である必要があり、取得する文字列のインデックスを含める必要があります。
Parameters.DeviceIoControl.OutputBufferLengthの場合、埋め込み文字列に含まれる最大文字数はデバイス固有です。 USB デバイスの場合、文字列の最大長は 126 文字です (終端の NULL 文字は含まれません)。
出力バッファー
Irp->MdlAddress は、取得した文字列 (NULL で終わるワイド文字列) を受け取るバッファーを指します。
ミニドライバーの処理: Irp->MdlAddress は、取得した文字列 (NULL で終わるワイド文字列) を受け取るバッファーを指します。 HID ミニドライバーのほとんどのデバイス制御 IRP とは異なり、この IRP はMETHOD_NEITHERバッファリングを使用しないことに注意してください。 特に、出力バッファーが Irp->UserBufferによって識別されるIOCTL_HID_GET_STRINGと区別する必要があります。
出力バッファーの長さ
取得した文字列の長さ (NULL で終わるワイド文字列)。 指定するバッファーは、<= 4093 バイト (2^12 – 3) である必要があります。
状態ブロック
HID クラス ドライバーは、Irp->IoStatusの次のフィールドを設定します。
情報 は、デバイスから転送されたバイト数に設定されます。
ステータス は、転送がエラーなしで完了した場合にSTATUS_SUCCESSに設定されます。 それ以外の場合は、適切な NTSTATUS エラー コードに設定されます。
必要条件
要件 | 価値 |
---|---|
ヘッダー | hidclass.h (Hidclass.h を含む) |