Interface TCPMON Xcv
Esta seção descreve a interface transceive (Xcv) para o TCPMON (monitor de porta TCP/IP) padrão. Essa interface, que é implementada usando chamadas de função XcvData e XcvDataPort , permite que aqueles que a usam configurem uma porta de impressora TCP/IP ou obtenham informações sobre uma configuração de porta de impressora TCP/IP. A interface Xcv descrita nesta seção é específica para portas TCP/IP. Outras interfaces Xcv podem estar disponíveis para outros tipos de porta.
Para obter um identificador para uma interface Xcv para um computador local ou um computador remoto, chame a função OpenPrinter . O exemplo de código a seguir ilustra como obter um identificador Xcv para uma porta:
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>
}
No exemplo de código, ServerName e PortName representam cadeias de caracteres de nome de servidor e porta. Depois de obter o identificador, você pode consultar informações específicas do monitor de porta TCPMON ou alterar a configuração da porta. Observe que o acesso necessário para o monitor de porta deve ser especificado no membro DesiredAccess da estrutura PRINTER_DEFAULTS ou passar NULL se nenhuma segurança especial for necessária. Para determinadas chamadas para a função XcvData , como quando os comandos AddPort e DeletePort são especificados (consulte Comandos Xcv TCPMON), SERVER_ACCESS_ADMINISTER privilégio é necessário. Para obter detalhes sobre a função OpenPrinter e os direitos de acesso que podem ser solicitados na estrutura PRINTER_DEFAULTS, consulte a documentação da função OpenPrinter .
Se a porta ainda não existir, o identificador Xcv poderá ser obtido do servidor especificando o nome do monitor. (No caso da porta padrão do monitor de porta TCP/IP, essa é a "Porta TCP/IP Padrão".) O exemplo de código a seguir ilustra como obter um identificador de dados Xcv para um monitor de porta:
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>
}
No exemplo de código, ServerName e PortName representam cadeias de caracteres de nome de servidor e porta. Depois de obter o identificador de dados Xcv, você pode emitir instruções e solicitações para o monitor chamando a função XcvData .
Observe que o valor retornado da função XcvData indica apenas se os dados foram enviados corretamente para o monitor de porta. Um valor retornado de TRUE não indica que a operação foi bem-sucedida. Para determinar se a operação foi bem-sucedida, inspecione o valor em *pdwStatus. Esses valores status são resumidos na tabela a seguir:
Valor de status | Significado |
---|---|
NO_ERROR | A operação foi bem-sucedida. |
ERROR_ACCESS_DENIED | O usuário não tem privilégios suficientes. O comando requer SERVER_ACCESS_ADMINISTER privilégio. |
ERROR_INSUFFICIENT_BUFFER | Um buffer de saída é necessário, mas é menor do que o necessário. |
ERROR_INVALID_DATA | Um buffer de entrada é necessário, mas o ponteiro para ele é NULL ou o tamanho do buffer de entrada é menor do que o necessário. |
ERROR_INVALID_HANDLE | O identificador de dados Xcv é inválido. |
ERROR_INVALID_LEVEL | A estrutura de dados de entrada ou saída não é a versão correta. |
ERROR_INVALID_PARAMETER | Um buffer de saída é necessário, mas é NULL ou o parâmetro necessário de saída é NULL e o buffer de saída é muito pequeno ou o monitor de porta TCP/IP padrão não entende o comando que está sendo emitido. |