Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 |