다음을 통해 공유


DrvEnablePDEV 함수(winddi.h)

DrvEnablePDEV 함수는 물리적 디바이스의 특성에 대한 설명을 GDI에 반환합니다.

구문

DHPDEV DrvEnablePDEV(
  [in]           DEVMODEW *pdm,
  [in]           LPWSTR   pwszLogAddress,
                 ULONG    cPat,
  [in, optional] HSURF    *phsurfPatterns,
                 ULONG    cjCaps,
  [out]          ULONG    *pdevcaps,
                 ULONG    cjDevInfo,
  [out]          DEVINFO  *pdi,
                 HDEV     hdev,
  [in]           LPWSTR   pwszDeviceName,
                 HANDLE   hDriver
);

매개 변수

[in] pdm

드라이버 데이터를 포함하는 DEVMODEW 구조체에 대한 포인터입니다.

Windows NT 4.0을 지원하는 드라이버의 경우 GDI가 dmBitsPerPel, dmPelsWidth, dmPelsHeightdmDisplayFrequency로 설정된 DEVMODEW 멤버를 사용하여 호출할 때 DrvEnablePDEV는 하드웨어의 기본 모드를 반환해야 합니다.

[in] pwszLogAddress

프린터 드라이버의 경우 는 드라이버가 작성 중인 위치에 대한 사용자의 이름인 논리 주소 문자열을 가리킵니다. 예를 들어 "LPT1" 또는 "내 프린터"가 있습니다.

표시 드라이버는 이 매개 변수를 무시해야 합니다.

cPat

프린터 드라이버의 경우 phsurfPatterns가 가리키는 버퍼의 표면 핸들 수를 지정합니다. 드라이버는 버퍼의 끝 이후 메모리에 액세스할 수 없습니다.

표시 드라이버는 이 매개 변수를 무시해야 합니다.

[in, optional] phsurfPatterns

표시 드라이버는 이 매개 변수를 무시해야 합니다.

프린터 드라이버의 경우 드라이버가 표준 채우기 패턴을 나타내는 표면 핸들로 채울 버퍼를 가리킵니다. 다음 패턴을 순서대로 정의해야 합니다.

패턴 설명
HS_HORIZONTAL 가로 해치.
HS_VERTICAL 수직 해치.
HS_FDIAGONAL 45도 위쪽 해치(왼쪽에서 오른쪽).
HS_BDIAGONAL 45도 아래쪽 해치(왼쪽에서 오른쪽).
HS_CROSS 가로 및 세로 교차 해치입니다.
HS_DIAGCROSS 45도 크로스해치.
 
참고 드라이버 지원이 필요한 기본 해치 패턴의 수가 이전 버전의 DDK(드라이버 개발 키트)에서 감소했습니다. 따라서 일반적으로 드라이버에서 패턴 배열의 크기를 선언하는 데 사용되는 HS_DDI_MAX 감소했습니다.
 
GDI는 이러한 표면 중 하나를 사용하여 DrvRealizeBrush 를 호출하여 표준 패턴의 브러시를 실현합니다.

이러한 각 표면은 래스터 디바이스용 단색(픽셀당 1비트) GDI 비트맵이어야 합니다. 디바이스 드라이버는 디바이스 화면에 기록될 때 표준 패턴과 가장 유사한 패턴을 선택해야 합니다.

GDI는 벡터 디바이스에 대한 지원 루틴에서 이러한 브러시를 사용할 필요가 없습니다. 따라서 표면은 DrvRealizeBrush 가 표준 패턴으로 인식하는 디바이스 지원 표면일 수 있습니다.

cjCaps

pdevcaps가 가리키는 버퍼의 크기를 지정합니다. 드라이버는 버퍼의 끝 이후 메모리에 액세스해서는 안됩니다.

[out] pdevcaps

디바이스 기능을 설명하는 데 사용할 GDIINFO 구조체에 대한 포인터입니다. GDI는 DrvEnablePDEV를 호출하는 이 구조를 0으로 초기화합니다.

cjDevInfo

pdi가 가리키는 DEVINFO 구조체의 바이트 수를 지정합니다. 드라이버는 DEVINFO에서 이 바이트 수를 초과하지 않아야 합니다.

