Estructura monitor (winsplp.h)

Precaución

La estructura monitor está obsoleta y solo se admite por motivos de compatibilidad. Los nuevos monitores de impresión deben implementar MONITOR2 para que se puedan usar con clústeres de servidores de impresión.

La estructura MONITOR contiene punteros a las funciones definidas por monitores de impresión.

Sintaxis

typedef struct _MONITOR {
  BOOL( )(LPWSTR pName,DWORD Level,LPBYTE pPorts,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)  *pfnEnumPorts;
  BOOL( )(LPWSTR pName,PHANDLE pHandle)  *pfnOpenPort;
  BOOL()(LPWSTR pPortName,LPWSTR pPrinterName,PHANDLE pHandle,_MONITOR *pMonitor)  * pfnOpenPortEx;
  BOOL( )(HANDLE hPort,LPWSTR pPrinterName,DWORD JobId,DWORD Level,LPBYTE pDocInfo)  *pfnStartDocPort;
  BOOL( )(HANDLE hPort,LPBYTE pBuffer,DWORD cbBuf,LPDWORD pcbWritten)  *pfnWritePort;
  BOOL( )(HANDLE hPort,LPBYTE pBuffer,DWORD cbBuffer,LPDWORD pcbRead)  *pfnReadPort;
  BOOL( )(HANDLE hPort)  *pfnEndDocPort;
  BOOL( )(HANDLE hPort)  *pfnClosePort;
  BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pMonitorName)  *pfnAddPort;
  BOOL( )(LPWSTR pName,DWORD Level,LPBYTE lpBuffer,LPWSTR lpMonitorName)  *pfnAddPortEx;
  BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pPortName)  *pfnConfigurePort;
  BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pPortName)  *pfnDeletePort;
  BOOL( )(HANDLE hPort,DWORD ControlID,LPWSTR pValueName,LPWSTR lpInBuffer,DWORD cbInBuffer,LPWSTR lpOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbReturned)  *pfnGetPrinterDataFromPort;
  BOOL( )(HANDLE hPort,LPCOMMTIMEOUTS lpCTO,DWORD reserved)  *pfnSetPortTimeOuts;
  BOOL( )(LPCWSTR pszObject,ACCESS_MASK GrantedAccess,PHANDLE phXcv)  *pfnXcvOpenPort;
  DWORD( )(HANDLE hXcv,LPCWSTR pszDataName,PBYTE pInputData,DWORD cbInputData,PBYTE pOutputData,DWORD cbOutputData,PDWORD pcbOutputNeeded) *pfnXcvDataPort;
  BOOL( )(HANDLE hXcv)  *pfnXcvClosePort;
} MONITOR, *LPMONITOR;

Miembros

pfnEnumPorts

Una función EnumPorts del archivo DLL del servidor de supervisión de puertos enumera los puertos que admite el monitor de puertos.

pfnOpenPort

Puntero a la función OpenPort del monitor de impresión.

pfnOpenPortEx

La función de un monitor de OpenPortEx lenguaje abre un puerto de impresora.

pfnStartDocPort

La función de un monitor de StartDocPort impresión realiza las tareas necesarias para iniciar un trabajo de impresión en el puerto especificado.

pfnWritePort

Puntero a la función WritePort del monitor de impresión.

pfnReadPort

Puntero a la función ReadPort del monitor de impresión.

pfnEndDocPort

La función EndDocPort de un monitor de impresión realiza las tareas necesarias para finalizar un trabajo de impresión en el puerto especificado.

pfnClosePort

Puntero a la función ClosePort del monitor de impresión.

pfnAddPort

Precaución

La función AddPort está obsoleta y no debe usarse.

AddPort crea un puerto y lo agrega a la lista de puertos admitidos actualmente por el monitor especificado en el entorno de cola.

pfnAddPortEx

(Obsoleto. Debe ser NULL). Puntero a la función AddPortEx del monitor de impresión. (Solo monitores de puerto).

pfnConfigurePort

Precaución

