Compartilhar via


SerCx2 Manipulação de solicitações de leitura e gravação

Um driver periférico envia solicitações de gravação (IRP_MJ_WRITE) e leitura (IRP_MJ_READ) para uma porta em um controlador serial para transferir dados de e para um dispositivo periférico conectado à porta. A maneira como o SerCx2 lida com essas solicitações é bem definida, mesmo quando as solicitações atingirem o tempo limite ou forem canceladas.

Cancelamento de uma solicitação de leitura ou gravação

Antes que uma solicitação de leitura ou gravação possa ser concluída, essa solicitação pode ser cancelada pelo sistema operacional ou pelo driver periférico que enviou a solicitação. Se o cancelamento ocorrer antes que o SerCx2 transfira dados para a solicitação, o SerCx2 concluirá a solicitação com o código STATUS_CANCELLED status.

No entanto, se a solicitação de leitura ou gravação for cancelada depois que um ou mais bytes de dados forem transferidos para a solicitação, mas antes que todos os dados da solicitação sejam transferidos, o SerCx2 concluirá a solicitação com o código STATUS_SUCCESS status. A solicitação concluída relata o número de bytes lidos ou gravados pelo SerCx2 durante o tratamento da solicitação. Se necessário, o driver periférico que enviou a solicitação pode usar essas informações para enviar uma segunda solicitação para concluir a operação de leitura ou gravação parcialmente concluída.

Solicitações que atingiram o tempo limite

Se uma solicitação de leitura ou gravação puder atingir o tempo limite se a solicitação demorar muito para ser processada. Além disso, uma solicitação de leitura poderá atingir o tempo limite se o tempo entre dois bytes sucessivos recebidos pelo controlador serial exceder algum tempo máximo permitido. Em ambos os casos, quando a condição de tempo limite é detectada, o SerCx2 conclui imediatamente a solicitação com o código STATUS_TIMEOUT status. A solicitação concluída relata o número de bytes lidos ou gravados pelo SerCx2 durante o tratamento da solicitação. Se necessário, o driver periférico que enviou a solicitação pode usar essas informações para enviar uma segunda solicitação para concluir a operação de leitura ou gravação parcialmente concluída. Para obter mais informações sobre tempos limite, consulte SERIAL_TIMEOUTS.

Impacto das limitações de hardware

Normalmente, o SerCx2 relata com precisão o número de bytes transferidos por uma solicitação de leitura ou gravação que atinge o tempo limite ou é cancelado. No entanto, alguns hardwares usados para executar transações de DMA do sistema podem não contar com precisão o número de bytes transferidos por uma transação de leitura ou gravação parcialmente concluída. Nesse caso, a solicitação de leitura ou gravação associada pode relatar apenas uma contagem aproximada dos bytes transferidos.

Solicitações para transferir zero bytes

Em resposta a uma solicitação de leitura ou gravação para transferir zero bytes, o SerCx2 conclui a solicitação com um código STATUS_SUCCESS status, mas não executa nenhuma operação.