Funzione ReadPort (winsplp.h)

La funzione di ReadPort monitoraggio della porta 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.

Commenti

I monitoraggi del linguaggio e le DLL del server di monitoraggio delle porte sono necessari per definire una ReadPort funzione e includere l'indirizzo della funzione in una struttura MONITOR2.

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

In genere, la funzione di ReadPort monitoraggio del linguaggio chiama la funzione del ReadPort monitor della porta associata e restituisce il contenuto del buffer ottenuto al chiamante.

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

In genere, una DLL del server di monitoraggio porta chiama ReadFile (descritta nella documentazione di ReadPort 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 ReadPort le funzioni e inserire gli indirizzi nelle strutture MONITOR2, la funzione di ReadPort monitoraggio del linguaggio non viene mai chiamata in realtà 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 watch per informazioni sullo stato della stampante non richieste e la funzione chiama la ReadPort funzione del ReadPort monitor della porta. Quando il monitoraggio delle porte restituisce i dati al monitoraggio del linguaggio, il monitoraggio del linguaggio analizza i dati ricevuti e chiama SetPort (descritto nella documentazione di Windows SDK) per inviare informazioni sullo stato al spooler.

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

Un certo tipo di meccanismo di timeout implementato dal sistema o di monitoraggio deve garantire che la funzione restituirà entro un periodo di tempo ragionevole, per evitare di stallare lo ReadPort spooler.

È accettabile che un monitoraggio del linguaggio chiami la routine di ReadPort un monitoraggio porta all'esterno di una coppia StartDocPort EndDocPort/. Tale chiamata potrebbe essere generata da un controllo thread per 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.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione winsplp.h (include Winsplp.h)
Libreria NtosKrnl.exe

Vedi anche

GetPrinterDataFromPort

StartDocPort

OpenPortEx

OpenPort

EndDocPort