STRUCTURE MONITOR (winsplp.h)
Attention
La structure MONITOR est obsolète et est prise en charge uniquement pour des raisons de compatibilité. Les nouveaux moniteurs d’impression doivent implémenter des MONITOR2 afin qu’ils puissent être utilisés avec des clusters de serveurs d’impression.
La structure MONITOR contient des pointeurs vers les fonctions définies par les moniteurs d’impression.
Syntaxe
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;
Membres
pfnEnumPorts
La fonction EnumPorts d’une DLL de serveur de surveillance de port énumère les ports pris en charge par le moniteur de port.
pfnOpenPort
Pointeur vers la fonction OpenPort du moniteur d’impression.
pfnOpenPortEx
La fonction d’un moniteur de OpenPortEx
langue ouvre un port d’imprimante.
pfnStartDocPort
La fonction d’un StartDocPort
moniteur d’impression effectue les tâches requises pour démarrer un travail d’impression sur le port spécifié.
pfnWritePort
Pointeur vers la fonction WritePort du moniteur d’impression.
pfnReadPort
Pointeur vers la fonction ReadPort du moniteur d’impression.
pfnEndDocPort
La fonction EndDocPort d’un moniteur d’impression effectue les tâches nécessaires pour mettre fin à un travail d’impression sur le port spécifié.
pfnClosePort
Pointeur vers la fonction ClosePort du moniteur d’impression.
pfnAddPort
Attention
La fonction AddPort est obsolète et ne doit pas être utilisée.
AddPort crée un port et l’ajoute à la liste des ports actuellement pris en charge par le moniteur spécifié dans l’environnement de spouleur.
pfnAddPortEx
(Obsolète. Doit avoir la valeur NULL.) Pointeur vers la fonction AddPortEx du moniteur d’impression. (Moniteurs de port uniquement.)
pfnConfigurePort
Attention
La fonction ConfigurePort est obsolète et ne doit pas être utilisée. Utilisez ConfigurePortUI à la place.
ConfigurePort est une fonction de gestion des ports qui configure le port spécifié.
pfnDeletePort
Attention
La fonction DeletePort est obsolète et ne doit pas être utilisée.
DeletePort supprime un port de l’environnement du moniteur.
pfnGetPrinterDataFromPort
La fonction GetPrinterDataFromPort d’un moniteur de port obtient status informations d’une imprimante bidirectionnelle et les retourne à l’appelant.
pfnSetPortTimeOuts
La fonction d’une DLL de serveur de surveillance de port définit les valeurs de SetPortTimeOuts
délai d’attente de port pour un port ouvert.
pfnXcvOpenPort
Pointeur vers la fonction XcvOpenPort du moniteur d’impression. (Moniteurs de port uniquement.)
pfnXcvDataPort
Pointeur vers la fonction XcvDataPort du moniteur d’impression. (Moniteurs de port uniquement.)
pfnXcvClosePort
Pointeur vers la fonction XcvClosePort du moniteur d’impression. (Moniteurs de port uniquement.)
Remarques
Les sections suivantes décrivent plus en détail chaque membre de rappel.
AddPort
typedef BOOL (WINAPI *pfnAddPort)(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pMonitorName
);
Paramètres (AddPort)
Monitor [in] (AddPort)
L’appelant a fourni un instance de contrôle. Il s’agit du handle retourné par la fonction InitializePrintMonitor2 du moniteur. (Ce paramètre n’existe pas si le moniteur d’impression prend en charge InitializePrintMonitor2 au lieu d’InitializePrintMonitor2.)
pName [in] (AddPort)
Pointeur vers une chaîne terminée par null qui spécifie le nom du serveur auquel le port est connecté. Si pName a la valeur NULL, le port est local.
hWnd [in] (AddPort)
Gérer dans la fenêtre parente de la boîte de dialogue dans laquelle le nom de port sera entré.
pMonitorName [in] (AddPort)
Pointeur vers une chaîne terminée par null qui spécifie le moniteur associé au port.
Valeur de retour (AddPort)
La valeur de retour est TRUE si la fonction réussit, et FALSE dans le cas contraire.
ConfigurePort
typedef BOOL (WINAPI *pfnConfigurePort)(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pPortName
);
Paramètres (ConfigurePort)
hMonitor [in] (ConfigurePort)
L’appelant a fourni un instance de contrôle. Il s’agit du handle retourné par la fonction InitializePrintMonitor2 du moniteur. (Ce paramètre n’existe pas si le moniteur d’impression prend en charge InitializePrintMonitor au lieu d’InitializePrintMonitor2.)
pName [in] (ConfigurePort)
Pointeur vers une chaîne terminée par null qui spécifie le nom du serveur sur lequel se trouve le port donné. Si cette chaîne a la valeur NULL, le port est local.
hWnd [in] (ConfigurePort)
Gérer vers la fenêtre parente de la boîte de dialogue dans laquelle les informations de configuration seront entrées.
pPortName [in] (ConfigurePort)
Pointeur vers une chaîne terminée par null qui spécifie le nom du port à configurer.
Valeur de retour (ConfigurePort)
La valeur de retour est TRUE si la fonction réussit.
DeletePort
pfnDeletePort DeletePort;
BOOL WINAPI DeletePort(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pPortName
)
Paramètres (DeletePort)
hMonitor [in] (DeletePort)
L’appelant a fourni un instance de contrôle. Il s’agit du handle retourné par la fonction InitializePrintMonitor2 du moniteur. (Ce paramètre n’existe pas si le moniteur d’impression prend en charge InitializePrintMonitor au lieu d’InitializePrintMonitor2.)
pName [in] (DeletePort)
Pointeur vers une chaîne terminée par null qui spécifie le nom du serveur sur lequel le port à supprimer existe. Si ce paramètre a la valeur NULL, le port est local.
hWnd [in] (DeletePort)
Gérer vers la fenêtre parente de la boîte de dialogue de suppression de port.
pPortName [in] (DeletePort)
Pointeur vers une chaîne terminée par null qui nomme le port à supprimer.
Valeur de retour (DeletePort)
La valeur de retour est TRUE si la fonction réussit.
EndDocPort
typedef BOOL ( WINAPI *pfnEndDocPort)(
_In_ HANDLE hPort
);
Paramètres (EndDocPort)
hPort [in] (EndDocPort)
Handle de port fourni par l’appelant.
Valeur de retour (EndDocPort)
Si l’opération réussit, la fonction doit retourner TRUE. Dans le cas contraire, il doit retourner 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
);
Paramètres (EnumPorts)
hMonitor [in] (EnumPorts)
L’appelant a fourni un instance de contrôle. Il s’agit du handle retourné par la fonction InitializePrintMonitor2 du moniteur. (Ce paramètre n’existe pas si le moniteur d’impression prend en charge InitializePrintMonitor au lieu d’InitializePrintMonitor2.)
pName [in, facultatif] (EnumPorts)
Pointeur fourni par l’appelant vers une chaîne contenant le nom du serveur dont les ports doivent être énumérés. Un pointeur NULL représente le système sur lequel la DLL du serveur de surveillance de port s’exécute.
Level [in] (EnumPorts)
Valeur fournie par l’appelant indiquant le type de structures à retourner dans la mémoire tampon pointée par pPorts.
Les valeurs possibles sont 1 (PORT_INFO_1) ou 2 (PORT_INFO_2).
pPorts [out] (EnumPorts)
Pointeur fourni par l’appelant vers une mémoire tampon pour recevoir des informations de port. Les informations retournées doivent être constituées d’un tableau de structures PORT_INFO_1 ou PORT_INFO_2 , suivi des chaînes pointées par les membres de la structure.
cbBuf [in] (EnumPorts)
Taille fournie par l’appelant, en octets, de la mémoire tampon pointée par pPorts.
pcbNeeded [out] (EnumPorts)
Pointeur fourni par l’appelant vers un emplacement pour recevoir la taille de mémoire tampon, en octets, requise pour contenir toutes les informations retournées.
pcReturned [out] (EnumPorts)
Pointeur fourni par l’appelant vers un emplacement pour recevoir le nombre de ports énumérés.
Valeur de retour (EnumPorts)
Si l’opération réussit, la fonction doit retourner TRUE. Sinon, elle doit retourner 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
)
Paramètres (GetPrinterDataFromPort)
hPort [in] (GetPrinterDataFromPort)
Handle de port fourni par l’appelant.
ControlID [in] (GetPrinterDataFromPort)
Code de contrôle d’E/S d’appareil fourni par l’appelant. La valeur zéro indique qu’un nom de valeur est fourni par pValueName.
pValueName [in] (GetPrinterDataFromPort)
Pointeur fourni par l’appelant vers une chaîne identifiant les informations demandées. Valide uniquement si ControlID est égal à zéro.
lpInBuffer [in] (GetPrinterDataFromPort)
Pointeur fourni par l’appelant vers une mémoire tampon contenant des données d’entrée. Utilisé uniquement si ControlID est différent de zéro.
cbInBuffer [in] (GetPrinterDataFromPort)
Taille fournie par l’appelant, en octets, de la mémoire tampon pointée par lpInBuffer.
lpOutBuffer [out] (GetPrinterDataFromPort)
Pointeur fourni par l’appelant vers une mémoire tampon pour recevoir les données demandées.
cbOutBuffer [in] (GetPrinterDataFromPort)
Taille fournie par l’appelant, en octets, de la mémoire tampon pointée par lpOutBuffer.
lpcbReturned [out] (GetPrinterDataFromPort)
Pointeur fourni par l’appelant vers un emplacement pour recevoir le nombre d’octets écrits dans la mémoire tampon pointée par lpOutBuffer.
Valeur de retour (GetPrinterDataFromPort)
Si l’opération réussit, la fonction doit retourner TRUE. Sinon, elle doit retourner 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
)
Paramètres (OpenPortEx)
hMonitor [in] (OpenPortEx)
Instance de moniteur de langue fourni par l’appelant. Il s’agit du handle retourné par la fonction InitializePrintMonitor2 du moniteur. (Ce paramètre n’existe pas si le moniteur d’impression prend en charge InitializePrintMonitor au lieu d’InitializePrintMonitor2.) Dans un environnement de cluster, il peut y avoir plusieurs instances de moniteurs de langage.
hMonitorPort [in] (OpenPortEx)
Handle instance moniteur de port fourni par l’appelant. Il s’agit du handle retourné par la fonction InitializePrintMonitor2 du moniteur. (Ce paramètre n’existe pas si le moniteur d’impression prend en charge InitializePrintMonitor au lieu d’InitializePrintMonitor2.) Un moniteur de langage doit utiliser ce handle lorsqu’il appelle des fonctions dans la structure MONITOR2 du moniteur de port.
pPortName [in] (OpenPortEx)
Pointeur fourni par l’appelant vers une chaîne contenant le nom du port à ouvrir.
pPrinterName [in] (OpenPortEx)
Pointeur fourni par l’appelant vers une chaîne contenant le nom de l’imprimante connectée au port.
pHandle [out] (OpenPortEx)
Pointeur fourni par l’appelant vers un emplacement pour recevoir un handle de port.
pMonitor [in] (OpenPortEx)
Pointeur fourni par l’appelant vers la structure MONITOR2 retournée par la fonction InitializePrintMonitor2 d’un moniteur de port.
Valeur de retour (OpenPortEx)
Si l’opération réussit, la fonction doit retourner TRUE. Sinon, elle doit retourner FALSE.
SetPortTimeOuts
BOOL (WINAPI *pfnSetPortTimeOuts)
(
_In_ HANDLE hPort,
_In_ LPCOMMTIMEOUTS lpCTO,
_In_ DWORD reserved // must be set to 0
);
Paramètres (SetPortTimeOuts)
hPort [in] (SetPortTimeOuts)
Handle fourni par l’appelant sur le port ouvert sur lequel définir les valeurs de délai d’attente.
lpCTO [in] (SetPortTimeOuts)
Pointeur fourni par l’appelant vers une structure COMMTIMEOUTS .
reserved [in] (SetPortTimeOuts)
Réservé pour un usage futur. Doit être défini sur zéro.
Valeur de retour (SetPortTimeOuts)
Si l’opération réussit, la fonction doit retourner TRUE. Sinon, elle doit retourner FALSE.
StartDocPort
typedef BOOL (WINAPI *pfnStartDocPort)(
_In_ HANDLE hPort,
_In_ LPWSTR pPrinterName,
_In_ DWORD JobId,
_In_ DWORD Level,
_In_ LPBYTE pDocInfo
);
Paramètres (StartDocPort)
hPort [in] (StartDocPort)
Handle de port fourni par l’appelant.
pPrinterName [in] (StartDocPort)
Pointeur fourni par l’appelant vers une chaîne contenant le nom de l’imprimante.
JobId [in] (StartDocPort)
Identificateur de travail affecté par le spouleur fourni par l’appelant.
Level [in] (StartDocPort)
Valeur fournie par l’appelant indiquant le type de structure pointé par pDocInfo.
Les valeurs possibles sont 1 (DOC_INFO_1) ou 2 (DOC_INFO_2).
pDocInfo [in] (StartDocPort)
Pointeur fourni par l’appelant vers une structure DOC_INFO_1 ou DOC_INFO_2 .
Valeur de retour (StartDocPort)
Si l’opération réussit, la fonction doit retourner TRUE. Sinon, elle doit retourner FALSE.
Notes
Le spouleur appelle AddPort lorsqu’il reçoit une demande d’application pour ajouter un port à son environnement. Le spouleur transfère l’appel au moniteur de port nommé sur le serveur nommé.
AddPort permet d’ajouter un port de manière interactive. Un moniteur doit inviter un utilisateur à entrer le nom du port dans une boîte de dialogue de la fenêtre associée à hWnd. AddPort doit valider le nom de port entré en appelant la fonction Win32 EnumPorts pour s’assurer qu’aucun nom de port en double n’est ajouté à l’environnement du spouleur. Un moniteur doit également vérifier que le port est celui qu’il prend en charge.
Le spouleur ne prend pas en charge les appels AddPort distants. Par conséquent, les implémentations AddPort peuvent ignorer les paramètres pName et pMonitorName .
Le spouleur appelle ConfigurePort afin qu’un moniteur de port puisse effectuer la configuration du port. ConfigurePort peut proposer une boîte de dialogue permettant d’obtenir tout ou partie des informations de configuration de port nécessaires auprès de l’utilisateur.
Le spouleur ne prend pas en charge les appels ConfigurePort distants ; Par conséquent, les moniteurs peuvent ignorer le paramètre pName .
Le spouleur appelle DeletePort pour qu’un moniteur de port puisse supprimer un port de l’environnement du moniteur. Le moniteur doit supprimer le port spécifié de son état. Le spouleur n’appelle pas DeletePort sur un moniteur tant qu’un port est ouvert.
Les applications peuvent supprimer des ports locaux et distants. L’interface utilisateur de l’imprimante affiche une boîte de message de confirmation avant que le spouleur appelle DeletePort. Par conséquent, un moniteur doit ignorer le paramètre hWnd et ne pas afficher une autre boîte de dialogue.
Les moniteurs de langage et les DLL de serveur de surveillance de port sont nécessaires pour définir une fonction EndDocPort et inclure l’adresse de la fonction dans une structure de 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.
La fonction EndDocPort d’un moniteur de langage appelle généralement la fonction EndDocPort du moniteur de port associée. Il doit également avertir le spouleur lorsque le périphérique d’impression a terminé le travail en appelant SetJob, en spécifiant une commande de JOB_CONTROL_LAST_PAGE_EJECTED. Les moniteurs de langue pour les imprimantes bidirectionnelles ne doivent pas appeler SetJob tant que l’imprimante n’a pas envoyé une notification indiquant que le travail est vraiment terminé.
La fonction EndDocPort d’un serveur de surveillance de port appelle généralement la fonction CloseHandle pour fermer le handle obtenu précédemment en appelant CreateFile à partir de StartDocPort. Il doit également avertir le spouleur lorsque le périphérique d’impression a terminé le travail, en appelant SetJob, en spécifiant une commande de JOB_CONTROL_SENT_TO_PRINTER. (Si un spouleur communique avec le port via un moniteur de langue, il ne considère pas le travail terminé tant que le moniteur de langue n’a pas envoyé JOB_CONTROL_LAST_PAGE_EJECTED.)
La fonction EndDocPort doit libérer toutes les ressources qui ont été allouées par la fonction StartDocPort .
Vous pouvez modifier le comportement de la fonction EndDocPort si l’utilisateur a supprimé ou redémarré le travail d’impression. La fonction peut appeler GetJob et case activée pour un status de JOB_STATUS_DELETING ou de JOB_STATUS_RESTART, pour voir si l’un de ces événements s’est produit.
Les DLL du serveur du moniteur de port sont nécessaires pour définir une fonction EnumPorts et inclure l’adresse de la fonction dans une structure MONITOR2 . Les moniteurs de langage n’exportent pas cette fonction.
L’objectif de la fonction EnumPorts est d’énumérer les ports actuellement pris en charge par un moniteur d’impression. Ces ports sont ceux qui ont été précédemment spécifiés pour la fonction AddPortUI ou AddPortEx du moniteur.
La fonction EnumPorts doit remplir la mémoire tampon pointée par pPort avec un tableau de structures PORT_INFO_1 ou PORT_INFO_2. Ensuite, à partir d’un emplacement de mémoire après le dernier élément de tableau, la fonction doit charger toutes les chaînes pointées par les membres de la structure du tableau. Reportez-vous à localmon.dll, un exemple de moniteur de port, pour obtenir un exemple de procédure à suivre. La fonction doit également retourner le nombre de structures fournies (c’est-à-dire le nombre de ports pris en charge) en plaçant le nombre à l’emplacement pointé par pcReturned.
L’appelant spécifie la taille de la mémoire tampon fournie dans cbBuf. Si la mémoire tampon est trop petite, la fonction doit placer la taille de mémoire tampon requise à l’emplacement désigné par pcbNeeded, appeler SetLastError en spécifiant ERROR_INSUFFICIENT_BUFFER, puis retourner FALSE.
Si Level contient un numéro de niveau non valide, la fonction doit appeler SetLastError en spécifiant ERROR_INVALID_LEVEL et retourner FALSE. Certains moniteurs de port prennent uniquement en charge une valeur de niveau de 1.
Le moniteur de port doit prendre en charge la localisation des chaînes pointées par les membres pMonitorName et pDescription de la structure PORT_INFO_2. Ces chaînes doivent être définies dans les fichiers de ressources et obtenues en appelant LoadString.
Le membre fPortType de la structure PORT_INFO_2 n’est pas utilisé avec les systèmes d’exploitation NT.
Les moniteurs de langage et les DLL de serveur de surveillance de port peuvent éventuellement définir une fonction GetPrinterDataFromPort et inclure l’adresse de la fonction dans une structure MONITOR2 .
La fonction est destinée à être utilisée avec des imprimantes bidirectionnelles et peut être utilisée de deux manières :
Pour demander à un moniteur de langue d’interroger le port de l’imprimante, pour obtenir la valeur actuelle des informations spécifiques à l’imprimante stockées dans le registre.
Pour demander à un moniteur de port d’envoyer un code de contrôle d’E/S au pilote de port.
Si la fonction GetPrinterDataFromPort d’un moniteur de langage reçoit un pointeur de chaîne dans pValueName, elle doit retourner une valeur dans la mémoire tampon de sortie fournie. En règle générale, la chaîne représente un nom de valeur de Registre, et le spouleur appelle GetPrinterDataFromPort lorsqu’une application appelle la fonction GetPrinterData .
La responsabilité du moniteur de langue consiste à envoyer une commande au matériel d’imprimante en appelant la fonction WritePort du moniteur de port et en lisant la réponse en appelant ReadPort pour obtenir la valeur nécessaire. Par exemple, pjlmon.dll, l’exemple de moniteur de langue, peut retourner des valeurs pour les noms de valeurs de Registre « Mémoire installée » et « Mémoire disponible » d’un port.
Une fois que le spouleur a appelé GetPrinterDataFromPort pour obtenir une valeur de Registre, il met à jour le registre avec la nouvelle valeur.
En règle générale, les moniteurs de port ne prennent pas en charge les appels à GetPrinterDataFromPort qui incluent un pointeur de chaîne dans pValueName.
Si la fonction GetPrinterDataFromPort d’un moniteur de langage reçoit un code de contrôle d’E/S différent de zéro dans ControlID, elle doit simplement appeler la fonction GetPrinterDataFromPort du moniteur de port associée et retourner le résultat. La référence des pilotes en mode noyau répertorie les codes de contrôle d’E/S pour les ports parallèles et série.
Quand la fonction GetPrinterDataFromPort d’un moniteur de port reçoit un code de contrôle d’E/S différent de zéro dans ControlID, elle doit appeler DeviceIOControl pour passer le code de contrôle au pilote de port en mode noyau. Les valeurs des paramètres lpInBuffer, cbInBuffer, lpOutBuffer, cbOutBuffer et lpcbReturned doivent également être passées à DeviceIOControl.
Les moniteurs de langage sont nécessaires pour définir une OpenPortEx
fonction et inclure son adresse dans une structure MONITOR2 . La OpenPortEx
fonction est appelée par le spouleur d’impression lorsqu’une file d’attente d’impression est connectée à un port.
L’objectif OpenPortEx
principal de la fonction est de retourner un handle de port que l’appelant peut utiliser comme argument d’entrée pour les appels ultérieurs aux fonctions StartDocPort, WritePort, ReadPort, EndDocPort et GetPrinterDataFromPort du moniteur de langage. Étant donné qu’un moniteur de langage implémente généralement ces fonctions en appelant les fonctions équivalentes dans son moniteur de port associé, un moniteur de langue obtient généralement un handle de port en appelant la fonction OpenPort du moniteur de port. Pour plus d’informations, consultez Interaction du moniteur de langue et de port.
Le OpenPortEx
paramètre pMonitor de la fonction est un pointeur vers la structure MONITOR2 du moniteur de port. Cette structure contient des pointeurs vers les fonctions callables du moniteur de port. La OpenPortEx
fonction doit case activée la structure pour vérifier que tous les pointeurs de fonction requis sont non NULL. Si la structure est valide, la fonction doit la copier dans le stockage local. Sinon, OpenPortEx
vous devez appeler SetLastError, en spécifiant ERROR_INVALID_PRINT_MONITOR et retourner FALSE.
Les fonctions du moniteur d’impression qui acceptent un handle de port comme entrée n’acceptent pas non plus de handle de moniteur. Par conséquent, la OpenPortEx
fonction doit stocker le handle de moniteur reçu dans un emplacement qui peut être référencé par le handle de port. Cela permet aux fonctions qui acceptent un handle de port de référencer le handle du moniteur.
La fonction d’une DLL de serveur de surveillance de SetPortTimeOuts
port permet à un moniteur de langue de spécifier des valeurs de délai d’attente de port pour un port ouvert. La fonction est facultative et doit être fournie uniquement si le moniteur de port contrôle un port qui autorise la modification des valeurs de délai d’attente de port. Si la fonction est définie, son adresse doit être incluse dans une structure MONITOR2 .
La fonction est appelée par pjlmon.dll, l’exemple de moniteur de langue, et vous pouvez écrire un moniteur de langue personnalisé qui l’appelle. Le spouleur d’impression n’appelle SetPortTimeOuts
pas .
Le moniteur de port doit initialiser les valeurs de délai d’attente du port à partir de sa fonction OpenPort .
Les moniteurs de langage et les DLL de serveur de surveillance de port sont nécessaires pour définir une StartDocPort
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.
La fonction d’un moniteur de StartDocPort
langue appelle généralement la fonction du moniteur de StartDocPort
port associé.
La fonction d’une DLL de serveur de surveillance de StartDocPort
port appelle généralement la fonction CreateFile pour créer une connexion au pilote de port en mode noyau.
Si nécessaire, le moniteur de port doit empêcher d’autres processus d’utiliser le port spécifié tant que EndDocPort n’est pas appelé. Par exemple, un moniteur de port pour un port COM doit s’assurer que, pendant qu’un spouleur envoie des données d’imprimante au port, une autre application ne suppose pas que le port est connecté à un périphérique de communication particulier, puis tente de communiquer avec ce périphérique. Cette mise en garde ne s’applique pas au fournisseur d’impression local, qui garantit qu’il n’appelle StartDocPort
jamais deux fois de suite sans un appel intermédiaire à EndDocPort, mais il s’applique aux fournisseurs d’impression qui n’effectuent pas cette garantie.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | winsplp.h (inclure Winsplp.h) |