Códigos de função principais do IRP serial
Este tópico documenta os códigos de função principais do IRP serial.
Cabeçalho: Wdm.h (inclua Wdm.h ou Ntddk.h)
IRP_MJ_CREATE
A solicitação IRP_MJ_CREATE abre um dispositivo serial.
Quando é enviado
Um cliente deve abrir um dispositivo serial antes de poder acessar a porta ou um dispositivo conectado à porta.
Parâmetros de Entrada
Nenhum.
Parâmetros de saída
Nenhum.
Bloco de status de E/S
O campo Informações é definido como zero.
O campo Status é definido como um dos seguintes valores:
Valor de status | Descrição |
---|---|
STATUS_SUCCESS | O dispositivo serial foi aberto com êxito. |
STATUS_ACCESS_DENIED | O dispositivo já está aberto. |
STATUS_DELETE_PENDING | Serial está no processo de remoção do dispositivo. |
STATUS_INSUFFICIENT_RESOURCES | O dispositivo não está em um estado Plug and Play Iniciado ou o driver não pôde alocar uma estrutura de dados interna. |
STATUS_NOT_A_DIRECTORY | Um dispositivo serial não pode ser aberto como um diretório. |
STATUS_PENDING | Serial enfileirava a solicitação para processamento posterior. |
STATUS_SHARED_IRQ_BUSY | A interrupção atribuída ao dispositivo está em uso por outro dispositivo aberto. |
Operação
Um dispositivo serial deve ser aberto antes de ser usado. Um dispositivo serial é um dispositivo exclusivo; apenas um arquivo pode ser aberto em uma porta a qualquer momento.
IRP_MJ_DEVICE_CONTROL
A solicitação IRP_MJ_DEVICE_CONTROL opera uma porta serial.
Quando é enviado
Um cliente usa solicitações de controle de dispositivo para:
- Obter informações sobre a porta
- Obter e definir registros
- Obter e definir modos operacionais
Para obter uma descrição das solicitações de controle de dispositivo compatíveis com Serial, consulte o cabeçalho ntddser.h .
Parâmetros de entrada
Solicitação específica
Parâmetros de saída
Solicitação específica
Bloco de status de E/S
Solicitação específica
Operação
Solicitação específica
IRP_MJ_FLUSH_BUFFERS
A solicitação IRP_MJ_FLUSH_BUFFER libera o buffer de gravação interno de um dispositivo serial.
Quando é enviado
Um cliente usa uma solicitação de liberação para determinar quando Serial concluiu todas as solicitações de gravação enviadas pelo cliente antes da solicitação de liberação.
Parâmetros de entrada
Nenhum.
Parâmetros de saída
Nenhum.
Bloco de status de E/S
O membro Informações é definido como zero.
O membro Status é definido como um dos seguintes valores de status:
Valor de status | Descrição |
---|---|
STATUS_SUCCESS | A solicitação foi concluída com êxito. |
STATUS_CANCELLED | Um cliente cancelou a solicitação. Serial também cancela uma solicitação se ocorrer um erro de dispositivo e Serial estiver configurado para cancelar uma solicitação se houver um erro de dispositivo. |
STATUS_DELETE_PENDING | O driver está em processo de remoção do dispositivo. |
STATUS_PENDING | Serial enfileirava a solicitação para processamento posterior. |
Operação
Filas serial e inicia o processamento de solicitações de gravação e liberação na ordem em que as solicitações são recebidas. Serial conclui uma solicitação de liberação depois de chamar IoCompleteRequest para todas as solicitações de gravação recebidas antes de uma solicitação de liberação. No entanto, a conclusão da solicitação de liberação não indica que todas as solicitações de gravação iniciadas anteriormente são concluídas por outros drivers na pilha do dispositivo. Por exemplo, um driver de filtro ainda pode estar processando uma solicitação de gravação. Um cliente deve marcar que uma solicitação de gravação seja concluída por todos os drivers na pilha do dispositivo antes que o cliente tente liberar ou reutilizar o IRP de uma solicitação de gravação.
IRP_MJ_INTERNAL_DEVICE_CONTROL
A solicitação IRP_MJ_INTERNAL_DEVICE_CONTROL define modos operacionais internos em um dispositivo serial.
Quando é enviado
Um cliente usa solicitações de controle de dispositivo internas para:
- Obter e redefinir as configurações básicas
- Controlar a operação de espera/ativação
Para obter uma descrição das solicitações de controle de dispositivo internas, consulte o cabeçalho ntddser.h .
Parâmetros de entrada
Solicitação específica
Parâmetros de saída
Solicitação específica
Bloco de status de E/S
Solicitação específica
Operação
Solicitação específica
IRP_MJ_PNP
A solicitação IRP_MJ_PNP dá suporte a Plug and Play.
Quando é enviado
O Gerenciador de PnP envia IRP_MJ_PNP solicitações para consultar dispositivos e para iniciar, parar e remover dispositivos.
Parâmetros de entrada
Solicitação específica
Parâmetros de saída
Solicitação específica
Bloco de status de E/S
Solicitação específica
Operação
Serial dá suporte às seguintes solicitações de Plug and Play:
- IRP_MN_CANCEL_REMOVE_DEVICE
- IRP_MN_CANCEL_STOP_DEVICE
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_CAPABILITIES
- IRP_MN_QUERY_DEVICE_RELATIONS
- IRP_MN_QUERY_ID
- IRP_MN_QUERY_PNP_DEVICE_STATE
- IRP_MN_QUERY_REMOVE_DEVICE
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_STOP_DEVICE
- IRP_MN_REMOVE_DEVICE
- IRP_MN_START_DEVICE
- IRP_MN_STOP_DEVICE
- IRP_MN_SURPRISE_REMOVAL
Serial envia todas as outras solicitações Plug and Play para baixo na pilha do dispositivo sem processamento adicional.
Serial executa o seguinte processamento específico de série para solicitações de Plug and Play:
IRP_MN_QUERY_ID (digite BusQueryHardwardIDs)
Se um dispositivo serial estiver em um cartão ISA multiport, Serial acrescentará a cadeia de caracteres largos "*PNP0502" à cadeia de caracteres de IDs de hardware.
IRP_MN_FILTER_RESOURCE_REQUIREMENTS
Os dispositivos serial em um ISA multiport cartão compartilham a mesma interrupção status registro e a mesma interrupção.
Para obter uma descrição da operação genérica de solicitações de Plug and Play, consulte Plug and Play IRPs menores.
IRP_MJ_POWER
A solicitação IRP_MJ_POWER controla o gerenciamento de energia.
Quando é enviado
O power manager usa solicitações de energia para consultar e definir estados de energia.
Parâmetros de entrada
Solicitação específica
Parâmetros de saída
Solicitação específica
Bloco de status de E/S
Solicitação específica
Operação
Serial dá suporte às seguintes solicitações de energia:
Serial envia todas as outras solicitações de energia para baixo na pilha do dispositivo a serem concluídas por um driver de nível inferior.
Serial é o proprietário da política de energia padrão para uma pilha de dispositivo serial que usa Serial como um driver de função ou um driver de filtro de nível inferior.
Para obter mais informações sobre a operação genérica dessas solicitações, consulte Regras para lidar com POWER IRPs.
IRP_MJ_QUERY_INFORMATION
O IRP_MJ_QUERY_INFORMATION solicitação consulta as informações de fim do arquivo para um dispositivo serial.
Quando é enviado
Um cliente usa uma solicitação de informações de consulta para obter informações padrão e informações de posição sobre um arquivo aberto em um dispositivo serial.
Parâmetros de entrada
O Parameters.QueryFile.FileInformationClass é definido como FileStandardInformation ou FilePositionInformation.
Parâmetros de saída
Parâmetro | Descrição |
---|---|
FileStandardInformation | O membro AssociatedIrp.SystemBuffer aponta para uma estrutura de FILE_STANDARD_INFORMATION alocada pelo cliente que Serial usa para gerar informações padrão. |
FilePositionInformation | O membro AssociatedIrp.SystemBuffer aponta para uma estrutura de FILE_POSITION_INFORMATION alocada pelo cliente que Serial usa para gerar informações de posição. |
Bloco de status de E/S
Se a solicitação for bem-sucedida, o membro Informações será definido como zero.
O membro Status é definido como um dos seguintes valores de status:
Valor de status | Descrição |
---|---|
STATUS_SUCCESS | A solicitação foi concluída com êxito. |
STATUS_CANCELLED | Um cliente cancelou a solicitação. Serial também cancela uma solicitação se ocorrer um erro de dispositivo e Serial estiver configurado para cancelar uma solicitação se houver um erro de dispositivo. |
STATUS_DELETE_PENDING | Serial está no processo de remoção do dispositivo. |
STATUS_INVALID_PARAMETER | Não há suporte para as informações solicitadas. |
STATUS_PENDING | Serial enfileirava a solicitação para processamento posterior. |
Operação
Serial dá suporte a solicitações do tipo FileStandardInformation e FilePositionInformation.
As informações de arquivo padrão são sempre definidas como zero ou FALSE, conforme apropriado. As informações de posição são sempre definidas como zero.
IRP_MJ_READ
Uma solicitação IRP_MJ_READ transfere dados de um dispositivo serial para um cliente.
Quando é enviado
Um cliente usa uma solicitação de leitura sempre que lê dados em um dispositivo serial.
Parâmetros de entrada
O membro Parameters.Read.Length é definido como o número de bytes a serem transferidos para o buffer de leitura do cliente.
Parâmetros de saída
O membro AssociatedIrp.SystemBuffer aponta para um buffer de leitura alocado pelo cliente para o qual Serial copia dados lidos no dispositivo serial.
Bloco de status de E/S
O membro Information é definido como o número de bytes transferidos para o buffer de leitura do cliente.
O membro Status é definido como um dos seguintes valores:
Valor de status | Descrição |
---|---|
STATUS_SUCCESS | A solicitação foi concluída com êxito. |
STATUS_CANCELLED | Um cliente cancelou a solicitação. Serial também cancela uma solicitação se ocorrer um erro de dispositivo e Serial estiver configurado para cancelar uma solicitação se houver um erro de dispositivo. |
STATUS_DELETE_PENDING | Serial está no processo de remoção do dispositivo. |
STATUS_PENDING | Serial enfileira a solicitação para processamento posterior. |
STATUS_TIMEOUT | O tempo para concluir a solicitação excedeu o valor total de tempo limite ou o valor de tempo limite do intervalo. |
Operação
Um cliente pode usar eventos de tempo limite para encerrar uma solicitação de leitura. Observe, no entanto, que quando um dispositivo serial é aberto, as configurações de tempo limite para o dispositivo são indefinidas. Um cliente no modo kernel pode usar um IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS para definir parâmetros de tempo limite como zero (nenhum evento de tempo limite é usado). Os clientes do modo de usuário e do modo kernel podem usar uma solicitação IOCTL_SERIAL_SET_TIMEOUTS para definir parâmetros de tempo limite.
Para obter mais informações sobre tempos limite de leitura e gravação, consulte Configurando tempos limite de leitura e gravação para um dispositivo serial.
IRP_MJ_SET_INFORMATION
A solicitação IRP_MJ_SET_INFORMATION define as informações de fim do arquivo sobre um dispositivo serial.
Quando é enviado
Um cliente usa uma solicitação de informações definidas para alterar a posição atual do fim do arquivo de um arquivo aberto em um dispositivo serial.
Parâmetros de entrada
O membro Parameters.SetFile.FileInformationClass é definido como FileEndOfFileInformation ou FileAllocationInformation.
Parâmetros de saída
Nenhum.
Bloco de status de E/S
Se a solicitação for bem-sucedida, o membro Informações será definido como zero.
O membro Status é definido como um dos seguintes valores de status:
Valor de status | Descrição |
---|---|
STATUS_SUCCESS | A solicitação foi concluída com êxito. |
STATUS_CANCELLED | Um cliente cancelou a solicitação. Serial também cancela uma solicitação se ocorrer um erro de dispositivo e Serial estiver configurado para cancelar uma solicitação se houver um erro de dispositivo. |
STATUS_DELETE_PENDING | Serial está em processo de remoção do dispositivo. |
STATUS_INVALID_PARAMETER | Não há suporte para as informações de fim de arquivo especificadas. |
STATUS_PENDING | Serial enfileira a solicitação para processamento posterior. |
Operação
Serial dá suporte a solicitações do tipo FileEndOfFileInformation e FileAllocationInformation. No entanto, Serial não define informações de arquivo. A posição de fim do arquivo é sempre definida como zero.
IRP_MJ_SYSTEM_CONTROL
A solicitação IRP_MJ_SYSTEM_CONTROL dá suporte a solicitações WMI.
Quando é enviado
Um componente do modo kernel WMI pode enviar uma solicitação de IRP_MJ_SYSTEM_CONTROL a qualquer momento após o registro serial como um provedor WMI para um dispositivo serial. Normalmente, os IRPs WMI são enviados quando um consumidor de dados no modo de usuário solicita dados WMI.
Parâmetros de entrada
Solicitação específica
Parâmetros de saída
Solicitação específica
Bloco de status de E/S
Para solicitações WMI, Serial define o campo Status como um dos seguintes valores:
Valor de status | Descrição |
---|---|
STATUS_SUCCESS | A solicitação foi concluída com êxito. |
STATUS_BUFFER_TOO_SMALL | O tamanho, em bytes, do buffer de saída é menor que o tamanho necessário das informações solicitadas. |
STATUS_INSUFFICIENT_RESOURCES | Não havia recursos suficientes do sistema para salvar o nome da porta serial. |
STATUS_INVALID_DEVICE_REQUEST | A solicitação não é válida. |
STATUS_WMI_GUID_NOT_FOUND | Não há suporte para o GUID do WMI. |
Operação
Serial usa WmiSystemControl para lidar com solicitações de controle do sistema WMI. Serial registra os seguintes tipos de rotinas de retorno de chamada da biblioteca WMI, que WmiSystemControl chama para lidar com solicitações WMI enviadas a um dispositivo:
Serial não dá suporte a nenhuma outra solicitação de controle do sistema. Para solicitações não WMI, Serial ignora o local da pilha atual e envia a solicitação para baixo na pilha do dispositivo.
Serial registra o GUIDS WMI descrito na tabela a seguir.
Estrutura de dados associada ao GUID do WMI serial
SERIAL_PORT_WMI_NAME_GUID | USHORT seguido por um WCSTR |
---|---|
SERIAL_PORT_WMI_COMM_GUID | SERIAL_WMI_COMM_DATA |
SERIAL_PORT_WMI_HW_GUID | SERIAL_WMI_HW_DATA |
SERIAL_PORT_WMI_PERF_GUID | SERIAL_WMI_PERF_DATA |
SERIAL_PORT_WMI_PROPERTIES_GUID | WMI_SERIAL_PORT_PROPERTIES |
O nome WMI de um dispositivo serial é o valor de entrada PortName na chave do registro Plug and Play para o dispositivo.
IRP_MJ_WRITE
Uma solicitação IRP_MJ_WRITE transfere dados de um cliente para um dispositivo serial.
Quando é enviado
Um cliente usa uma solicitação de gravação sempre que grava dados em um dispositivo serial.
Parâmetros de entrada
O membro Parameters.Write.Length é definido como o número de bytes a serem copiados de um buffer de gravação alocado pelo cliente para um dispositivo serial.
O membro AssociatedIrp.SystemBuffer aponta para um buffer de gravação alocado pelo cliente do qual Serial copia dados para o dispositivo serial.
Parâmetros de saída
Nenhum.
Bloco de status de E/S
O membro Information é definido como o número de bytes realmente copiados do buffer de gravação do cliente para o dispositivo serial.
O membro Status é definido como um dos seguintes valores:
Valor de status | Descrição |
---|---|
STATUS_SUCCESS | A solicitação foi concluída com êxito. |
STATUS_CANCELLED | Um cliente cancelou a solicitação. Serial também cancela uma solicitação se ocorrer um erro de dispositivo e Serial estiver configurado para cancelar uma solicitação se houver um erro de dispositivo. |
STATUS_DELETE_PENDING | Serial está no processo de remoção do dispositivo. |
STATUS_PENDING | Serial enfileirava a solicitação para processamento posterior. |
STATUS_TIMEOUT | O tempo total permitido para a solicitação de gravação foi excedido. |
Operação
Um cliente pode usar eventos de tempo limite para encerrar uma solicitação de gravação. Observe, no entanto, que quando um dispositivo serial é aberto, os eventos de tempo limite definidos em um dispositivo são indefinidos. Um cliente no modo kernel pode usar um IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS para definir parâmetros de tempo limite como zero (nenhum evento de tempo limite é usado) e uma solicitação de IOCTL_SERIAL_SET_TIMEOUTS para definir parâmetros de tempo limite. Para obter mais informações sobre tempos limite de leitura e gravação, consulte Configurando tempos limite de leitura e gravação para um dispositivo serial.