Share via


Fonction ReadPort (winsplp.h)

La fonction d’un moniteur de ReadPort port lit les données d’un port d’imprimante.

Syntaxe

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

Paramètres

[in] hPort

Handle de port fourni par l’appelant.

[out] pBuffer

Pointeur fourni par l’appelant vers une mémoire tampon pour recevoir des données lues à partir du port.

cbBuffer

Taille fournie par l’appelant, en octets, de pBuffer.

[out] pcbRead

Pointeur fourni par l’appelant vers un emplacement pour recevoir le nombre d’octets correctement lus à partir du port.

Valeur retournée

Si l’opération réussit, la fonction doit retourner TRUE. Sinon, elle doit retourner FALSE.

Remarques

Les moniteurs de langage et les DLL de serveur de surveillance de port sont nécessaires pour définir une ReadPort fonction et inclure l’adresse de la fonction dans une structure MONITOR2 .

Le handle reçu en tant qu’argument hPort de la fonction est le handle de port fourni par la fonction OpenPort ou OpenPortEx du moniteur.

En règle générale, la fonction d’un moniteur de ReadPort langage appelle la fonction du moniteur de ReadPort port associé et retourne le contenu de la mémoire tampon obtenue à l’appelant.

En outre, un moniteur de langue peut créer un thread distinct qui appelle la fonction du moniteur de ReadPort port pour case activée pour obtenir des informations de status non sollicitées. Si une telle opération de lecture réussit, les informations de status doivent être retournées au spouleur en appelant SetPort (décrit dans la documentation Microsoft Windows SDK).

En règle générale, la fonction d’une DLL de serveur de surveillance de ReadPort port appelle ReadFile (décrit dans la documentation SDK Windows) pour obtenir des données à partir du pilote de port en mode noyau. La fonction retourne simplement les données à l’appelant.

Même si les moniteurs de langage et les moniteurs de port doivent définir ReadPort des fonctions et placer leurs adresses dans des structures MONITOR2, la fonction d’un moniteur de ReadPort langage n’est jamais réellement appelée par le spouleur ou une application. La fonction est uniquement destinée à l’utilisation interne du moniteur de langage lui-même.

Par exemple, pjlmon.dll, l’exemple de moniteur de langue, crée un thread distinct qui appelle son propre ReadPort watch pour obtenir des informations de status d’imprimante non sollicitées, et la ReadPort fonction appelle la fonction du moniteur de ReadPort port. Lorsque le moniteur de port retourne des données au moniteur de langue, celui-ci analyse les données reçues et appelle SetPort (décrit dans la documentation SDK Windows) pour envoyer status informations au spouleur.

La fonction doit retourner le nombre d’octets correctement lus en plaçant le nombre à l’emplacement indiqué par pcbRead. L’appelant détermine la réussite ou l’échec de l’opération d’écriture en vérifiant ReadPort's la valeur de retour, et non le nombre d’octets retournés. Par conséquent, un nombre d’octets retourné de zéro ne représente pas un échec de lecture, sauf si la fonction retourne FALSE.

Une sorte de mécanisme de délai d’attente implémenté par le système ou implémenté par le moniteur doit garantir que la ReadPort fonction retourne dans un délai raisonnable, afin d’éviter de bloquer le spouleur.

Il est acceptable pour un moniteur de langue d’appeler la routine d’un moniteur de ReadPort port en dehors d’une paire StartDocPort/EndDocPort . (Un tel appel peut être généré par un thread qui recherche des status non sollicités.) Toutefois, certains moniteurs de port peuvent échouer à un tel appel, de sorte que le moniteur de langue doit être écrit pour gérer cet échec.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête winsplp.h (inclure Winsplp.h)
Bibliothèque NtosKrnl.exe

Voir aussi

GetPrinterDataFromPort

StartDocPort

OpenPortEx

OpenPort

EndDocPort