Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Записывает в регистры USB-устройства с помощью канала управления.
Основной код
Входной буфер
Указатель на структуру IO_BLOCK.
Длина входного буфера
Размер входного буфера.
Выходной буфер
НЕДЕЙСТВИТЕЛЬНЫЙ
Длина выходного буфера
Нуль
Блок состояния
Irp->IoStatus.Status STATUS_SUCCESS, если запрос выполнен успешно. В противном случае состояние соответствующего условия ошибки в качестве кода NTSTATUS.
Замечания
Параметры DeviceIoControl
Когда функция DeviceloControl вызывается с кодом элемента управления IOCTL_WRITE_REGISTERS ввода-вывода, вызывающий объект должен указать адрес структуры IO_BLOCK в качестве параметра функции lpInBuffer.
С помощью содержимого IO_BLOCK драйвер в режиме ядра создает URB, содержащий структуру _URB_CONTROL_VENDOR_OR_CLASS_REQUEST.
В следующей таблице указаны значения, назначенные элементам структуры _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 |
| индекс | 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 (include Usbscan.h) |