IOCTL_WRITE_REGISTERS IOCTL (usbscan.h)
使用控制管道写入 USB 设备寄存器。
主要代码
输入缓冲区
指向 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);
要求
要求 | 值 |
---|---|
Header | usbscan.h (包括 Usbscan.h) |