La función ConfigurePort está obsoleta y no debe usarse. Use ConfigurePortUI en su lugar.

ConfigurePort es una función de administración de puertos que configura el puerto especificado.

pfnDeletePort

Precaución

La función DeletePort está obsoleta y no debe usarse.

DeletePort elimina un puerto del entorno del monitor.

pfnGetPrinterDataFromPort

La función GetPrinterDataFromPort de un monitor de puerto obtiene información de estado de una impresora bidireccional y la devuelve al autor de la llamada.

pfnSetPortTimeOuts

Una función del archivo DLL del servidor de supervisión de SetPortTimeOuts puertos establece los valores de tiempo de espera del puerto para un puerto abierto.

pfnXcvOpenPort

Puntero a la función XcvOpenPort del monitor de impresión. (Solo monitores de puerto).

pfnXcvDataPort

Puntero a la función XcvDataPort del monitor de impresión. (Solo monitores de puerto).

pfnXcvClosePort

Puntero a la función XcvClosePort del monitor de impresión. (Solo monitores de puerto).

Comentarios

En las secciones siguientes se describe cada miembro de devolución de llamada con más detalle.

AddPort

typedef BOOL (WINAPI *pfnAddPort)(
  _In_ HANDLE hMonitor,
  _In_ LPWSTR pName,
  _In_ HWND   hWnd,
  _In_ LPWSTR pMonitorName
);

Parámetros (AddPort)

Monitor [in] (AddPort)

Identificador de instancia de monitor proporcionado por el autor de la llamada. Este es el identificador devuelto por la función InitializePrintMonitor2 del monitor. (Este parámetro no existe si el monitor de impresión admite InitializePrintMonitor2 en lugar de InitializePrintMonitor2).

pName [in] (AddPort)

Puntero a una cadena terminada en null que especifica el nombre del servidor al que está conectado el puerto. Si pName es NULL, el puerto es local.

hWnd [in] (AddPort)

Identificador de la ventana primaria del cuadro de diálogo en el que se escribirá el nombre del puerto.

pMonitorName [in] (AddPort)

Puntero a una cadena terminada en null que especifica el monitor asociado al puerto.

Valor devuelto (AddPort)

El valor devuelto es TRUE si la función es correcta y FALSE en caso contrario.

ConfigurePort

typedef BOOL (WINAPI *pfnConfigurePort)(
  _In_ HANDLE hMonitor,
  _In_ LPWSTR pName,
  _In_ HWND   hWnd,
  _In_ LPWSTR pPortName
);

Parámetros (ConfigurePort)

hMonitor [in] (ConfigurePort)

Identificador de instancia de monitor proporcionado por el autor de la llamada. Este es el identificador devuelto por la función InitializePrintMonitor2 del monitor. (Este parámetro no existe si el monitor de impresión admite InitializePrintMonitor en lugar de InitializePrintMonitor2).

pName [in] (ConfigurePort)

Puntero a una cadena terminada en null que especifica el nombre del servidor en el que existe el puerto especificado. Si esta cadena es NULL, el puerto es local.

hWnd [in] (ConfigurePort)

Identificador de la ventana primaria del cuadro de diálogo en el que se escribirá la información de configuración.

pPortName [in] (ConfigurePort)

Puntero a una cadena terminada en null que especifica el nombre del puerto que se va a configurar.

Valor devuelto (ConfigurePort)

El valor devuelto es TRUE si la función es correcta.

DeletePort

pfnDeletePort DeletePort;

BOOL WINAPI DeletePort(
  _In_ HANDLE hMonitor,
  _In_ LPWSTR pName,
  _In_ HWND   hWnd,
  _In_ LPWSTR pPortName
)

Parámetros (DeletePort)

hMonitor [in] (DeletePort)

Identificador de instancia de monitor proporcionado por el autor de la llamada. Este es el identificador devuelto por la función InitializePrintMonitor2 del monitor. (Este parámetro no existe si el monitor de impresión admite InitializePrintMonitor en lugar de InitializePrintMonitor2).

