次の方法で共有


IOCTL_WRITE_REGISTERS IOCTL (usbscan.h)

コントロール パイプを使用して、USB デバイス レジスタに書き込みます。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

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 を含む)