Compartilhar via


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:

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.

IRPs menores Plug and Play

Regras para lidar com o Power IRPs

Guia de design do driver do controlador serial