pName [in] (DeletePort)

Puntero a una cadena terminada en null que especifica el nombre del servidor en el que existe el puerto que se va a eliminar. Si este parámetro es NULL, el puerto es local.

hWnd [in] (DeletePort)

Identificador de la ventana primaria del cuadro de diálogo de eliminación de puertos.

pPortName [in] (DeletePort)

Puntero a una cadena terminada en null que asigna el nombre al puerto que se va a eliminar.

Valor devuelto (DeletePort)

El valor devuelto es TRUE si la función es correcta.

EndDocPort

typedef BOOL ( WINAPI *pfnEndDocPort)(
  _In_ HANDLE hPort
);

Parámetros (EndDocPort)

hPort [in] (EndDocPort)

Identificador de puerto proporcionado por el autor de la llamada.

Valor devuelto (EndDocPort)

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

EnumPorts

typedef BOOL (WINAPI *pfnEnumPorts)(
  _In_     HANDLE  hMonitor,
  _In_opt_ LPWSTR  pName,
  _In_     DWORD   Level,
  _Out_    LPBYTE  pPorts,
  _In_     DWORD   cbBuf,
  _Out_    LPDWORD pcbNeeded,
  _Out_    LPDWORD pcReturned
);

Parámetros (EnumPorts)

hMonitor [in] (EnumPorts)

Identificador de instancia de monitor proporcionado por el autor de la llamada. Este es el identificador devuelto por la función InitializePrintMonitor2 del monitor. (Este parámetro no existe si el monitor de impresión admite InitializePrintMonitor en lugar de InitializePrintMonitor2).

pName [in, optional] (EnumPorts)

Puntero proporcionado por el autor de la llamada a una cadena que contiene el nombre del servidor cuyos puertos se van a enumerar. Un puntero NULL representa el sistema en el que se ejecuta el archivo DLL del servidor de supervisión de puertos.

Level [in] (EnumPorts)

Valor proporcionado por el autor de la llamada que indica el tipo de estructuras que se van a devolver en el búfer al que apunta pPorts.

Los valores posibles son 1 (PORT_INFO_1) o 2 (PORT_INFO_2).

pPorts [out] (EnumPorts)

Puntero proporcionado por el autor de la llamada a un búfer para recibir información del puerto. La información devuelta debe constar de una matriz de estructuras PORT_INFO_1 o PORT_INFO_2 , seguidas de las cadenas a las que apuntan los miembros de la estructura.

cbBuf [in] (EnumPorts)

Tamaño proporcionado por el autor de la llamada, en bytes, del búfer al que apunta pPorts.

pcbNeeded [out] (EnumPorts)

Puntero proporcionado por el autor de la llamada a una ubicación para recibir el tamaño del búfer, en bytes, necesario para contener toda la información devuelta.

pcReturned [out] (EnumPorts)

Puntero proporcionado por el autor de la llamada a una ubicación para recibir el número de puertos enumerados.

Valor devuelto (EnumPorts)

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

GetPrinterDataFromPort

pfnGetPrinterDataFromPort GetPrinterDataFromPort;

BOOL WINAPI GetPrinterDataFromPort(
  _In_  HANDLE  hPort,
  _In_  DWORD   ControlID,
  _In_  LPWSTR  pValueName,
  _In_  LPWSTR  lpInBuffer,
  _In_  DWORD   cbInBuffer,
  _Out_ LPWSTR  lpOutBuffer,
  _In_  DWORD   cbOutBuffer,
  _Out_ LPDWORD lpcbReturned
)

Parámetros (GetPrinterDataFromPort)

hPort [in] (GetPrinterDataFromPort)

Identificador de puerto proporcionado por el autor de la llamada.

ControlID [in] (GetPrinterDataFromPort)

Código de control de E/S proporcionado por el autor de la llamada. Un valor de cero indica que pValueName proporciona un nombre de valor.

pValueName [in] (GetPrinterDataFromPort)

Puntero proporcionado por el autor de la llamada a una cadena que identifica la información que se solicita. Válido solo si ControlID es cero.