[out] pdi

드라이버 및 물리적 디바이스를 설명하는 DEVINFO 구조체에 대한 포인터입니다. 드라이버는 이해하는 멤버만 변경해야 합니다. GDI는 DrvEnablePDEV를 호출하기 전에 이 구조를 0으로 채웁니다.

hdev

디바이스에 GDI 제공 핸들입니다. 이 핸들은 EngGetDriverName과 같은 일부 GDI 콜백에 대한 입력으로 사용해야 합니다.

[in] pwszDeviceName

디바이스의 사용자가 읽을 수 있는 이름인 null로 끝나는 문자열에 대한 포인터입니다.

hDriver

출력 디바이스에 대한 핸들입니다. 디스플레이 드라이버의 경우 디스플레이 디바이스 핸들입니다. 프린터 드라이버의 경우 이 매개 변수를 스풀러 호출 시 프린터에 대한 핸들로 사용해야 합니다.

반환 값

반환 값은 함수가 성공한 경우 활성화된 디바이스를 식별하는 PDEV 에 대한 핸들입니다. 즉, DrvEnablePDEV는 성공 시 개인 드라이버 정의 디바이스 instance 정보에 대한 핸들을 반환합니다. 그렇지 않으면 NULL을 반환합니다.

설명

그래픽 디바이스 드라이버는 여러 논리 주소에 연결된 여러 물리적 디바이스를 지원할 수 있습니다. 또한 드라이버는 다른 그리기 표면의 동시 사용을 지원해야 합니다.

DrvEnablePDEV의 목적은 다음과 같습니다.

  1. GDI에 디바이스의 물리적 특성을 알릴 수 있습니다.
  2. 수신된 DEVMODE 구조체 및 디바이스 이름에 따라 현재 디바이스 instance 설명하는 프라이빗 PDEV 구조를 만듭니다.
GDI는 이후에 다른 그래픽 DDI 함수를 호출할 때 드라이버가 디바이스 instance 식별할 수 있도록 DrvEnablePDEV에서 반환한 핸들을 입력(일반적으로 SURFOBJ 구조 내에서)으로 제공합니다.

단일 논리 디바이스는 다음으로 구분할 수 있는 여러 PDEV를 관리할 수 있습니다.

  1. 하드웨어 유형 - 단일 디바이스 드라이버가 "LaserWhiz", "LaserWhiz II" 및 "LaserWhiz Super"를 지원할 수 있습니다.
  2. 논리적 주소 -- 단일 디바이스 드라이버는 "LPT1", "COM2", "\SERVER1\PSLAZER" 등에 연결된 프린터를 지원할 수 있습니다. 둘 이상의 VGA 디스플레이를 동시에 지원할 수 있는 디스플레이 드라이버는 포트 번호에 따라 구분할 수 있습니다. 예를 들어 0x3CE 또는 0x2CE.
  3. Surface - 프린터 드라이버는 두 개의 인쇄 작업을 동시에 처리할 수 있습니다. 두 표면은 인쇄될 두 페이지를 나타냅니다. 마찬가지로 디스플레이 디바이스 드라이버는 동일한 디바이스에서 두 개의 데스크톱을 지원할 수 있습니다.
이 함수에 대한 호출을 받을 때 드라이버는 PDEV를 지원하기 위해 메모리를 할당해야 합니다. 그러나 GDI가 DrvEnableSurface를 호출할 때까지 실제 표면을 지원하지 않아도 됩니다.

디바이스 화면에 비트맵을 할당해야 하는 경우 필요할 때까지 이러한 할당을 수행하지 않아도 됩니다. 애플리케이션은 실제로 디바이스에 쓰기 훨씬 전에 디바이스 정보를 요청하는 경우가 많지만 큰 비트맵과 같은 리소스를 할당하기 위해 대기하면 메모리가 절약됩니다.

GDI는 이 함수를 호출하기 전에 phsurfPatterns가 가리키는 버퍼를 0으로 초기화합니다.

DrvEnablePDEV 는 그래픽 드라이버에 필요합니다.

요구 사항

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

추가 정보

DEVINFO

DEVMODEW

DrvEnableSurface

DrvRealizeBrush

EngCreatePalette

GDIINFO