structure UNIDRV_PRIVATE_DEVMODE (printoem.h)

La structure UNIDRV_PRIVATE_DEVMODE permet aux plug-ins Unidrv de déterminer la taille de la partie privée de la structure DEVMODEW d’Unidrv.

Syntaxe

typedef struct _UNIDRV_PRIVATE_DEVMODE {
  WORD wReserved[4];
  WORD wSize;
} UNIDRV_PRIVATE_DEVMODE, *PUNIDRV_PRIVATE_DEVMODE;

Membres

wReserved[4]

Réservé pour le système.

wSize

Taille, en octets, de la partie privée de la structure DEVMODEW d’Unidrv.

Remarques

Pour plus d’informations sur les sections publique et privée de la structure DEVMODEW , consultez DEVMODEW.

Printoem.h définit une macro pour déterminer la taille de la partie privée de la structure DEVMODEW d’Unidrv.

#define GET_UNIDRV_PRIVATE_DEVMODE_SIZE(pdm)\
    ( ( (pdm)->dmDriverExtra > (FIELD_OFFSET(UNIDRV_PRIVATE_DEVMODE, wSize) + sizeof(WORD)) ) ? \
    ((PUNIDRV_PRIVATE_DEVMODE)((PBYTE)(pdm) + (pdm)-> dmSize)) -> wSize : 0 )

L’argument pdm dans la macro GET_UNIDRV_PRIVATE_DEVMODE_SIZE est un pointeur vers une structure DEVMODEW . La macro détermine si la valeur du membre dmDriverExtra de la structure DEVMODEW est supérieure au décalage d’octets du membre wSize de la structure UNIDRV_PRIVATE_DEVMODE. Si c’est le cas, la macro retourne la valeur du membre wSize dans la structure UNIDRV_PRIVATE_DEVMODE. Si ce n’est pas le cas, la macro retourne zéro.

Pour déterminer en toute sécurité l’adresse de la partie privée de la structure DEVMODEW de votre plug-in, procédez comme suit :

  1. Appelez la macro GET_UNIDRV_PRIVATE_DEVMODE_SIZE en passant l’adresse de la structure DEVMODEW dans l’appel.

  2. Vérifiez que (pdm)->dmDriverExtra est supérieur à la valeur retournée par la macro. (La macro retourne la valeur du membre wSize de la structure UNIDRV_PRIVATE_DEVMODE .)

  3. Déterminez l’adresse de la partie privée de la structure DEVMODEW de votre plug-in comme suit.

    pdmPlugin = (PBYTE)(pdm) + (pdm)->dmSize + wSize;
    

    L’exemple précédent commence par l’adresse de la structure DEVMODEW publique (pdm), ajoute le nombre d’octets de cette structure (pdm-dmSize>), puis ajoute la taille en octets de la structure DEVMODEW privée Unidrv (wSize). Les données DEVMODEW privées d’un plug-in commencent à cette adresse mémoire. Si plusieurs plug-ins sont chaînés, l’adresse retournée par cet exemple est celle des données DEVMODEW privées du premier plug-in. Les données DEVMODEW privées du deuxième plug-in suivent les données DEVMODEW privées du premier plug-in, les données DEVMODEW privées du troisième plug-in suivent celle des données DEVMODEW privées du deuxième plug-in, et ainsi de suite. Un développeur de plug-ins qui doit déterminer l’adresse des données DEVMODEW privées du n-ième plug-in doit connaître la taille des données DEVMODEW privées pour les n-1 premiers plug-ins.

  4. Vérifiez que la partie privée de la structure DEVMODEW de votre plug-in commence par une structure OEM_DMEXTRAHEADER valide.

Configuration requise

Condition requise Valeur
En-tête printoem.h (inclure Printoem.h)

Voir aussi

PSCRIPT5_PRIVATE_DEVMODE