lpInBuffer [in] (GetPrinterDataFromPort)

Puntero proporcionado por el autor de la llamada a un búfer que contiene datos de entrada. Solo se usa si ControlID es distinto de cero.

cbInBuffer [in] (GetPrinterDataFromPort)

Tamaño proporcionado por el autor de la llamada, en bytes, del búfer al que apunta lpInBuffer.

lpOutBuffer [out] (GetPrinterDataFromPort)

Puntero proporcionado por el autor de la llamada a un búfer para recibir los datos solicitados.

cbOutBuffer [in] (GetPrinterDataFromPort)

Tamaño proporcionado por el autor de la llamada, en bytes, del búfer al que apunta lpOutBuffer.

lpcbReturned [out] (GetPrinterDataFromPort)

Puntero proporcionado por el autor de la llamada a una ubicación para recibir el número de bytes escritos en el búfer al que apunta lpOutBuffer.

Valor devuelto (GetPrinterDataFromPort)

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

OpenPortEx

pfnOpenPortEx OpenPortEx;

BOOL WINAPI OpenPortEx(
  _In_  HANDLE           hMonitor,
  _In_  HANDLE           hMonitorPort,
  _In_  LPWSTR           pPortName,
  _In_  LPWSTR           pPrinterName,
  _Out_ PHANDLE          pHandle,
  _In_  struct _MONITOR2 *pMonitor
)

Parámetros (OpenPortEx)

hMonitor [in] (OpenPortEx)

Identificador de instancia del monitor de idioma proporcionado por el autor de la llamada. Este es el identificador devuelto por la función InitializePrintMonitor2 del monitor. (Este parámetro no existe si el monitor de impresión admite InitializePrintMonitor en lugar de InitializePrintMonitor2). En un entorno de clúster, puede haber varias instancias de monitores de lenguaje.

hMonitorPort [in] (OpenPortEx)

Identificador de instancia del monitor de puerto proporcionado por el autor de la llamada. Este es el identificador devuelto por la función InitializePrintMonitor2 del monitor. (Este parámetro no existe si el monitor de impresión admite InitializePrintMonitor en lugar de InitializePrintMonitor2). Un monitor de lenguaje debe usar este identificador cuando llama a funciones en la estructura de MONITOR2 del monitor de puertos.

pPortName [in] (OpenPortEx)

Puntero proporcionado por el autor de la llamada a una cadena que contiene el nombre del puerto que se va a abrir.

pPrinterName [in] (OpenPortEx)

Puntero proporcionado por el autor de la llamada a una cadena que contiene el nombre de la impresora que está conectada al puerto.

pHandle [out] (OpenPortEx)

Puntero proporcionado por el autor de la llamada a una ubicación para recibir un identificador de puerto.

pMonitor [in] (OpenPortEx)

Puntero proporcionado por el autor de la llamada a la estructura MONITOR2 devuelta por la función InitializePrintMonitor2 de un monitor de puerto.

Valor devuelto (OpenPortEx)

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

SetPortTimeOuts

BOOL (WINAPI *pfnSetPortTimeOuts)
    (
    _In_ HANDLE  hPort,
    _In_ LPCOMMTIMEOUTS lpCTO,
    _In_ DWORD   reserved    // must be set to 0
    );

Parámetros (SetPortTimeOuts)

hPort [in] (SetPortTimeOuts)

Identificador proporcionado por el autor de la llamada al puerto abierto en el que se van a establecer los valores de tiempo de espera.

lpCTO [in] (SetPortTimeOuts)

Puntero proporcionado por el autor de la llamada a una estructura COMMTIMEOUTS .

reserved [in] (SetPortTimeOuts)

Reservado para uso futuro. Debe establecerse en cero.

Valor devuelto (SetPortTimeOuts)

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

StartDocPort

typedef BOOL (WINAPI *pfnStartDocPort)(
  _In_ HANDLE hPort,
  _In_ LPWSTR pPrinterName,
  _In_ DWORD  JobId,
  _In_ DWORD  Level,
  _In_ LPBYTE pDocInfo
);

