Compartir a través de


Códigos de función principales de IRP serie

En este tema se documentan los códigos de función principales de IRP serie.

Encabezado: Wdm.h (incluya Wdm.h o Ntddk.h)

IRP_MJ_CREATE

La solicitud de IRP_MJ_CREATE abre un dispositivo serie.

Cuándo se envía

Un cliente debe abrir un dispositivo serie para poder acceder al puerto o a un dispositivo conectado al puerto.

Parámetros de entrada

Ninguno.

Parámetros de salida

Ninguno.

Bloque de estado de E/S

El campo Información se establece en cero.

El campo Estado se establece en uno de los valores siguientes:

Valor de estado Descripción
STATUS_SUCCESS El dispositivo serie se abrió correctamente.
STATUS_ACCESS_DENIED El dispositivo ya está abierto.
STATUS_DELETE_PENDING La serie está en proceso de quitar el dispositivo.
STATUS_INSUFFICIENT_RESOURCES El dispositivo no está en un estado Plug and Play Iniciado o el controlador no pudo asignar una estructura de datos interna.
STATUS_NOT_A_DIRECTORY No se puede abrir un dispositivo serie como directorio.
STATUS_PENDING En serie se pone en cola la solicitud para su procesamiento posterior.
STATUS_SHARED_IRQ_BUSY Otra interrupción asignada al dispositivo está en uso por otro dispositivo abierto.

Operación

Se debe abrir un dispositivo serie para poder usarlo. Un dispositivo serie es un dispositivo exclusivo; solo se puede abrir un archivo en un puerto en un momento dado.

IRP_MJ_DEVICE_CONTROL

La solicitud IRP_MJ_DEVICE_CONTROL opera un puerto serie.

Cuándo se envía

Un cliente usa solicitudes de control de dispositivos para:

  • Obtención de información sobre el puerto
  • Obtención y establecimiento de registros
  • Obtención y establecimiento de modos de funcionamiento

Para obtener una descripción de las solicitudes de control de dispositivo compatibles con Serial, consulte el encabezado ntddser.h .

Parámetros de entrada

Solicitud específica

Parámetros de salida

Solicitud específica

Bloque de estado de E/S

Solicitud específica

Operación

Solicitud específica

IRP_MJ_FLUSH_BUFFERS

La solicitud IRP_MJ_FLUSH_BUFFER vacía el búfer de escritura interno de un dispositivo serie.

Cuándo se envía

Un cliente usa una solicitud de vaciado para determinar cuándo Serial ha completado todas las solicitudes de escritura que el cliente envió antes de la solicitud de vaciado.

Parámetros de entrada

Ninguno.

Parámetros de salida

Ninguno.

Bloque de estado de E/S

El miembro Information se establece en cero.

El miembro Status se establece en uno de los siguientes valores de estado:

Valor de estado Descripción
STATUS_SUCCESS La solicitud se completó correctamente.
STATUS_CANCELLED Un cliente canceló la solicitud. Serial también cancela una solicitud si se produce un error de dispositivo y Serial está configurado para cancelar una solicitud si se produce un error de dispositivo.
STATUS_DELETE_PENDING El controlador está en proceso de quitar el dispositivo.
STATUS_PENDING En serie se pone en cola la solicitud para su procesamiento posterior.

Operación

Las colas serie e inician el procesamiento de solicitudes de escritura y vaciado en el orden en que se reciben las solicitudes. Serial completa una solicitud de vaciado después de llamar a IoCompleteRequest para todas las solicitudes de escritura que recibió antes de una solicitud de vaciado. Sin embargo, la finalización de la solicitud de vaciado no indica que otros controladores de la pila de dispositivos completan todas las solicitudes de escritura iniciadas anteriormente. Por ejemplo, un controlador de filtro podría seguir procesando una solicitud de escritura. Un cliente debe comprobar que todos los controladores de la pila de dispositivos completan una solicitud de escritura antes de que el cliente intente liberar o reutilizar el IRP de una solicitud de escritura.

IRP_MJ_INTERNAL_DEVICE_CONTROL

