Compartir a través de


Función DrvEscape (winddi.h)

La función DrvEscape se usa para recuperar información de un dispositivo que no está disponible en una interfaz de controlador de dispositivo independiente del dispositivo; la consulta determinada depende del valor del parámetro iEsc .

Sintaxis

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

Parámetros

[in] pso

Puntero a una estructura SURFOBJ que describe la superficie a la que se dirige la llamada.

[in] iEsc

Especifica una consulta. El significado de los demás parámetros depende de este valor. QUERYESCSUPPORT es el único valor predefinido; consulta si el controlador admite una función de escape determinada. En este caso, pvIn apunta a un número de función de escape; cjOut y pvOut se omiten. Si se admite la función especificada, el valor devuelto es distinto de cero.

[in] cjIn

Especifica el tamaño, en bytes, del búfer al que apunta pvIn.

[in] pvIn

Puntero a los datos de entrada de la llamada. El formato de los datos de entrada depende de la consulta especificada por el parámetro iEsc .

[in] cjOut

Especifica el tamaño, en bytes, del búfer al que apunta pvOut.

[out] pvOut

Puntero al búfer de salida. El formato de los datos de salida depende de la consulta especificada por el parámetro iEsc .

Valor devuelto

El valor devuelto depende de la consulta especificada por el parámetro iEsc . Si no se admite la función especificada en la consulta, el valor devuelto es cero.

Comentarios

No se permite dibujar en el dispositivo en esta función. DrvDrawEscape se usará para la compatibilidad especializada con dibujos.

GDI pasa datos directamente desde una aplicación cliente (posiblemente malintencionada) al controlador, lo que significa que la función DrvEscape debe validar todos los argumentos de entrada. En concreto, esta función debe:

  • Compruebe que el valor recibido en el parámetro iEsc representa una consulta válida.
  • Compruebe que el tamaño del búfer de entrada (el valor del parámetro cjIn ) es válido para la consulta especificada.
  • Compruebe que el contenido del búfer al que apunta el parámetro pvIn es válido para la consulta especificada.
  • Compruebe que el tamaño del búfer de salida especificado (el valor del parámetro cjOut ) es válido para la consulta especificada.
Microsoft reserva el intervalo de 0 a 0X10000 para sus códigos de escape. Los proveedores de terceros pueden elegir códigos de escape para su propio uso por encima de este intervalo. Dado que los códigos de escape específicos del controlador pueden entrar en conflicto con los usados en otros controladores de pantalla, es importante que un controlador de pantalla valide los parámetros de escape antes de procesar el escape. Una manera de hacerlo sería validar los tamaños de bloque de entrada y salida y los parámetros del bloque de entrada. Para mayor seguridad, los controladores también deben incluir un valor "mágico", que debe establecerse correctamente en cada bloque de entrada para asegurarse de que el bloque de entrada procede de un origen de confianza.

DrvEscape es opcional para todos los controladores.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado winddi.h (incluya Winddi.h)

Consulte también

DrvDrawEscape

SURFOBJ