Parámetros (StartDocPort)

hPort [in] (StartDocPort)

Identificador de puerto proporcionado por el autor de la llamada.

pPrinterName [in] (StartDocPort)

Puntero proporcionado por el autor de la llamada a una cadena que contiene el nombre de la impresora.

JobId [in] (StartDocPort)

Identificador de trabajo asignado por el autor de la llamada, asignado por el administrador de colas.

Level [in] (StartDocPort)

Valor proporcionado por el autor de la llamada que indica el tipo de estructura a la que apunta pDocInfo.

Los valores posibles son 1 (DOC_INFO_1) o 2 (DOC_INFO_2).

pDocInfo [in] (StartDocPort)

Puntero proporcionado por el autor de la llamada a una estructura DOC_INFO_1 o DOC_INFO_2 .

Valor devuelto (StartDocPort)

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

Notas

El administrador de colas llama a AddPort cuando recibe una solicitud de aplicación para agregar un puerto a su entorno. El administrador de cola reenvía la llamada al monitor de puerto con nombre en el servidor con nombre.

AddPort permite agregar un puerto de forma interactiva. Un monitor debe pedir a un usuario que escriba el nombre del puerto en un cuadro de diálogo de la ventana asociada a hWnd. AddPort debe validar el nombre de puerto especificado llamando a la función EnumPorts de Win32 para asegurarse de que no se agreguen nombres de puerto duplicados al entorno de cola. Un monitor también debe comprobar que el puerto es el que admite.

El administrador de colas no admite llamadas a AddPort remotas. Por lo tanto, las implementaciones de AddPort pueden omitir los parámetros pName y pMonitorName .

El administrador de colas llama a ConfigurePort para que un monitor de puertos pueda realizar la configuración del puerto. ConfigurePort puede ofrecer un cuadro de diálogo para obtener parte o toda la información de configuración de puerto necesaria del usuario.

El administrador de colas no admite llamadas a ConfigurePort remotas; por lo tanto, los monitores pueden omitir el parámetro pName .

El administrador de colas llama a DeletePort para que un monitor de puerto pueda eliminar un puerto del entorno del monitor. El monitor debe eliminar el puerto especificado de su estado. El administrador de colas no llamará a DeletePort en un monitor siempre que un puerto esté abierto.

Las aplicaciones pueden eliminar puertos locales y remotos. La interfaz de usuario de la impresora muestra un cuadro de mensaje de confirmación antes de que el administrador llame a DeletePort, por lo que un monitor debe omitir el parámetro hWnd y no mostrar otro cuadro de diálogo.

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

El identificador recibido como argumento hPort de la función es el identificador de puerto que proporcionó la función OpenPort o OpenPortEx del monitor.

Normalmente, la función EndDocPort de un monitor de lenguaje llama a la función EndDocPort del monitor de puerto asociado. También debe notificar al administrador de trabajos cuando el dispositivo de impresión haya terminado el trabajo mediante una llamada a SetJob, especificando un comando de JOB_CONTROL_LAST_PAGE_EJECTED. Los monitores de idioma para impresoras bidireccionales no deben llamar a SetJob hasta que la impresora haya enviado una notificación de que el trabajo ha finalizado realmente.

Normalmente, una función EndDocPort del archivo DLL del servidor de supervisión de puertos llama a la función CloseHandle para cerrar el identificador que se obtuvo anteriormente mediante una llamada a CreateFile desde StartDocPort. También debe notificar al administrador de trabajos cuando el dispositivo de impresión ha finalizado el trabajo, llamando a SetJob, especificando un comando de JOB_CONTROL_SENT_TO_PRINTER. (Si un administrador de colas se comunica con el puerto a través de un monitor de idioma, no tiene en cuenta el trabajo completado hasta que el monitor de idioma envíe JOB_CONTROL_LAST_PAGE_EJECTED).

La función EndDocPort debe liberar todos los recursos asignados por la función StartDocPort .

