Interfaz Xcv de TCPMON
En esta sección se describe la interfaz transceive (Xcv) para el monitor de puerto TCP/IP estándar (TCPMON). Esta interfaz, que se implementa mediante llamadas de función XcvData y XcvDataPort , permite a los usuarios que lo usan configurar un puerto de impresora TCP/IP o obtener información sobre una configuración de puerto de impresora TCP/IP. La interfaz Xcv descrita en esta sección es específica de los puertos TCP/IP. Es posible que otras interfaces Xcv estén disponibles para otros tipos de puerto.
Para obtener un identificador de una interfaz Xcv para una máquina local o una máquina remota, llame a la función OpenPrinter . En el ejemplo de código siguiente se muestra cómo obtener un identificador Xcv en un puerto:
HANDLE hXcv = INVALID_HANDLE_VALUE;
PRINTER_DEFAULTS Defaults = { NULL, NULL, <Required Access> };
// Handle to a local machine
if (OpenPrinter(",XcvPort <PortName>", &hXcv, &Defaults )
{
// hXvc contains an Xcv data handle to a local TCPMON port
}
// Handle to a remote machine
if (OpenPrinter("<ServerName>\\,XcvPort <PortName>", &hXcv, &Defaults )
{
// hXvc contains an Xcv data handle to a TCPMON port on <ServerName>
}
En el ejemplo de código, ServerName y PortName representan cadenas de nombre de servidor y puerto. Una vez que haya obtenido el identificador, puede consultar información específica del monitor de puertos TCPMON o puede cambiar la configuración del puerto. Tenga en cuenta que el acceso que necesita para el monitor de puerto debe especificarse en el miembro DesiredAccess de la estructura PRINTER_DEFAULTS o pasar NULL si no se requiere ninguna seguridad especial. Para determinadas llamadas a la función XcvData , como cuando se especifican los comandos AddPort y DeletePort (consulte Comandos Xcv de TCPMON), se requiere SERVER_ACCESS_ADMINISTER privilegio. Para obtener más información sobre la función OpenPrinter y los derechos de acceso que se pueden solicitar en la estructura de PRINTER_DEFAULTS, consulte la documentación de la función OpenPrinter .
Si el puerto aún no existe, el identificador Xcv se puede obtener del servidor especificando el nombre del monitor. (En el caso del puerto de supervisión de puerto TCP/IP estándar, se trata de "Puerto TCP/IP estándar"). En el ejemplo de código siguiente se muestra cómo obtener un identificador de datos Xcv en un monitor de puertos:
HANDLE hXcv = INVALID_HANDLE_VALUE;
PRINTER_DEFAULTS Defaults = { NULL, NULL, <Required Access> };
// Handle to a local machine
if (OpenPrinter(",XcvMonitor <MonitorName>", &hXcv, &Defaults )
{
// hXcv contains an Xcv data handle to the monitor <MonitorName>
}
// Handle to a remote machine
if (OpenPrinter("<ServerName>\\,XcvMonitor <MonitorName>", &hXcv, &Defaults )
{
// hXcv contains an Xcv data handle to the monitor
// <MonitorName> on the server <ServerName>
}
En el ejemplo de código, ServerName y PortName representan cadenas de nombre de servidor y puerto. Una vez que haya obtenido el identificador de datos Xcv, puede emitir instrucciones y solicitudes al monitor mediante una llamada a la función XcvData .
Tenga en cuenta que el valor devuelto de la función XcvData indica solo si los datos se enviaron correctamente al monitor de puerto. Un valor devuelto de TRUE no indica que la operación se realizó correctamente. Para determinar si la operación se realizó correctamente, inspeccione el valor en *pdwStatus. Estos valores de estado se resumen en la tabla siguiente:
Valor de estado | Significado |
---|---|
NO_ERROR | La operación se realizó correctamente. |
ERROR_ACCESS_DENIED | El usuario no tiene privilegios suficientes. El comando requiere SERVER_ACCESS_ADMINISTER privilegios. |
ERROR_INSUFFICIENT_BUFFER | Se requiere un búfer de salida, pero es menor que el necesario. |
ERROR_INVALID_DATA | Se requiere un búfer de entrada, pero el puntero a él es NULL o el tamaño del búfer de entrada es menor de lo necesario. |
ERROR_INVALID_HANDLE | El identificador de datos Xcv no es válido. |
ERROR_INVALID_LEVEL | La estructura de datos de entrada o salida no es la versión correcta. |
ERROR_INVALID_PARAMETER | Se requiere un búfer de salida, pero es NULL, o el parámetro requerido de salida es NULL y el búfer de salida es demasiado pequeño, o el monitor de puerto TCP/IP estándar no entiende el comando que se emite. |