Compartir a través de


IOCTL_WRITE_REGISTERS IOCTL (usbscan.h)

Escribe en registros de dispositivos USB mediante la canalización de control.

Código principal

IRP_MJ_DEVICE_CONTROL

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)