Es posible que desee modificar el comportamiento de la función EndDocPort si el usuario ha eliminado o reiniciado el trabajo de impresión. La función puede llamar a GetJob y comprobar si hay un estado de JOB_STATUS_DELETING o JOB_STATUS_RESTART, para ver si se ha producido alguno de estos eventos.

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

El propósito de la función EnumPorts es enumerar los puertos admitidos actualmente por un monitor de impresión. Estos puertos son los que se especificaron anteriormente en la función AddPortUI o AddPortEx del monitor.

La función EnumPorts debe rellenar el búfer al que apunta pPort con una matriz de estructuras PORT_INFO_1 o PORT_INFO_2. A continuación, a partir de una ubicación de memoria después del último elemento de matriz, la función debe cargar todas las cadenas a las que apuntan los miembros de la estructura de la matriz. Consulte localmon.dll, un monitor de puerto de ejemplo, para obtener un ejemplo de cómo hacerlo. La función también debe devolver el número de estructuras proporcionadas (es decir, el número de puertos admitidos) colocando el número en la ubicación a la que apunta pcReturned.

El llamador especifica el tamaño del búfer proporcionado en cbBuf. Si el búfer es demasiado pequeño, la función debe colocar el tamaño de búfer necesario en la ubicación a la que apunta pcbNeeded, llame a SetLastError especificando ERROR_INSUFFICIENT_BUFFER y devuelva FALSE.

Si Level contiene un número de nivel no válido, la función debe llamar a SetLastError especificando ERROR_INVALID_LEVEL y devolver FALSE. Algunos monitores de puerto solo admiten un valor de nivel de 1.

El monitor de puerto debe admitir la localización de cadenas a las que apuntan los miembros pMonitorName y pDescription de la estructura PORT_INFO_2. Estas cadenas deben definirse en archivos de recursos y obtenerse mediante una llamada a LoadString.

El miembro fPortType de la estructura PORT_INFO_2 no se usa con sistemas operativos basados en NT.

Los monitores de lenguaje y los archivos DLL del servidor de supervisión de puertos pueden definir opcionalmente una función GetPrinterDataFromPort e incluir la dirección de la función en una estructura de MONITOR2 .

La función está pensada para su uso con impresoras bidireccionales y se puede usar de las dos maneras siguientes:

  • Como medio para solicitar un monitor de idioma para sondear el puerto de la impresora, para obtener el valor actual de información específica de la impresora almacenada en el registro.

  • Como medio para solicitar un monitor de puerto para enviar un código de control de E/S al controlador de puerto.

Si la función GetPrinterDataFromPort de un monitor de lenguaje recibe un puntero de cadena en pValueName, debe devolver un valor en el búfer de salida proporcionado. Normalmente, la cadena representa un nombre de valor del Registro y el administrador de colas llama a GetPrinterDataFromPort cuando una aplicación llama a la función GetPrinterData .

La responsabilidad del monitor de idioma es enviar un comando al hardware de la impresora llamando a la función WritePort del monitor de puerto y leyendo la respuesta llamando a ReadPort para obtener el valor necesario. Por ejemplo, pjlmon.dll, el monitor de lenguaje de ejemplo, puede devolver valores para los nombres de valor del Registro "Memoria instalada" y "Memoria disponible".

Una vez que el administrador de colas llama a GetPrinterDataFromPort para obtener un valor del Registro, actualiza el registro con el nuevo valor.

Normalmente, los monitores de puerto no admiten llamadas a GetPrinterDataFromPort que incluyen un puntero de cadena en pValueName.

Si la función GetPrinterDataFromPort de un monitor de lenguaje recibe un código de control de E/S distinto de cero en ControlID, simplemente debe llamar a la función GetPrinterDataFromPort del monitor de puerto asociado y devolver el resultado. La Referencia de controladores en modo kernel muestra códigos de control de E/S para puertos paralelos y serie.