La solicitud IRP_MJ_INTERNAL_DEVICE_CONTROL establece los modos de funcionamiento internos en un dispositivo serie.

Cuándo se envía

Un cliente usa solicitudes de control de dispositivos internas para:

  • Obtención y restablecimiento de la configuración básica
  • Control de la operación de espera/reactivación

Para obtener una descripción de las solicitudes de control de dispositivos internos, consulte el encabezado ntddser.h .

Parámetros de entrada

Solicitud específica

Parámetros de salida

Solicitud específica

Bloque de estado de E/S

Solicitud específica

Operación

Solicitud específica

IRP_MJ_PNP

La solicitud IRP_MJ_PNP admite Plug and Play.

Cuándo se envía

El Administrador de PnP envía IRP_MJ_PNP solicitudes para consultar dispositivos y para iniciar, detener y quitar dispositivos.

Parámetros de entrada

Solicitud específica

Parámetros de salida

Solicitud específica

Bloque de estado de E/S

Solicitud específica

Operación

Serial admite las siguientes solicitudes de Plug and Play:

Serial envía todas las demás solicitudes de Plug and Play a la pila del dispositivo sin procesamiento adicional.

Serial realiza el siguiente procesamiento específico de serie para las solicitudes de Plug and Play:

IRP_MN_QUERY_ID (tipo BusQueryHardwardIDs)

Si un dispositivo serie está en una tarjeta ISA multiporte, Serial anexa la cadena de caracteres anchos "*PNP0502" a la cadena de identificadores de hardware.

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

Los dispositivos serie en una tarjeta ISA multiporte comparten el mismo registro de estado de interrupción y la misma interrupción.

Para obtener una descripción de la operación genérica de las solicitudes de Plug and Play, consulte Plug and Play IRP secundarias.

IRP_MJ_POWER

La solicitud IRP_MJ_POWER controla la administración de energía.

Cuándo se envía

El administrador de energía usa solicitudes de energía para consultar y establecer estados de energía.

Parámetros de entrada

Solicitud específica

Parámetros de salida

Solicitud específica

Bloque de estado de E/S

Solicitud específica

Operación

Serial admite las siguientes solicitudes de alimentación:

Serial envía todas las demás solicitudes de alimentación a la pila de dispositivos para que la complete un controlador de nivel inferior.

Serial es el propietario predeterminado de la directiva de energía para una pila de dispositivos serie que usa Serial como controlador de función o un controlador de filtro de nivel inferior.

Para obtener más información sobre el funcionamiento genérico de estas solicitudes, consulte Reglas para controlar los IRP de Power.

IRP_MJ_QUERY_INFORMATION

La IRP_MJ_QUERY_INFORMATION solicitud consulta la información de fin de archivo de un dispositivo serie.

Cuándo se envía

Un cliente usa una solicitud de información de consulta para obtener información estándar y la información de posición sobre un archivo abierto en un dispositivo serie.

Parámetros de entrada

Parameters.QueryFile.FileInformationClass se establece en FileStandardInformation o FilePositionInformation.

Parámetros de salida

Parámetro Descripción
FileStandardInformation El miembro AssociatedIrp.SystemBuffer apunta a una estructura de FILE_STANDARD_INFORMATION asignada por el cliente que serial usa para generar información estándar.
FilePositionInformation El miembro AssociatedIrp.SystemBuffer apunta a una estructura de FILE_POSITION_INFORMATION asignada por el cliente que serial usa para generar información de posición.

Bloque de estado de E/S

Si la solicitud se realiza correctamente, el miembro Information se establece en cero.

El miembro Status se establece en uno de los siguientes valores de estado:

Valor de estado Descripción
STATUS_SUCCESS La solicitud se completó correctamente.
STATUS_CANCELLED Un cliente canceló la solicitud. Serial también cancela una solicitud si se produce un error de dispositivo y Serial está configurado para cancelar una solicitud si se produce un error de dispositivo.
STATUS_DELETE_PENDING La serie está en proceso de quitar el dispositivo.
STATUS_INVALID_PARAMETER No se admite la información solicitada.
STATUS_PENDING Serial ha en cola la solicitud para su posterior procesamiento.

