Partager via


DrvConvertDevMode, fonction (winddiui.h)

La fonction DrvConvertDevMode d’une dll d’interface d’imprimante convertit la structure DEVMODEW d’une imprimante vers une autre.

Syntaxe

BOOL DrvConvertDevMode(
  [in]      LPTSTR   pPrinterName,
  [in]      PDEVMODE pdmIn,
  [out]     PDEVMODE pdmOut,
  [in, out] PLONG    pcbNeeded,
  [in]      DWORD    fMode
);

Paramètres

[in] pPrinterName

Pointeur fourni par l’appelant vers une chaîne de nom d’imprimante. Pour plus d’informations sur ce paramètre, consultez la section Remarques suivante.

[in] pdmIn

Pointeur fourni par l’appelant vers une structure DEVMODEW d’entrée. Si fMode est CDM_DRIVER_DEFAULT, ce pointeur est NULL.

[out] pdmOut

Pointeur fourni par l’appelant vers une mémoire tampon pour recevoir une structure DEVMODEW de sortie. Si fMode est CDM_CONVERT la mémoire tampon contient, lors de l’entrée, une structure DEVMODEW valide indiquant la version du pilote cible.

[in, out] pcbNeeded

Pointeur fourni par l’appelant à la taille, en octets, de la mémoire tampon pointée par pdmOut. En sortie, la DLL de l’interface d’imprimante doit remplacer la valeur de taille reçue avec la taille réelle de la structure DEVMODEW convertie. Si la mémoire tampon reçue est trop petite, la DLL de l’interface d’imprimante doit remplacer la valeur de taille reçue avec la taille de mémoire tampon requise.

[in] fMode

Indicateur de bits fourni par l’appelant indiquant le type d’opération à effectuer. Il peut s’agir de l’un des indicateurs suivants :

CDM_CONVERT

La fonction doit convertir le contenu de la structure DEVMODEW d’entrée (pointée par pdmIn) en une nouvelle structure DEVMODEW et placer le résultat dans la structure DEVMODEW pointée par pdmOut. Le contenu initial de la structure DEVMODEW de sortie reçue (pointé par pdmOut) doit être utilisé pour déterminer la version de sortie.

CDM_CONVERT351

La fonction doit convertir le contenu de la structure DEVMODEW d’entrée (pointée par pdmIn), créer une structure DEVMODEW de sortie compatible avec Windows NT 3.51 et placer le résultat dans la structure DEVMODEW pointée par pdmOut.

Si le pilote ne prend pas en charge une structure DEVMODEW pour Windows NT 3.51, la fonction doit convertir l’entrée DEVMODEW en version actuelle.

CDM_DRIVER_DEFAULT

La fonction doit copier la version actuelle de sa structure DEVMODEW par défaut vers la mémoire tampon pointée par pdmOut.

Valeur de retour

Si l’opération réussit, la fonction doit retourner TRUE; sinon, il doit appeler SetLastError pour définir un code d’erreur et retourner FALSE.

Remarques

Dans un environnement client/serveur, un client peut exécuter une version du système d’exploitation ou du pilote d’imprimante pendant que le serveur (spouleur) exécute un autre, ce qui signifie que la définition de structure DEVMODEW d’une imprimante peut être incohérente entre le client et le serveur. La fonction DrvConvertDevMode doit être capable d’effectuer des conversions d’une version de la structure DEVMODEW de l’imprimante vers une autre.

Lors de la conversion d’une version DEVMODEW vers une autre, les membres DEVMODEW publics et privés doivent être inclus.

Le nom de l’imprimante pointé par pPrinterName peut être utilisé comme argument d’entrée pour la fonction OpenPrinter (décrite dans la documentation du Kit de développement logiciel (SDK) Microsoft Windows), qui peut être appelée pour obtenir les valeurs stockées par défaut lorsque l’indicateur de CDM_DRIVER_DEFAULT est reçu. Notez que la chaîne de nom d’imprimante ne doit pas être modifiée d’une manière quelconque avant un appel à OpenPrinter. En outre, un appel à OpenPrinter doit se trouver dans le même thread que celui utilisé pour appeler DrvConvertDevMode.

La fonction doit vérifier que les deux pdmIn et pdmOut (le cas échéant) pointent vers des structures DEVMODEW valides. Si ce n’est pas le cas, la fonction doit appeler SetLastError(ERROR_INVALID_PARAMETER) et retourner FALSE. Si la taille DEVMODEW de sortie spécifiée par n’est pas trop petite, le pilote doit remplacer la valeur de taille fournie par à la taille de mémoire tampon requise, appeler SetLastError(ERROR_INSUFFICIENT_BUFFER) et retourner FALSE.

La fonction DrvConvertDevMode s’exécute dans le contexte du spouleur et ne doit donc pas afficher une interface utilisateur.

Lorsque DrvConvertDevMode est appelé avec un pointeur de structure NULL DEVMODEW dans le paramètre pdmOut pour obtenir la taille de la mémoire tampon, le pilote doit définir la dernière erreur sur ERROR_INSUFFICIENT_BUFFER. Si la dernière erreur n’est pas définie sur cette valeur, le spouleur suppose une erreur générale.

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête winddiui.h (include Winddiui.h)