Cuando la función GetPrinterDataFromPort de un monitor de puerto recibe un código de control de E/S distinto de cero en ControlID, debe llamar a DeviceIOControl para pasar el código de control al controlador de puerto en modo kernel. Los valores de parámetro lpInBuffer, cbInBuffer, lpOutBuffer, cbOutBuffer y lpcbReturned también deben pasarse a DeviceIOControl.

Los monitores de lenguaje son necesarios para definir una OpenPortEx función e incluir su dirección en una estructura de MONITOR2 . El OpenPortEx administrador de trabajos de impresión llama a la función cuando se conecta una cola de impresión a un puerto.

El OpenPortEx propósito principal de la función es devolver un identificador de puerto que el autor de la llamada puede usar como argumento de entrada para las llamadas posteriores a las funciones StartDocPort, WritePort, ReadPort, EndDocPort y GetPrinterDataFromPort del monitor de lenguaje. Dado que un monitor de lenguaje normalmente implementa estas funciones mediante una llamada a las funciones equivalentes en su monitor de puertos asociado, un monitor de lenguaje normalmente obtiene un identificador de puerto mediante una llamada a la función OpenPort del monitor de puerto. Para obtener más información, vea Interacción del monitor de puerto y idioma.

El OpenPortEx parámetro pMonitor de la función es un puntero a la estructura de MONITOR2 del monitor de puerto. Esta estructura contiene punteros a las funciones invocables del monitor de puerto. La OpenPortEx función debe comprobar la estructura para comprobar que todos los punteros de función necesarios no son NULL. Si la estructura es válida, la función debe copiarla en el almacenamiento local. De lo contrario OpenPortEx , debe llamar a SetLastError, especificar ERROR_INVALID_PRINT_MONITOR y devolver FALSE.

Las funciones de monitor de impresión que aceptan un identificador de puerto como entrada tampoco aceptan un identificador de monitor. Por lo tanto, la OpenPortEx función debe almacenar el identificador de monitor recibido en una ubicación a la que pueda hacer referencia el identificador de puerto. Esto permite que las funciones que aceptan un identificador de puerto hagan referencia al identificador de monitor.

Una función dll del servidor de supervisión de SetPortTimeOuts puertos permite a un monitor de idioma especificar valores de tiempo de espera de puerto para un puerto abierto. La función es opcional y solo se debe proporcionar si el monitor de puerto controla un puerto que permite la modificación de los valores de tiempo de espera del puerto. Si se define la función, su dirección debe incluirse en una estructura de MONITOR2 .

El monitor de lenguaje de ejemplo llama a la función pjlmon.dll y puede escribir un monitor de idioma personalizado que lo llame. El administrador de trabajos de impresión no llama a SetPortTimeOuts.

El monitor de puertos debe inicializar los valores de tiempo de espera del puerto desde su función OpenPort .

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

El identificador recibido como argumento hPort de la función es el identificador de puerto que proporcionó la función OpenPort o OpenPortEx del monitor.

Normalmente, la función de un monitor de StartDocPort lenguaje llama a la función del monitor de StartDocPort puerto asociado.

Normalmente, una función dll del servidor de supervisión de StartDocPort puertos llama a la función CreateFile para crear una conexión con el controlador de puerto en modo kernel.

Si es necesario, el monitor de puertos debe impedir que otros procesos usen el puerto especificado hasta que se llame a EndDocPort . Por ejemplo, un monitor de puerto para un puerto COM debe asegurarse de que, mientras un administrador de trabajos de cola envía datos de impresora al puerto, otra aplicación no asume que el puerto está conectado a un dispositivo de comunicaciones determinado y, a continuación, intenta comunicarse con ese dispositivo. Esta nota de precaución no se aplica al proveedor de impresión local, lo que garantiza que nunca llama StartDocPort dos veces sucesivamente sin una llamada intermedia a EndDocPort, pero se aplica a los proveedores de impresión que no hacen esta garantía.

Requisitos

Requisito Valor
Header winsplp.h (incluya Winsplp.h)

Consulte también

MONITOR2

MONITORUI