Função ReadPort (winsplp.h)

A função de um monitor de ReadPort porta lê dados de uma porta de impressora.

Sintaxe

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

Parâmetros

[in] hPort

Identificador de porta fornecido pelo chamador.

[out] pBuffer

Ponteiro fornecido pelo chamador para um buffer para receber dados lidos da porta.

cbBuffer

Tamanho fornecido pelo chamador, em bytes, de pBuffer.

[out] pcbRead

Ponteiro fornecido pelo chamador para um local para receber o número de bytes lidos com êxito da porta.

Retornar valor

Se a operação for bem-sucedida, a função deverá retornar TRUE. Caso contrário, ele deverá retornar FALSE.

Comentários

Monitores de linguagem e DLLs de servidor de monitor de porta são necessários para definir uma ReadPort função e incluir o endereço da função em uma estrutura MONITOR2 .

O identificador recebido como o argumento hPort da função é o identificador de porta fornecido pela função OpenPort ou OpenPortEx do monitor.

Normalmente, a função de um monitor de ReadPort linguagem chama a função do monitor de ReadPort porta associada e retorna o conteúdo do buffer obtido para o chamador.

Além disso, um monitor de linguagem pode criar um thread separado que chama a função do monitor de ReadPort porta para marcar para obter informações de status não solicitadas. Se essa operação de leitura for bem-sucedida, as informações de status deverão ser retornadas ao spooler chamando SetPort (descrito na documentação do SDK do Microsoft Windows).

Normalmente, a função da DLL de ReadPort um servidor de monitor de porta chama ReadFile (descrito na documentação do SDK do Windows) para obter dados do driver de porta no modo kernel. A função apenas retorna os dados para o chamador.

Embora monitores de linguagem e monitores de porta precisem definir ReadPort funções e colocar seus endereços em estruturas MONITOR2, a função de um monitor de ReadPort linguagem nunca é realmente chamada pelo spooler ou por um aplicativo. A função é exclusivamente para o uso interno do próprio monitor de linguagem.

Por exemplo, pjlmon.dll, o monitor de idioma de exemplo, cria um thread separado que chama seu próprio ReadPort para watch para informações de status de impressora não solicitadas e a ReadPort função chama a função do monitor de ReadPort porta. Quando o monitor de porta retorna dados para o monitor de idioma, o monitor de idioma analisa os dados recebidos e chama SetPort (descrito na documentação do SDK do Windows) para enviar status informações ao spooler.

A função deve retornar o número de bytes lidos com êxito colocando o número no local apontado por pcbRead. O chamador determina o êxito ou a falha da operação de gravação verificando ReadPort's o valor retornado, não a contagem de bytes retornada. Portanto, uma contagem de bytes retornada de zero não representa uma leitura com falha, a menos que a função retorne FALSE.

Algum tipo de mecanismo de tempo limite implementado pelo sistema ou implementado pelo monitor deve garantir que a ReadPort função retorne dentro de um período razoável, para evitar a interrupção do spooler.

É aceitável que um monitor de idioma chame a rotina de ReadPort um monitor de porta fora de um par StartDocPort/EndDocPort . (Essa chamada pode ser gerada por uma verificação de thread para status não solicitados.) No entanto, alguns monitores de porta podem falhar em tal chamada, portanto, o monitor de idioma deve ser gravado para lidar com essa falha.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho winsplp.h (inclua Winsplp.h)
Biblioteca NtosKrnl.exe

Confira também

GetPrinterDataFromPort

StartDocPort

OpenPortEx

OpenPort

EndDocPort