Operación

Serial admite solicitudes de tipo FileStandardInformation y FilePositionInformation.

La información del archivo estándar siempre se establece en cero o FALSE, según corresponda. La información de posición siempre se establece en cero.

IRP_MJ_READ

Una IRP_MJ_READ solicitud transfiere datos de un dispositivo serie a un cliente.

Cuándo se envía

Un cliente usa una solicitud de lectura cada vez que lee datos en un dispositivo serie.

Parámetros de entrada

El miembro Parameters.Read.Length se establece en el número de bytes que se van a transferir al búfer de lectura del cliente.

Parámetros de salida

El miembro AssociatedIrp.SystemBuffer apunta a un búfer de lectura asignado por el cliente al que Serial copia los datos leídos en el dispositivo serie.

Bloque de estado de E/S

El miembro Information se establece en el número de bytes transferidos al búfer de lectura del cliente.

El miembro Status se establece en uno de los valores siguientes:

Valor de estado Descripción
STATUS_SUCCESS La solicitud se completó correctamente.
STATUS_CANCELLED Un cliente canceló la solicitud. Serial también cancela una solicitud si se produce un error de dispositivo y Serial está configurado para cancelar una solicitud si se produce un error de dispositivo.
STATUS_DELETE_PENDING La serie está en proceso de quitar el dispositivo.
STATUS_PENDING En serie se pone en cola la solicitud para su procesamiento posterior.
STATUS_TIMEOUT El tiempo de finalización de la solicitud superó el valor de tiempo de espera total o el valor de tiempo de espera del intervalo.

Operación

Un cliente puede usar eventos de tiempo de espera para finalizar una solicitud de lectura. Sin embargo, tenga en cuenta que, cuando se abre un dispositivo serie, la configuración de tiempo de espera del dispositivo no está definida. Un cliente en modo kernel puede usar un IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS para establecer parámetros de tiempo de espera en cero (no se usan eventos de tiempo de espera). Los clientes en modo de usuario y en modo kernel pueden usar una solicitud de IOCTL_SERIAL_SET_TIMEOUTS para establecer parámetros de tiempo de espera.

Para obtener más información sobre los tiempos de espera de lectura y escritura, vea Establecer tiempos de espera de lectura y escritura para un dispositivo serie.

IRP_MJ_SET_INFORMATION

La solicitud IRP_MJ_SET_INFORMATION establece la información de fin de archivo sobre un dispositivo serie.

Cuándo se envía

Un cliente usa una solicitud de información establecida para cambiar la posición actual del final del archivo de un archivo abierto en un dispositivo serie.

Parámetros de entrada

El miembro Parameters.SetFile.FileInformationClass se establece en FileEndOfFileInformation o FileAllocationInformation.

Parámetros de salida

Ninguno.

Bloque de estado de E/S

Si la solicitud se realiza correctamente, el miembro Information se establece en cero.

El miembro Status se establece en uno de los siguientes valores de estado:

Valor de estado Descripción
STATUS_SUCCESS La solicitud se completó correctamente.
STATUS_CANCELLED Un cliente canceló la solicitud. Serial también cancela una solicitud si se produce un error de dispositivo y Serial está configurado para cancelar una solicitud si se produce un error de dispositivo.
STATUS_DELETE_PENDING La serie está en proceso de quitar el dispositivo.
STATUS_INVALID_PARAMETER No se admite la información de fin de archivo especificada.
STATUS_PENDING En serie se pone en cola la solicitud para su procesamiento posterior.

Operación

Serial admite solicitudes de tipo FileEndOfFileInformation y FileAllocationInformation. Sin embargo, Serial no establece realmente información de archivo. La posición del final del archivo siempre se establece en cero.

IRP_MJ_SYSTEM_CONTROL

La solicitud IRP_MJ_SYSTEM_CONTROL admite solicitudes WMI.

Cuándo se envía

