Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Escribe en registros de dispositivos USB mediante la canalización de control.
Código principal
Búfer de entrada
Puntero a una estructura de IO_BLOCK.
Longitud del búfer de entrada
Tamaño del búfer de entrada.
Búfer de salida
NULO
Longitud del búfer de salida
Cero
Bloque de estado
Irp->ioStatus.Status se establece en STATUS_SUCCESS si la solicitud se realiza correctamente. De lo contrario, estado a la condición de error adecuada como código NTSTATUS.
Observaciones
Parámetros deviceIoControl
Cuando se llama a la función deviceloControl con el código de control de E/S de IOCTL_WRITE_REGISTERS, el autor de la llamada debe especificar la dirección de una estructura de IO_BLOCK como parámetro de lpInBuffer de la función.
Con el contenido del IO_BLOCK, el controlador en modo kernel crea un urB de que contiene una estructura de _URB_CONTROL_VENDOR_OR_CLASS_REQUEST.
En la tabla siguiente se indican los valores asignados a _URB_CONTROL_VENDOR_OR_CLASS_REQUEST miembros de estructura.
| Miembro de estructura | Valor sssigned |
|---|---|
| TransferFlags | 0 |
| TransferBufferLength | pIoBlock:>uLength |
| TransferBuffer | pIoBlock:>pbyData |
| TransferBufferMDL | NULL |
| RequestTypeReservedBits | 0x40 |
| de solicitud de | (pIoBlock->uLength> 1) ? 0x04 : 0x0C |
| valor | (SHORT)pIoBlock:>uOffset |
| de índice de | pIoBlock:> uIndex |
Para obtener más información, consulte Acceso a controladores de Kernel-Mode para dispositivos de imagen fija.
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);
Requisitos
| Requisito | Valor |
|---|---|
| encabezado de | usbscan.h (incluya Usbscan.h) |