Partager via


Fonction DrvEscape (winddi.h)

La fonction DrvEscape est utilisée pour récupérer des informations à partir d’un appareil qui n’est pas disponible dans une interface de pilote de périphérique indépendante de l’appareil ; la requête particulière dépend de la valeur du paramètre iEsc .

Syntaxe

ULONG DrvEscape(
  [in]  SURFOBJ *pso,
  [in]  ULONG   iEsc,
  [in]  ULONG   cjIn,
  [in]  PVOID   pvIn,
  [in]  ULONG   cjOut,
  [out] PVOID   pvOut
);

Paramètres

[in] pso

Pointeur vers une structure SURFOBJ qui décrit la surface vers laquelle l’appel est dirigé.

[in] iEsc

Spécifie une requête. La signification des autres paramètres dépend de cette valeur. QUERYESCSUPPORT est la seule valeur prédéfinie ; il demande si le pilote prend en charge une fonction d’échappement particulière. Dans ce cas, pvIn pointe vers un numéro de fonction d’échappement ; cjOut et pvOut sont ignorés. Si la fonction spécifiée est prise en charge, la valeur de retour est différente de zéro.

[in] cjIn

Spécifie la taille, en octets, de la mémoire tampon pointée par pvIn.

[in] pvIn

Pointeur vers les données d’entrée de l’appel. Le format des données d’entrée dépend de la requête spécifiée par le paramètre iEsc .

[in] cjOut

Spécifie la taille, en octets, de la mémoire tampon pointée vers pvOut.

[out] pvOut

Pointeur vers la mémoire tampon de sortie. Le format des données de sortie dépend de la requête spécifiée par le paramètre iEsc .

Valeur retournée

La valeur de retour dépend de la requête spécifiée par le paramètre iEsc . Si la fonction spécifiée dans la requête n’est pas prise en charge, la valeur de retour est zéro.

Remarques

Le dessin sur l’appareil n’est pas autorisé dans cette fonction. DrvDrawEscape doit être utilisé pour la prise en charge du dessin spécialisé.

GDI transmet des données directement d’une application cliente (éventuellement malveillante) au pilote, ce qui signifie que la fonction DrvEscape doit valider tous les arguments d’entrée. Plus précisément, cette fonction doit :

  • Vérifiez que la valeur reçue dans le paramètre iEsc représente une requête valide.
  • Vérifiez que la taille de la mémoire tampon d’entrée (la valeur dans le paramètre cjIn ) est valide pour la requête spécifiée.
  • Vérifiez que le contenu de la mémoire tampon pointée vers le paramètre pvIn est valide pour la requête spécifiée.
  • Vérifiez que la taille de la mémoire tampon de sortie spécifiée (la valeur dans le paramètre cjOut ) est valide pour la requête spécifiée.
Microsoft réserve la plage 0 à 0X10000 pour ses codes d’échappement. Les fournisseurs tiers sont libres de choisir des codes d’échappement pour leur propre utilisation au-delà de cette plage. Étant donné que les codes d’échappement spécifiques au pilote peuvent entrer en conflit avec ceux utilisés dans d’autres pilotes d’affichage, il est important qu’un pilote d’affichage valide les paramètres d’échappement avant de traiter l’échappement. Une façon de procéder consiste à valider les tailles de blocs d’entrée et de sortie, ainsi que les paramètres de bloc d’entrée. Pour plus de sécurité, les pilotes doivent également inclure une valeur « magique » qui doit être définie de manière appropriée dans chaque bloc d’entrée pour garantir que le bloc d’entrée provient d’une source approuvée.

DrvEscape est facultatif pour tous les pilotes.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête winddi.h (inclure Winddi.h)

Voir aussi

DrvDrawEscape

SURFOBJ