다음을 통해 공유


DrvEscape 함수(winddi.h)

DrvEscape 함수는 디바이스 독립적 디바이스 드라이버 인터페이스에서 사용할 수 없는 디바이스에서 정보를 검색하는 데 사용됩니다. 특정 쿼리는 iEsc 매개 변수의 값에 따라 달라집니다.

구문

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

매개 변수

[in] pso

호출이 전달되는 표면을 설명하는 SURFOBJ 구조체에 대한 포인터입니다.

[in] iEsc

쿼리를 지정합니다. 다른 매개 변수의 의미는 이 값에 따라 달라집니다. QUERYESCSUPPORT는 미리 정의된 유일한 값입니다. 드라이버가 특정 이스케이프 함수를 지원하는지 여부를 쿼리합니다. 이 경우 pvIn은 이스케이프 함수 번호를 가리킵니다. cjOutpvOut 은 무시됩니다. 지정된 함수가 지원되는 경우 반환 값은 0이 아닌 값입니다.

[in] cjIn

pvIn이 가리키는 버퍼의 크기(바이트)를 지정합니다.

[in] pvIn

호출의 입력 데이터에 대한 포인터입니다. 입력 데이터의 형식은 iEsc 매개 변수로 지정된 쿼리에 따라 달라집니다.

[in] cjOut

pvOut에서 가리키는 버퍼의 크기(바이트)를 지정합니다.

[out] pvOut

출력 버퍼에 대한 포인터입니다. 출력 데이터의 형식은 iEsc 매개 변수로 지정된 쿼리에 따라 달라집니다.

반환 값

반환 값은 iEsc 매개 변수로 지정된 쿼리에 따라 달라집니다. 쿼리에 지정된 함수가 지원되지 않는 경우 반환 값은 0입니다.

설명

이 함수에서는 디바이스에 그리기를 사용할 수 없습니다. DrvDrawEscape 는 특수 그리기 지원에 사용됩니다.

GDI는 (악의적일 수 있는) 클라이언트 애플리케이션에서 드라이버로 직접 데이터를 전달합니다. 즉, DrvEscape 함수는 모든 입력 인수의 유효성을 검사해야 합니다. 특히 이 함수는 다음을 수행해야 합니다.

  • iEsc 매개 변수에서 받은 값이 유효한 쿼리를 나타내는지 확인합니다.
  • 입력 버퍼의 크기( cjIn 매개 변수의 값)가 지정된 쿼리에 유효한지 확인합니다.
  • pvIn 매개 변수가 가리키는 버퍼의 내용이 지정된 쿼리에 유효한지 확인합니다.
  • 지정된 출력 버퍼의 크기( cjOut 매개 변수의 값)가 지정된 쿼리에 유효한지 확인합니다.
Microsoft는 이스케이프 코드에 0X10000 범위 0을 예약합니다. 타사 공급업체는 이 범위 이상으로 자체 사용하기 위해 이스케이프 코드를 자유롭게 선택할 수 있습니다. 드라이버별 이스케이프 코드는 다른 디스플레이 드라이버에서 사용되는 코드와 충돌할 수 있으므로 디스플레이 드라이버가 이스케이프를 처리하기 전에 이스케이프 매개 변수의 유효성을 검사하는 것이 중요합니다. 이 작업을 수행하는 한 가지 방법은 입력 및 출력 블록 크기와 입력 블록 매개 변수의 유효성을 검사하는 것입니다. 보안을 강화하기 위해 드라이버에는 입력 블록이 신뢰할 수 있는 원본에서 온지 확인하기 위해 모든 입력 블록에 적절하게 설정해야 하는 "매직" 값도 포함되어야 합니다.

DrvEscape 는 모든 드라이버에 대해 선택 사항입니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 winddi.h(Winddi.h 포함)

추가 정보

DrvDrawEscape

SURFOBJ