Estrutura MONITOR (winsplp.h)
Cuidado
A estrutura MONITOR é obsoleta e tem suporte apenas por motivos de compatibilidade. Novos monitores de impressão devem implementar MONITOR2 para que possam ser usados com clusters de servidor de impressão.
A estrutura MONITOR contém ponteiros para as funções definidas pelos monitores de impressão.
Sintaxe
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;
Membros
pfnEnumPorts
Uma função EnumPorts do servidor de monitor de porta enumera as portas compatíveis com o monitor de porta.
pfnOpenPort
Ponteiro para a função OpenPort do monitor de impressão.
pfnOpenPortEx
A função de um monitor de OpenPortEx
idioma abre uma porta de impressora.
pfnStartDocPort
A função de um monitor de StartDocPort
impressão executa as tarefas necessárias para iniciar um trabalho de impressão na porta especificada.
pfnWritePort
Ponteiro para a função WritePort do monitor de impressão.
pfnReadPort
Ponteiro para a função ReadPort do monitor de impressão.
pfnEndDocPort
A função EndDocPort de um monitor de impressão executa as tarefas necessárias para encerrar um trabalho de impressão na porta especificada.
pfnClosePort
Ponteiro para a função ClosePort do monitor de impressão.
pfnAddPort
Cuidado
A função AddPort é obsoleta e não deve ser usada.
AddPort cria uma porta e a adiciona à lista de portas atualmente compatíveis com o monitor especificado no ambiente do spooler.
pfnAddPortEx
(Obsoleto. Deve ser NULL.) Ponteiro para a função AddPortEx do monitor de impressão. (Somente monitores de porta.)
pfnConfigurePort
Cuidado
A função ConfigurePort é obsoleta e não deve ser usada. Em vez disso, use ConfigurePortUI .
ConfigurePort é uma função de gerenciamento de porta que configura a porta especificada.
pfnDeletePort
Cuidado
A função DeletePort é obsoleta e não deve ser usada.
DeletePort exclui uma porta do ambiente do monitor.
pfnGetPrinterDataFromPort
A função GetPrinterDataFromPort de um monitor de porta obtém status informações de uma impressora bidirecional e as retorna ao chamador.
pfnSetPortTimeOuts
Uma função de DLL do servidor de monitor de SetPortTimeOuts
porta define valores de tempo limite de porta para uma porta aberta.
pfnXcvOpenPort
Ponteiro para a função XcvOpenPort do monitor de impressão. (Somente monitores de porta.)
pfnXcvDataPort
Ponteiro para a função XcvDataPort do monitor de impressão. (Somente monitores de porta.)
pfnXcvClosePort
Ponteiro para a função XcvClosePort do monitor de impressão. (Somente monitores de porta.)
Comentários
As seções a seguir descrevem cada membro de retorno de chamada com mais detalhes.
AddPort
typedef BOOL (WINAPI *pfnAddPort)(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pMonitorName
);
Parâmetros (AddPort)
Monitorar [in] (AddPort)
Identificador de instância de monitor fornecido pelo chamador. Esse é o identificador retornado pela função InitializePrintMonitor2 do monitor. (Esse parâmetro não existirá se o monitor de impressão der suporte a InitializePrintMonitor2 em vez de InitializePrintMonitor2.)
pName [in] (AddPort)
Ponteiro para uma cadeia de caracteres terminada em nulo que especifica o nome do servidor ao qual a porta está conectada. Se pName for NULL, a porta será local.
hWnd [in] (AddPort)
Manipule para a janela pai da caixa de diálogo na qual o nome da porta será inserido.
pMonitorName [in] (AddPort)
Ponteiro para uma cadeia de caracteres terminada em nulo que especifica o monitor associado à porta.
Valor retornado (AddPort)
O valor retornado será TRUE se a função for bem-sucedida e FALSE caso contrário.
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 instância de monitor fornecido pelo chamador. Esse é o identificador retornado pela função InitializePrintMonitor2 do monitor. (Esse parâmetro não existirá se o monitor de impressão der suporte a InitializePrintMonitor em vez de InitializePrintMonitor2.)
pName [in] (ConfigurePort)
Ponteiro para uma cadeia de caracteres terminada em nulo que especifica o nome do servidor no qual a porta fornecida existe. Se essa cadeia de caracteres for NULL, a porta será local.
hWnd [in] (ConfigurePort)
Manipule para a janela pai da caixa de diálogo na qual as informações de configuração serão inseridas.
pPortName [in] (ConfigurePort)
Ponteiro para uma cadeia de caracteres terminada em nulo que especifica o nome da porta a ser configurada.
Valor retornado (ConfigurePort)
O valor retornado será TRUE se a função for bem-sucedida.
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 instância de monitor fornecido pelo chamador. Esse é o identificador retornado pela função InitializePrintMonitor2 do monitor. (Esse parâmetro não existirá se o monitor de impressão der suporte a InitializePrintMonitor em vez de InitializePrintMonitor2.)
pName [in] (DeletePort)
Ponteiro para uma cadeia de caracteres terminada em nulo que especifica o nome do servidor no qual a porta a ser excluída existe. Se esse parâmetro for NULL, a porta será local.
hWnd [in] (DeletePort)
Manipule para a janela pai da caixa de diálogo de exclusão de porta.
pPortName [in] (DeletePort)
Ponteiro para uma cadeia de caracteres terminada em nulo que nomeia a porta a ser excluída.
Valor retornado (DeletePort)
O valor retornado será TRUE se a função for bem-sucedida.
EndDocPort
typedef BOOL ( WINAPI *pfnEndDocPort)(
_In_ HANDLE hPort
);
Parâmetros (EndDocPort)
hPort [in] (EndDocPort)
Identificador de porta fornecido pelo chamador.
Valor retornado (EndDocPort)
Se a operação for bem-sucedida, a função deverá retornar TRUE. Caso contrário, ele deverá retornar 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 instância de monitor fornecido pelo chamador. Esse é o identificador retornado pela função InitializePrintMonitor2 do monitor. (Esse parâmetro não existirá se o monitor de impressão der suporte a InitializePrintMonitor em vez de InitializePrintMonitor2.)
pName [in, opcional] (EnumPorts)
Ponteiro fornecido pelo chamador para uma cadeia de caracteres que contém o nome do servidor cujas portas devem ser enumeradas. Um ponteiro NULL representa o sistema no qual a DLL do servidor de monitor de porta está sendo executada.
Level [in] (EnumPorts)
Valor fornecido pelo chamador que indica o tipo de estruturas a serem retornadas no buffer apontado por pPorts.
Os valores possíveis são 1 (PORT_INFO_1) ou 2 (PORT_INFO_2).
pPorts [out] (EnumPorts)
Ponteiro fornecido pelo chamador para um buffer para receber informações de porta. As informações retornadas devem consistir em uma matriz de estruturas PORT_INFO_1 ou PORT_INFO_2 , seguidas pelas cadeias de caracteres apontadas pelos membros da estrutura.
cbBuf [in] (EnumPorts)
Tamanho fornecido pelo chamador, em bytes, do buffer apontado por pPorts.
pcbNeeded [out] (EnumPorts)
Ponteiro fornecido pelo chamador para um local para receber o tamanho do buffer, em bytes, necessário para conter todas as informações retornadas.
pcReturned [out] (EnumPorts)
Ponteiro fornecido pelo chamador para um local para receber o número de portas enumeradas.
Valor retornado (EnumPorts)
Se a operação for bem-sucedida, a função deverá retornar TRUE. Caso contrário, ele deverá retornar 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 porta fornecido pelo chamador.
ControlID [in] (GetPrinterDataFromPort)
Código de controle de E/S do dispositivo fornecido pelo chamador. Um valor zero indica que um nome de valor é fornecido por pValueName.
pValueName [in] (GetPrinterDataFromPort)
Ponteiro fornecido pelo chamador para uma cadeia de caracteres que identifica as informações que estão sendo solicitadas. Válido somente se ControlID for zero.
lpInBuffer [in] (GetPrinterDataFromPort)
Ponteiro fornecido pelo chamador para um buffer que contém dados de entrada. Usado somente se ControlID for diferente de zero.
cbInBuffer [in] (GetPrinterDataFromPort)
Tamanho fornecido pelo chamador, em bytes, do buffer apontado por lpInBuffer.
lpOutBuffer [out] (GetPrinterDataFromPort)
Ponteiro fornecido pelo chamador para um buffer para receber os dados solicitados.
cbOutBuffer [in] (GetPrinterDataFromPort)
Tamanho fornecido pelo chamador, em bytes, do buffer apontado por lpOutBuffer.
lpcbReturned [out] (GetPrinterDataFromPort)
Ponteiro fornecido pelo chamador para um local para receber o número de bytes gravados no buffer apontado por lpOutBuffer.
Valor retornado (GetPrinterDataFromPort)
Se a operação for bem-sucedida, a função deverá retornar TRUE. Caso contrário, ele deverá retornar 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 instância do monitor de idioma fornecido pelo chamador. Esse é o identificador retornado pela função InitializePrintMonitor2 do monitor. (Esse parâmetro não existirá se o monitor de impressão der suporte a InitializePrintMonitor em vez de InitializePrintMonitor2.) Em um ambiente de cluster, pode haver várias instâncias de monitores de linguagem.
hMonitorPort [in] (OpenPortEx)
Identificador de instância do monitor de porta fornecido pelo chamador. Esse é o identificador retornado pela função InitializePrintMonitor2 do monitor. (Esse parâmetro não existirá se o monitor de impressão der suporte a InitializePrintMonitor em vez de InitializePrintMonitor2.) Um monitor de linguagem deve usar esse identificador ao chamar funções na estrutura MONITOR2 do monitor de porta.
pPortName [in] (OpenPortEx)
Ponteiro fornecido pelo chamador para uma cadeia de caracteres que contém o nome da porta a ser aberta.
pPrinterName [in] (OpenPortEx)
Ponteiro fornecido pelo chamador para uma cadeia de caracteres que contém o nome da impressora conectada à porta.
pHandle [out] (OpenPortEx)
Ponteiro fornecido pelo chamador para um local para receber um identificador de porta.
pMonitor [in] (OpenPortEx)
Ponteiro fornecido pelo chamador para a estrutura MONITOR2 retornada pela função InitializePrintMonitor2 de um monitor de porta.
Valor retornado (OpenPortEx)
Se a operação for bem-sucedida, a função deverá retornar TRUE. Caso contrário, ele deverá retornar 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 fornecido pelo chamador para a porta aberta na qual definir os valores de tempo limite.
lpCTO [in] (SetPortTimeOuts)
Ponteiro fornecido pelo chamador para uma estrutura COMMTIMEOUTS .
reserved [in] (SetPortTimeOuts)
Reservado para uso futuro. Deve ser definido como zero.
Valor retornado (SetPortTimeOuts)
Se a operação for bem-sucedida, a função deverá retornar TRUE. Caso contrário, ele deverá retornar 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 porta fornecido pelo chamador.
pPrinterName [in] (StartDocPort)
Ponteiro fornecido pelo chamador para uma cadeia de caracteres que contém o nome da impressora.
JobId [in] (StartDocPort)
Identificador de trabalho atribuído ao spooler fornecido pelo chamador.
Level [in] (StartDocPort)
Valor fornecido pelo chamador que indica o tipo de estrutura apontado por pDocInfo.
Os valores possíveis são 1 (DOC_INFO_1) ou 2 (DOC_INFO_2).
pDocInfo [in] (StartDocPort)
Ponteiro fornecido pelo chamador para uma estrutura de DOC_INFO_1 ou DOC_INFO_2 .
Valor retornado (StartDocPort)
Se a operação for bem-sucedida, a função deverá retornar TRUE. Caso contrário, ele deverá retornar FALSE.
Observações
O spooler chama AddPort quando recebe uma solicitação de aplicativo para adicionar uma porta ao seu ambiente. O spooler encaminha a chamada para o monitor de porta nomeado no servidor nomeado.
AddPort permite que uma porta seja adicionada interativamente. Um monitor deve solicitar que um usuário insira o nome da porta em uma caixa de diálogo na janela associada a hWnd. AddPort deve validar o nome da porta inserida chamando a função Win32 EnumPorts para garantir que nenhum nome de porta duplicado seja adicionado ao ambiente do spooler. Um monitor também deve verificar se a porta é compatível.
O spooler não dá suporte a chamadas remotas do AddPort . Consequentemente, as implementações de AddPort podem ignorar os parâmetros pName e pMonitorName .
O spooler chama ConfigurePort para que um monitor de porta possa executar a configuração da porta. ConfigurePort pode oferecer uma caixa de diálogo para obter algumas ou todas as informações de configuração de porta necessárias do usuário.
O spooler não dá suporte a chamadas configurePort remotas; consequentemente, os monitores podem ignorar o parâmetro pName .
O spooler chama DeletePort para que um monitor de porta possa excluir uma porta do ambiente do monitor. O monitor deve excluir a porta especificada de seu estado. O spooler não chamará DeletePort em um monitor enquanto uma porta estiver aberta.
Os aplicativos podem excluir portas locais e remotas. A interface do usuário da impressora exibe uma caixa de mensagem de confirmação antes que o spooler chame DeletePort, portanto, um monitor deve ignorar o parâmetro hWnd e não exibir outra caixa de diálogo.
Monitores de linguagem e DLLs do servidor de monitor de porta são necessários para definir uma função EndDocPort 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.
A função EndDocPort de um monitor de linguagem normalmente chama a função EndDocPort do monitor de porta associada. Ele também deve notificar o spooler quando o dispositivo de impressão tiver concluído o trabalho chamando SetJob, especificando um comando de JOB_CONTROL_LAST_PAGE_EJECTED. Monitores de idioma para impressoras bidirecionais não devem chamar SetJob até que a impressora tenha enviado uma notificação de que o trabalho está realmente concluído.
Uma função EndDocPort do servidor de monitor de porta normalmente chama a função CloseHandle para fechar o identificador que foi obtido anteriormente chamando CreateFile de dentro de StartDocPort. Ele também deve notificar o spooler quando o dispositivo de impressão tiver concluído o trabalho, chamando SetJob, especificando um comando de JOB_CONTROL_SENT_TO_PRINTER. (Se um spooler estiver se comunicando com a porta por meio de um monitor de idioma, ele não considerará o trabalho concluído até que o monitor de idioma envie JOB_CONTROL_LAST_PAGE_EJECTED.)
A função EndDocPort deve liberar todos os recursos alocados pela função StartDocPort .
Talvez você queira modificar o comportamento da função EndDocPort se o usuário tiver excluído ou reiniciado o trabalho de impressão. A função pode chamar GetJob e marcar para um status de JOB_STATUS_DELETING ou JOB_STATUS_RESTART, para ver se um desses eventos ocorreu.
As DLLs do servidor de monitor de porta são necessárias para definir uma função EnumPorts e incluir o endereço da função em uma estrutura MONITOR2 . Os monitores de linguagem não exportam essa função.
A finalidade da função EnumPorts é enumerar as portas atualmente compatíveis com um monitor de impressão. Essas portas são as que foram especificadas anteriormente para a função AddPortUI ou AddPortEx do monitor.
A função EnumPorts deve preencher o buffer apontado por pPort com uma matriz de estruturas PORT_INFO_1 ou PORT_INFO_2. Em seguida, começando em um local de memória após o último elemento de matriz, a função deve carregar todas as cadeias de caracteres apontadas pelos membros da estrutura da matriz. Consulte localmon.dll, um monitor de porta de exemplo, para obter um exemplo de como fazer isso. A função também deve retornar o número de estruturas fornecidas (ou seja, o número de portas com suporte) colocando o número no local apontado por pcReturned.
O chamador especifica o tamanho do buffer fornecido no cbBuf. Se o buffer for muito pequeno, a função deverá colocar o tamanho do buffer necessário no local apontado por pcbNeeded, chamar SetLastError especificando ERROR_INSUFFICIENT_BUFFER e retornar FALSE.
Se Level contiver um número de nível inválido, a função deverá chamar SetLastError especificando ERROR_INVALID_LEVEL e retornar FALSE. Alguns monitores de porta dão suporte apenas a um valor de nível de 1.
O monitor de porta deve dar suporte à localização de cadeias de caracteres apontadas pelos membros pMonitorName e pDescription da estrutura PORT_INFO_2. Essas cadeias de caracteres devem ser definidas em arquivos de recurso e obtidas chamando LoadString.
O membro fPortType da estrutura PORT_INFO_2 não é usado com sistemas operacionais baseados em NT.
Os monitores de linguagem e as DLLs do servidor de monitor de porta podem, opcionalmente, definir uma função GetPrinterDataFromPort e incluir o endereço da função em uma estrutura MONITOR2 .
A função destina-se ao uso com impressoras bidirecionais e pode ser usada das duas maneiras a seguir:
Como um meio de solicitar um monitor de idioma para sondar a porta da impressora, para obter o valor atual das informações específicas da impressora armazenadas no registro.
Como um meio de solicitar que um monitor de porta envie um código de controle de E/S para o driver de porta.
Se a função GetPrinterDataFromPort de um monitor de idioma receber um ponteiro de cadeia de caracteres em pValueName, ela deverá retornar um valor no buffer de saída fornecido. Normalmente, a cadeia de caracteres representa um nome de valor do Registro e o spooler chama GetPrinterDataFromPort quando um aplicativo chama a função GetPrinterData .
A responsabilidade do monitor de idioma é enviar um comando para o hardware da impressora chamando a função WritePort do monitor de porta e lendo a resposta chamando ReadPort para obter o valor necessário. Por exemplo, pjlmon.dll, o monitor de idioma de exemplo, pode retornar valores para os nomes de valor do registro "Memória Instalada" e "Memória Disponível" de uma porta.
Depois que o spooler chama GetPrinterDataFromPort para obter um valor do Registro, ele atualiza o registro com o novo valor.
Normalmente, os monitores de porta não dão suporte a chamadas para GetPrinterDataFromPort que incluem um ponteiro de cadeia de caracteres em pValueName.
Se a função GetPrinterDataFromPort de um monitor de idioma receber um código de controle de E/S diferente de zero no ControlID, ele deverá chamar apenas a função GetPrinterDataFromPort do monitor de porta associada e retornar o resultado. A Referência de Drivers do Modo Kernel lista códigos de controle de E/S para portas paralelas e seriais.
Quando a função GetPrinterDataFromPort de um monitor de porta recebe um código de controle de E/S diferente de zero no ControlID, ela deve chamar DeviceIOControl para passar o código de controle para o driver de porta do modo kernel. Os valores de parâmetro lpInBuffer, cbInBuffer, lpOutBuffer, cbOutBuffer e lpcbReturned também devem ser passados para DeviceIOControl.
Monitores de linguagem são necessários para definir uma OpenPortEx
função e incluir seu endereço em uma estrutura MONITOR2 . A OpenPortEx
função é chamada pelo spooler de impressão quando uma fila de impressão está sendo conectada a uma porta.
A OpenPortEx
principal finalidade da função é retornar um identificador de porta que o chamador pode usar como um argumento de entrada para chamadas subsequentes para as funções StartDocPort, WritePort, ReadPort, EndDocPort e GetPrinterDataFromPort do monitor de idioma. Como um monitor de linguagem normalmente implementa essas funções chamando as funções equivalentes em seu monitor de porta associado, um monitor de idioma normalmente obtém um identificador de porta chamando a função OpenPort do monitor de porta. Para obter mais informações, consulte Interação de monitor de porta e linguagem.
O OpenPortEx
parâmetro pMonitor da função é um ponteiro para a estrutura MONITOR2 do monitor de porta. Essa estrutura contém ponteiros para as funções chamáveis do monitor de porta. A OpenPortEx
função deve marcar a estrutura para verificar se todos os ponteiros de função necessários não são NULL. Se a estrutura for válida, a função deverá copiá-la para o armazenamento local. Caso contrário OpenPortEx
, deve chamar SetLastError, especificando ERROR_INVALID_PRINT_MONITOR e retornar FALSE.
As funções de monitor de impressão que aceitam um identificador de porta como entrada também não aceitam um identificador de monitor. Portanto, a OpenPortEx
função deve armazenar o identificador de monitor recebido em um local que possa ser referenciado pelo identificador de porta. Isso permite que as funções que aceitam um identificador de porta referenciem o identificador do monitor.
Uma função de DLL do SetPortTimeOuts
servidor de monitor de porta permite que um monitor de idioma especifique valores de tempo limite de porta para uma porta aberta. A função é opcional e deve ser fornecida somente se o monitor de porta controlar uma porta que permita a modificação dos valores de tempo limite da porta. Se a função for definida, seu endereço deverá ser incluído em uma estrutura MONITOR2 .
A função é chamada por pjlmon.dll, o monitor de idioma de exemplo, e você pode escrever um monitor de idioma personalizado que a chama. O spooler de impressão não chama SetPortTimeOuts
.
O monitor de porta deve inicializar os valores de tempo limite da porta de dentro de sua função OpenPort .
Monitores de linguagem e DLLs de servidor de monitor de porta são necessários para definir uma StartDocPort
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.
A função de um monitor de StartDocPort
linguagem normalmente chama a função do monitor de StartDocPort
porta associada.
Uma função de DLL do StartDocPort
servidor de monitor de porta normalmente chama a função CreateFile para criar uma conexão com o driver de porta do modo kernel.
Se necessário, o monitor de porta deve impedir que outros processos usem a porta especificada até que EndDocPort seja chamado. Por exemplo, um monitor de porta para uma porta COM deve garantir que, enquanto um spooler estiver enviando dados da impressora para a porta, outro aplicativo não pressupõe que a porta esteja conectada a um dispositivo de comunicação específico e tente se comunicar com esse dispositivo. Esta nota de advertência não se aplica ao provedor de impressão local, que garante que ele nunca chame StartDocPort
duas vezes seguidas sem uma chamada intermediária para EndDocPort, mas se aplica a provedores de impressão que não fazem essa garantia.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | winsplp.h (inclua Winsplp.h) |