Interface de solicitação de E/S serial
Para controlar um dispositivo periférico conectado a uma porta em um controlador serial, um aplicativo cliente ou driver de dispositivo periférico envia solicitações de E/S para a porta. Um cliente usa solicitações IRP_MJ_WRITE e IRP_MJ_READ para transmitir dados e receber dados de uma porta serial. Além disso, o Windows define um conjunto de IOCTLs (solicitações de controle de E/S serial) que um cliente pode usar para configurar uma porta serial.
As solicitações serial IRP_MJ_XXX e IOCTLs serial juntas formam uma interface de solicitação de E/S serial com suporte em uma variedade de dispositivos de controlador serial. Essa interface é compatível com o driver Serial.sys e pela combinação de SerCx2 ou SerCx e um driver de controlador serial baseado em extensão.
SerCx2, SerCx e Serial.sys dão suporte a muitas das mesmas IOCTLs seriais. No entanto, SerCx2, SerCx e Serial.sys dão suporte a diferentes subconjuntos das IOCTLs especificadas em Solicitações de Controle de Dispositivo Serial. A tabela a seguir resume os subconjuntos de IOCTLs compatíveis com SerCx2, SerCx e Serial.sys. Uma entrada Sim na tabela indica que a extensão ou driver da estrutura serial dá suporte ao IOCTL correspondente e uma entrada Não indica que não.
Serial IOCTL | SerCx2 | SerCx | Serial.sys |
---|---|---|---|
Sim |
Sim |
Não |
|
Não |
Sim |
Sim |
|
Consulte a observação 1. |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Não |
Não |
Sim |
|
Sim |
Sim |
Sim |
|
Consulte a observação 2. |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Consulte a observação 1. |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
IOCTL_SERIAL_GET_MODEM_CONTROL (consulte a observação 4.) |
Sim |
Sim |
Sim |
Não |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Não |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Não |
Sim |
Sim |
|
Não |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
IOCTL_SERIAL_RESET_DEVICE (consulte a observação 5.) |
Não |
Não |
Sim |
Sim |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Consulte a observação 2. |
Sim |
Sim |
|
Consulte a observação 1. |
Sim |
Sim |
|
Consulte a observação 1. |
Sim |
Sim |
|
IOCTL_SERIAL_SET_HANDFLOW (Consulte a nota 3.) |
Sim |
Sim |
Sim |
Sim |
Sim |
Sim |
|
IOCTL_SERIAL_SET_MODEM_CONTROL (Consulte a nota 4.) |
Sim |
Sim |
Sim |
Sim |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Não |
Sim |
Sim |
|
Não |
Sim |
Sim |
|
Sim |
Sim |
Sim |
|
Não |
Sim |
Sim |
O SerCx2 pode ou não dar suporte a esse IOCTL dependendo da implementação do driver do controlador serial e dos recursos do hardware do controlador serial.
O SerCx2 não dá suporte a caracteres especiais. O SerCx2 sempre conclui uma solicitação de IOCTL_SERIAL_SET_CHARS com um código de status STATUS_SUCCESS, mas não define nenhum caractere especial ou executa qualquer outra operação em resposta a essa solicitação. Para uma solicitação de IOCTL_SERIAL_GET_CHARS , SerCx2 define todos os valores de caractere na estrutura SERIAL_CHARS como nulos e conclui a solicitação com um código de status STATUS_SUCCESS.
O SerCx2 e o SerCx dão suporte apenas aos subconjuntos dos sinalizadores definidos para os membros FlowReplace e ControlHandShake da estrutura SERIAL_HANDFLOW . Serial.sys dá suporte a todos esses sinalizadores. Para obter mais informações, consulte SERIAL_HANDFLOW.
As solicitações de IOCTL_SERIAL_GET_MODEM_CONTROL e IOCTL_SERIAL_SET_MODEM_CONTROL são usadas principalmente para teste de hardware. Nenhum layout de registro padrão é definido para as operações de controle de modem. Os drivers periféricos que usam o controle modem IOCTLs correm o risco de se tornar dependentes dos recursos de hardware de um controlador serial específico.
O driver Serial.sys sempre conclui uma solicitação de IOCTL_SERIAL_RESET_DEVICE com STATUS_SUCCESS, mas não executa nenhuma operação em resposta a essa solicitação. O SerCx2 e o SerCx não dão suporte a solicitações de IOCTL_SERIAL_RESET_DEVICE e sempre concluem essas solicitações com STATUS_NOT_IMPLEMENTED.
Para obter mais informações sobre solicitações IOCTL_SERIAL_XXX e solicitações de leitura e gravação para controladores serial, consulte o cabeçalho ntddser.h .