Compartilhar via


Função DrvDrawEscape (winddi.h)

A função DrvDrawEscape é o ponto de entrada que atende a mais de uma chamada de função; a função específica depende do valor do parâmetro iEsc .

Sintaxe

ULONG DrvDrawEscape(
  [in] SURFOBJ *pso,
  [in] ULONG   iEsc,
  [in] CLIPOBJ *pco,
  [in] RECTL   *prcl,
  [in] ULONG   cjIn,
  [in] PVOID   pvIn
);

Parâmetros

[in] pso

Ponteiro para uma estrutura SURFOBJ que identifica a superfície para a qual a chamada é direcionada.

[in] iEsc

Especifica a operação a ser executada. Os significados dos parâmetros restantes dependem desse parâmetro. Esse parâmetro pode ser o valor a seguir.

Valor Significado
ESC_PASSTHROUGH Passa dados brutos do dispositivo para o driver de dispositivo. O número de bytes de dados brutos é indicado por cjIn. Os dados são apontados pelo pvIn. O valor retornado será o número de bytes gravados se a função for bem-sucedida. Caso contrário, será zero e um código de erro será registrado.

[in] pco

Ponteiro para uma estrutura CLIPOBJ que pode ser consultada para localizar a área na superfície que o chamador pode substituir.

[in] prcl

Ponteiro para uma estrutura RECTL que define o retângulo de janela na superfície. O aplicativo não sabe a posição da janela na superfície. A GDI fornece esse retângulo e mantém um bloqueio que garante que o retângulo esteja estável durante a chamada. As coordenadas recebidas do aplicativo são relativas ao canto superior esquerdo do retângulo da janela.

[in] cjIn

Especifica o tamanho, em bytes, do buffer apontado por pvIn.

[in] pvIn

Ponteiro para os dados de entrada da chamada. O formato dos dados de entrada depende da função especificada por iEsc.

Valor retornado

O valor retornado depende da função especificada por iEsc. O driver deverá retornar 0xFFFFFFFF se uma função sem suporte for chamada.

Comentários

Esse ponto de entrada difere do DrvEscape porque uma estrutura CLIPOBJ é fornecida. Isso permite que um driver implemente suas próprias funções de desenho em um ambiente com janelas.

A GDI passa dados diretamente de um aplicativo cliente (possivelmente mal-intencionado) para o driver, o que significa que a função DrvDrawEscape deve validar todos os argumentos de entrada. Especificamente, essa função deve:

  • Verifique se o valor recebido no parâmetro iEsc representa uma consulta válida.
  • Verifique se o tamanho do buffer de entrada (o valor no parâmetro cjIn ) é válido para a consulta especificada.
  • Verifique se o conteúdo do buffer apontado pelo parâmetro pvIn é válido para a consulta especificada.
Os escapes aos quais um dispositivo dá suporte são determinados por uma chamada ao DrvEscape.

Para obter mais informações sobre os códigos de escape que a Microsoft reserva, consulte DrvEscape.

DrvDrawEscape é opcional para todos os drivers.

Requisitos

   
Plataforma de Destino Área de Trabalho
Cabeçalho winddi.h (inclua Winddi.h)

Confira também

CLIPOBJ

DrvEnableDriver

DrvEscape