Un componente en modo kernel de WMI puede enviar una solicitud de IRP_MJ_SYSTEM_CONTROL en cualquier momento después de que serial se registre como proveedor WMI para un dispositivo serie. Los IRP de WMI normalmente se envían cuando un consumidor de datos en modo de usuario ha solicitado datos WMI.

Parámetros de entrada

Solicitud específica

Parámetros de salida

Solicitud específica

Bloque de estado de E/S

Para las solicitudes WMI, Serial establece el campo Estado en uno de los valores siguientes:

Valor de estado Descripción
STATUS_SUCCESS La solicitud se completó correctamente.
STATUS_BUFFER_TOO_SMALL El tamaño, en bytes, del búfer de salida es menor que el tamaño necesario de la información solicitada.
STATUS_INSUFFICIENT_RESOURCES No había recursos del sistema suficientes para guardar el nombre del puerto serie.
STATUS_INVALID_DEVICE_REQUEST La solicitud no es válida.
STATUS_WMI_GUID_NOT_FOUND No se admite el GUID de WMI.

Operación

Serial usa WmiSystemControl para controlar las solicitudes de control del sistema WMI. Serial registra los siguientes tipos de rutinas de devolución de llamada de la biblioteca WMI, que WmiSystemControl llama a para controlar las solicitudes WMI enviadas a un dispositivo:

Serial no admite ninguna otra solicitud de control del sistema. En el caso de las solicitudes que no son WMI, Serial omite la ubicación de la pila actual y envía la solicitud a la pila del dispositivo.

Serial registra los GUID de WMI descritos en la tabla siguiente.

Estructura de datos asociada del GUID de WMI serie

SERIAL_PORT_WMI_NAME_GUID USHORT seguido de un 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

El nombre WMI de un dispositivo serie es el valor del valor de entrada PortName en la clave del Registro Plug and Play para el dispositivo.

IRP_MJ_WRITE

Una solicitud IRP_MJ_WRITE transfiere datos de un cliente a un dispositivo serie.

Cuándo se envía

Un cliente usa una solicitud de escritura cada vez que escribe datos en un dispositivo serie.

Parámetros de entrada

El miembro Parameters.Write.Length se establece en el número de bytes que se van a copiar desde un búfer de escritura asignado por el cliente a un dispositivo serie.

El miembro AssociatedIrp.SystemBuffer apunta a un búfer de escritura asignado por el cliente desde el que Serial copia datos en el dispositivo serie.

Parámetros de salida

Ninguno.

Bloque de estado de E/S

El miembro Information se establece en el número de bytes copiados realmente del búfer de escritura del cliente en el dispositivo serie.

El miembro Status se establece en uno de los siguientes valores:

Valor de estado Descripción
STATUS_SUCCESS La solicitud se completó correctamente.
STATUS_CANCELLED Un cliente canceló la solicitud. Serial también cancela una solicitud si se produce un error de dispositivo y Serial está configurado para cancelar una solicitud si se produce un error de dispositivo.
STATUS_DELETE_PENDING La serie está en proceso de quitar el dispositivo.
STATUS_PENDING Serial ha en cola la solicitud para su posterior procesamiento.
STATUS_TIMEOUT Se superó el tiempo total permitido para la solicitud de escritura.

Operación

Un cliente puede usar eventos de tiempo de espera para finalizar una solicitud de escritura. Sin embargo, tenga en cuenta que, cuando se abre un dispositivo serie, los eventos de tiempo de espera establecidos en un dispositivo no están definidos. Un cliente en modo kernel puede usar un IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS para establecer parámetros de tiempo de espera en cero (no se usan eventos de tiempo de espera) y una solicitud de IOCTL_SERIAL_SET_TIMEOUTS para establecer parámetros de tiempo de espera. Para obtener más información sobre los tiempos de espera de lectura y escritura, consulte Establecer tiempos de espera de lectura y escritura para un dispositivo serie.

IRP secundarias de Plug and Play

Reglas para controlar los IRP de power

Guía de diseño del controlador de serie