Partager via


Fonction XcvDataPort (winsplp.h)

La fonction XcvDataPort d’une DLL de serveur de surveillance de port reçoit des informations de la DLL d’interface utilisateur du moniteur de port et retourne des informations à.

Syntaxe

DWORD XcvDataPort(
  _In_  HANDLE  hXcv,
  _In_  LPCWSTR pszDataName,
  _In_  PBYTE   pInputData,
        DWORD   cbInputData,
  _Out_ PBYTE   pOutputData,
        DWORD   cbOutputData,
  _Out_ PDWORD  pcbOutputNeeded
);

Paramètres

[in] hXcv

Handle d’imprimante fourni par l’appelant, obtenu en appelant OpenPrinter (décrit dans la documentation Microsoft Windows SDK). Ce handle est créé et retourné par la fonction XcvOpenPort .

[in] pszDataName

Pointeur fourni par l’appelant vers une chaîne représentant le nom des données demandées. Pour plus d'informations, consultez la section Notes qui suit.

[in] pInputData

Pointeur fourni par l’appelant vers une mémoire tampon contenant des données d’entrée.

cbInputData

Taille fournie par l’appelant, en octets, de la mémoire tampon pointée par pInputData.

[out] pOutputData

Pointeur fourni par l’appelant vers une mémoire tampon pour recevoir des données de sortie.

cbOutputData

Taille fournie par l’appelant, en octets, de la mémoire tampon pointée par pOutputData.

[out] pcbOutputNeeded

Pointeur fourni par l’appelant vers un emplacement pour recevoir la taille minimale, en octets, requise pour la mémoire tampon pointée par pOutputData.

Valeur retournée

Si l’opération réussit, cette fonction doit retourner ERROR_SUCCESS. Sinon, il doit retourner un code d’erreur Win32 préfixé ERROR_. La DLL d’interface utilisateur du moniteur d’impression reçoit cette valeur dans l’emplacement pdwStatus spécifié pour XcvData.

Remarques

Les DLL de serveur de surveillance de port sont nécessaires pour définir une fonction XcvDataPort afin qu’elles puissent recevoir des informations d’une DLL d’interface utilisateur du moniteur de port et les renvoyer. L’adresse de la fonction doit être incluse dans une structure MONITOR2 .

La fonction XcvDataPort est appelée par la fonction XcvData du spouleur. Les paramètres de fonction pour XcvDataPort et XcvData sont presque identiques. (XcvData a un paramètre supplémentaire, pdwStatus, qui n’est pas présent dans XcvDataPort.)

La chaîne pointée vers par pszDataName spécifie l’opération à effectuer. La fonction doit reconnaître les chaînes de noms de données suivantes :

Chaîne de nom de données Opération
L"AddPort » Toutes les informations nécessaires à l’ajout d’un port ont été envoyées. La fonction doit effectuer les opérations nécessaires pour ajouter le port spécifié, notamment en écrivant le nom du port dans le Registre sous la clé Ports. Le paramètre pInputData pointe vers une chaîne de nom de port terminée par NULL. Si la fonction retourne ERROR_SUCCESS, le spouleur marque le port comme ajouté. Cette chaîne est spécifiée par la DLL d’interface utilisateur du moniteur d’impression, à partir de sa fonction AddPortUI .
L"DeletePort » Toutes les informations nécessaires à la suppression d’un port ont été envoyées. La fonction doit effectuer les opérations nécessaires pour supprimer le port spécifié, notamment en supprimant le nom du port de la clé Ports du Registre. Le paramètre pInputData pointe vers une chaîne de nom de port terminée par NULL. Si la fonction retourne ERROR_SUCCESS, le spouleur marque le port comme supprimé. Cette chaîne est spécifiée par la DLL d’interface utilisateur du moniteur d’impression, à partir de sa fonction DeletePortUI .
L"MonitorUI » La fonction doit utiliser pOutputData pour renvoyer le nom de la DLL d’interface utilisateur du moniteur de port associée. Cette chaîne est spécifiée par le spouleur d’impression lorsqu’une application appelle la fonction AddPort Microsoft Windows SDK.

En règle générale, la fonction est écrite pour reconnaître des chaînes personnalisées supplémentaires envoyées par la DLL d’interface utilisateur à partir de ses fonctions AddPortUI, ConfigurePortUI et DeletePortUI . Ces chaînes peuvent représenter des commandes qui demandent des valeurs de configuration actuelles à la DLL du serveur ou qui fournissent de nouvelles valeurs. Par exemple, votre fonction XcvDataPort peut reconnaître la chaîne « GetTransmissionRetryTimeout », que votre DLL d’interface utilisateur peut envoyer à la DLL de votre serveur pour demander la valeur de délai d’attente de nouvelle tentative de transmission actuellement stockée. Vous pouvez également définir un ensemble de chaînes qui doivent être envoyées avant l’envoi de « AddPort » ou « DeletePort », où les chaînes sont utilisées pour fournir des informations identifiant le port à ajouter ou à supprimer.

Pour une chaîne pszDataName et une mémoire tampon d’entrée données, XcvDataPort peut d’abord être appelé avec une valeur cbOutputData de zéro. La fonction doit retourner une taille de mémoire tampon requise dans pcbOutputNeeded, ainsi qu’une valeur de retour de ERROR_INSUFFICIENT_BUFFER. L’appelant peut utiliser la valeur reçue dans pcbOutputNeeded pour allouer une mémoire tampon de sortie d’une taille adéquate, puis peut à nouveau appeler XcvDataPort , en spécifiant cette fois la taille de mémoire tampon allouée dans cbOutputData.

La fonction XcvDataPort doit valider tous les arguments d’entrée. Plus précisément, la fonction doit :

  • Validez le contenu de la chaîne pointée vers le paramètre pszDataName . Si cette chaîne représente une opération administrative (généralement l’ajout, la suppression ou la configuration d’un port), la fonction XcvDataPort doit comparer le masque d’accès accordé précédemment reçu par la fonction XcvOpenPort avec SERVER_ACCESS_ADMINISTER. Si la comparaison échoue, XcvDataPort doit retourner ERROR_ACCESS_DENIED.

  • Validez le contenu de la mémoire tampon pointée vers le paramètre pInputData . Lorsque le spouleur appelle la fonction XcvOpenPort , il n’effectue aucune validation sur le contenu de cette mémoire tampon. Le moniteur ne peut faire aucune hypothèse sur la validité de ces données, qui peuvent provenir d’une application malveillante.

Si vous écrivez un moniteur de port qui communiquera avec TCPMON, consultez Interface TCPMON Xcv.

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

XcvOpenPort

DeletePortUI

ConfigurePortUI

AddPortUI

XcvData