Compartir a través de


Función ReadPort (winsplp.h)

La función ReadPort del monitor de puertos lee los datos de un puerto de impresora.

Sintaxis

BOOL ReadPort(
  _In_  HANDLE  hPort,
  _Out_ LPBYTE  pBuffer,
        DWORD   cbBuffer,
  _Out_ LPDWORD pcbRead
);

Parámetros

[in] hPort

Identificador de puerto proporcionado por el autor de la llamada.

[out] pBuffer

Puntero proporcionado por el autor de la llamada a un búfer para recibir datos leídos del puerto.

cbBuffer

Tamaño proporcionado por el autor de la llamada, en bytes, de pBuffer.

[out] pcbRead

Puntero proporcionado por el autor de la llamada a una ubicación para recibir el número de bytes leídos correctamente desde el puerto.

Valor devuelto

Si la operación se realiza correctamente, la función debe devolver TRUE. De lo contrario, debe devolver FALSE.

Observaciones

Los monitores de lenguaje y archivos DLL del servidor de supervisión de puertos son necesarios para definir una función de ReadPort e incluir la dirección de la función en una estructura de MONITOR2.

El identificador recibido como argumento de hPort de la función es el identificador de puerto proporcionado por la función openPort o OpenPortEx del monitor.

Normalmente, la función ReadPort del monitor de lenguaje llama a la función ReadPort del monitor de puerto asociado y devuelve el contenido del búfer obtenido al autor de la llamada.

Además, un monitor de lenguaje puede crear un subproceso independiente que llame a la función ReadPort del monitor de puertos para comprobar si hay información de estado no solicitada. Si esta operación de lectura se realiza correctamente, la información de estado se debe devolver al administrador de colas llamando a SetPort (que se describe en la documentación del SDK de Microsoft Windows).

Normalmente, una DLL del servidor de supervisión de puertos ReadPort llama a readFile (que se describe en la documentación de Windows SDK) para obtener datos del controlador de puerto en modo kernel. La función simplemente devuelve los datos al autor de la llamada.

Aunque tanto los monitores de lenguaje como los monitores de puerto deben definir funciones de ReadPort y colocar sus direcciones en estructuras MONITOR2, la función de ReadPort de un monitor de lenguaje nunca la llama realmente el administrador de colas o una aplicación. La función es únicamente para el uso interno del propio monitor de idioma.

Por ejemplo, pjlmon.dll, el monitor de lenguaje de ejemplo, crea un subproceso independiente que llama a su propio ReadPort para ver la información de estado de la impresora no solicitada y la función ReadPort llama a la función de ReadPort del monitor de puerto. Cuando el monitor de puerto devuelve datos al monitor de idioma, el monitor de idioma analiza los datos recibidos y llama a SetPort (que se describe en la documentación de Windows SDK) para enviar información de estado al administrador de colas.

La función debe devolver el número de bytes leídos correctamente colocando el número en la ubicación a la que apunta pcbRead. El autor de la llamada determina el éxito o error de la operación de escritura comprobando ReadPort's valor devuelto, no el recuento de bytes devuelto. Por lo tanto, un recuento de bytes devuelto de cero no representa una lectura errónea a menos que la función devuelva FALSE.

Algún tipo de mecanismo de tiempo de espera implementado por el sistema o supervisado debe asegurarse de que la función ReadPort devolverá dentro de un período de tiempo razonable, para evitar detener el colado.

Es aceptable que un monitor de idioma llame a la rutina de ReadPort de un monitor de puerto fuera de un par de StartDocPort/EndDocPort. (Es posible que una llamada de este tipo se genere mediante una comprobación de subprocesos para el estado no solicitado). Sin embargo, algunos monitores de puerto pueden producir un error en esta llamada, por lo que el monitor de idioma debe escribirse para controlar este error.

Requisitos

Requisito Valor
de la plataforma de destino de Escritorio
encabezado de winsplp.h (incluya Winsplp.h)
biblioteca de NtosKrnl.exe

Consulte también

GetPrinterDataFromPort

StartDocPort de

OpenPortEx

OpenPort

EndDocPort de