Condividi tramite


Funzione ReadPort (winsplp.h)

La funzione di ReadPort di un monitor delle porte legge i dati da una porta della stampante.

Sintassi

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

Parametri

[in] hPort

Handle di porta fornito dal chiamante.

[out] pBuffer

Puntatore fornito dal chiamante a un buffer per ricevere i dati letti dalla porta.

cbBuffer

Dimensioni fornite dal chiamante, in byte, di pBuffer.

[out] pcbRead

Puntatore fornito dal chiamante a una posizione per ricevere il numero di byte letti correttamente dalla porta.

Valore restituito

Se l'operazione ha esito positivo, la funzione deve restituire TRUE. In caso contrario, deve restituire FALSE.

Osservazioni

per definire una funzione ReadPort e includere l'indirizzo della funzione in una struttura di MONITOR2, è necessario monitorare linguaggio e monitorare le DLL del server di monitoraggio delle porte.

L'handle ricevuto come argomento hPort della funzione è l'handle di porta fornito dal monitoraggio OpenPort o funzione OpenPortEx fornita.

In genere, la funzione ReadPort di un monitoraggio del linguaggio chiama la funzione di ReadPort del monitoraggio delle porte associata e restituisce il contenuto del buffer ottenuto al chiamante.

Inoltre, un monitoraggio del linguaggio potrebbe creare un thread separato che chiama la funzione di ReadPort del monitoraggio delle porte per verificare la presenza di informazioni sullo stato non richieste. Se l'operazione di lettura ha esito positivo, le informazioni sullo stato devono essere restituite allo spooler chiamando SetPort (descritto nella documentazione di Microsoft Windows SDK).

In genere, una DLL del server di monitoraggio delle porte ReadPort chiamate di funzione ReadFile (descritto nella documentazione di Windows SDK) per ottenere dati dal driver della porta in modalità kernel. La funzione restituisce solo i dati al chiamante.

Anche se sia i monitoraggi del linguaggio che i monitoraggi delle porte devono definire funzioni ReadPort e posizionare gli indirizzi nelle strutture MONITOR2, la funzione ReadPort di un monitoraggio del linguaggio non viene mai effettivamente chiamata dallo spooler o da un'applicazione. La funzione è esclusivamente per l'uso interno del monitoraggio del linguaggio stesso.

Ad esempio, pjlmon.dll, il monitoraggio del linguaggio di esempio , crea un thread separato che chiama il proprio ReadPort per controllare le informazioni sullo stato della stampante non richieste e la funzione ReadPort chiama la funzione ReadPort del monitoraggio delle porte. Quando il monitoraggio delle porte restituisce i dati al monitoraggio della lingua, il monitoraggio del linguaggio analizza i dati ricevuti e chiama SetPort (descritto nella documentazione di Windows SDK) per inviare informazioni sullo stato allo spooler.

La funzione deve restituire il numero di byte letti correttamente inserendo il numero nella posizione a cui punta pcbRead. Il chiamante determina l'esito positivo o negativo dell'operazione di scrittura controllando ReadPort's valore restituito, non il conteggio dei byte restituito. Pertanto, un conteggio di byte restituito pari a zero non rappresenta una lettura non riuscita a meno che la funzione restituisca FALSE.

Un certo tipo di meccanismo di timeout implementato dal sistema o implementato dal monitoraggio deve garantire che la funzione ReadPort restituisca entro un periodo di tempo ragionevole, per evitare di bloccarlo.

È accettabile che un monitoraggio del linguaggio chiami la routine di ReadPort del monitoraggio delle porte all'esterno di una coppia di StartDocPort/EndDocPort. Una chiamata di questo tipo potrebbe essere generata da un thread che controlla lo stato non richiesto. Tuttavia, alcuni monitoraggi delle porte potrebbero non riuscire in una chiamata di questo tipo, quindi il monitoraggio del linguaggio deve essere scritto per gestire questo errore.

Fabbisogno

Requisito Valore
piattaforma di destinazione Desktop
intestazione winsplp.h (includere Winsplp.h)
libreria NtosKrnl.exe

Vedere anche

GetPrinterDataFromPort

StartDocPort

OpenPortEx

OpenPort

EndDocPort