共用方式為


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 函式時,呼叫端必須將 IO_BLOCK 結構的位址指定為函式的 lpInBuffer 參數。

使用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
要求 (pIoBlock-uLength>> 1) ? 0x04:0x0C
(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);

規格需求

需求
標頭 usbscan.h (包含 Usbscan.h)