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 |