IOCTL_WRITE_REGISTERS IOCTL (usbscan.h)
コントロール パイプを使用して、USB デバイス レジスタに書き込みます。
メジャー コード
[入力バッファー]
IO_BLOCK構造体へのポインター。
入力バッファーの長さ
入力バッファーのサイズ。
出力バッファー
NULL
出力バッファーの長さ
ゼロ
ステータス ブロック
Irp->要求が成功した場合、IoStatus.Status はSTATUS_SUCCESSに設定されます。 それ以外の場合は、NTSTATUS コードとして適切なエラー条件の状態。
注釈
DeviceIoControl パラメーター
IOCTL_WRITE_REGISTERS I/O 制御コードを使用して DeviceloControl 関数を呼び出す場合、呼び出し元は関数の lpInBuffer パラメーターとしてIO_BLOCK構造体のアドレスを指定する必要があります。
カーネル モード ドライバーは、IO_BLOCKの内容を使用して、_URB_CONTROL_VENDOR_OR_CLASS_REQUEST構造体を含む URB を作成します。
次の表は、構造体メンバーに割り当てられた値_URB_CONTROL_VENDOR_OR_CLASS_REQUEST示しています。
構造体のメンバー | sssigned 値 |
---|---|
TransferFlags | 0 |
TransferBufferLength | pIoBlock-uLength> |
TransferBuffer | pIoBlock-pbyData> |
TransferBufferMDL | NULL |
RequestTypeReservedBits | 0x40 |
Request | (pIoBlock->uLength> 1) ? 0x04: 0x0C |
Value | (SHORT)pIoBlock-uOffset> |
Index | pIoBlock-uIndex> |
詳細については、「 静止画像デバイスの Kernel-Mode ドライバーへのアクセス」を参照してください。
DWORD cbRet;
BOOL bRet;
IO_BLOCK IoBlock;
OVERLAPPED overlapped;
IoBlock.uOffset = (BYTE)byOffset;
IoBlock.uLength = (BYTE)byNbOfReg;
IoBlock.pbyData = pbyData;
memset(&overlapped, 0, sizeof(OVERLAPPED));
overlapped.hEvent =
CreateEvent(NULL, // pointer to security attributes
// WIN95 ignores this parameter
FALSE, // automatic reset
FALSE, // initialize to not signaled
NULL); // pointer to the event-object name
bRet = DeviceIoControl( DeviceHandle,
(DWORD) IOCTL_WRITE_REGISTERS,
&IoBlock,
sizeof(IO_BLOCK),
NULL,
0,
&cbRet,
&overlapped);
if( bRet == TRUE )
{
WaitForSingleObject(overlapped.hEvent, INFINITE);
// we do not the test, the result is zero
}
CloseHandle(overlapped.hEvent);
要件
要件 | 値 |
---|---|
Header | usbscan.h (Usbscan.h を含む) |