Compartilhar via


Função DrvEscape (winddi.h)

A função DrvEscape é usada para recuperar informações de um dispositivo que não está disponível em uma interface de driver de dispositivo independente do dispositivo; a consulta específica depende do valor do parâmetro iEsc .

Sintaxe

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

Parâmetros

[in] pso

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

[in] iEsc

Especifica uma consulta. O significado dos outros parâmetros depende desse valor. QUERYESCSUPPORT é o único valor predefinido; ele consulta se o driver dá suporte a uma função de escape específica. Nesse caso, pvIn aponta para um número de função de escape; cjOut e pvOut são ignorados. Se houver suporte para a função especificada, o valor retornado será diferente de zero.

[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 consulta especificada pelo parâmetro iEsc .

[in] cjOut

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

[out] pvOut

Ponteiro para o buffer de saída. O formato dos dados de saída depende da consulta especificada pelo parâmetro iEsc .

Retornar valor

O valor retornado depende da consulta especificada pelo parâmetro iEsc . Se não houver suporte para a função especificada na consulta, o valor retornado será zero.

Comentários

O desenho no dispositivo não é permitido nessa função. O DrvDrawEscape deve ser usado para suporte de desenho especializado.

A GDI passa dados diretamente de um aplicativo cliente (possivelmente mal-intencionado) para o driver, o que significa que a função DrvEscape 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.
  • Verifique se o tamanho do buffer de saída especificado (o valor no parâmetro cjOut ) é válido para a consulta especificada.
A Microsoft reserva o intervalo de 0 a 0X10000 para seus códigos de escape. Fornecedores de terceiros são livres para escolher códigos de escape para seu próprio uso acima desse intervalo. Como os códigos de escape específicos do driver podem entrar em conflito com os usados em outros drivers de exibição, é importante que um driver de exibição valide os parâmetros de escape antes de processar o escape. Uma maneira de fazer isso seria validar os tamanhos dos blocos de entrada e saída e os parâmetros do bloco de entrada. Para maior segurança, os drivers também devem incluir um valor "magic" que deve ser definido adequadamente em cada bloco de entrada para garantir que o bloco de entrada seja de uma fonte confiável.

O DrvEscape é opcional para todos os drivers.

Requisitos

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

Confira também

DrvDrawEscape

SURFOBJ