Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Grava em registros de dispositivo USB usando o pipe de controle.
Código principal
Buffer de entrada
Ponteiro para uma estrutura IO_BLOCK.
Comprimento do buffer de entrada
Tamanho do buffer de entrada.
Buffer de saída
ZERO
Comprimento do buffer de saída
Zero
Bloco de status
Irp->IoStatus.Status será definido como STATUS_SUCCESS se a solicitação for bem-sucedida. Caso contrário, status à condição de erro apropriada como um código de NTSTATUS.
Observações
Parâmetros DeviceIoControl
Quando a função DeviceloControl é chamada com o código de controle de E/S IOCTL_WRITE_REGISTERS, o chamador deve especificar o endereço de uma estrutura IO_BLOCK como o parâmetro lpInBuffer da função.
Usando o conteúdo IO_BLOCK, o driver do modo kernel cria um URB que contém uma estrutura de _URB_CONTROL_VENDOR_OR_CLASS_REQUEST.
A tabela a seguir indica os valores atribuídos a _URB_CONTROL_VENDOR_OR_CLASS_REQUEST membros da estrutura.
| Membro da estrutura | Valor atribuído |
|---|---|
| TransferFlags | 0 |
| TransferBufferLength | pIoBlock–> uLength |
| TransferBuffer | pIoBlock–> pbyData |
| TransferBufferMDL | NULL |
| requestTypeReservedBits | 0x40 |
| de solicitação de | (pIoBlock->uLength> 1) ? 0x04: 0x0C |
| Value | (SHORT)pIoBlock –> uOffset |
| de índice | pIoBlock–> uIndex |
Para obter mais informações, consulte Acessando drivers de Kernel-Mode para dispositivos de imagem morta.
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 |
|---|---|
| cabeçalho | usbscan.h (inclua Usbscan.h) |