다음을 통해 공유


DrvConvertDevMode 함수(winddiui.h)

프린터 인터페이스 DLL의 DrvConvertDevMode 함수는 프린터의 DEVMODEW 구조를 한 버전에서 다른 버전으로 변환합니다.

구문

BOOL DrvConvertDevMode(
  [in]      LPTSTR   pPrinterName,
  [in]      PDEVMODE pdmIn,
  [out]     PDEVMODE pdmOut,
  [in, out] PLONG    pcbNeeded,
  [in]      DWORD    fMode
);

매개 변수

[in] pPrinterName

프린터 이름 문자열에 대한 호출자 제공 포인터입니다. 이 매개 변수에 대한 자세한 내용은 다음 설명 섹션을 참조하세요.

[in] pdmIn

입력 DEVMODEW 구조체에 대한 호출자 제공 포인터입니다. fMode가 CDM_DRIVER_DEFAULT 경우 이 포인터는 NULL입니다.

[out] pdmOut

출력 DEVMODEW 구조를 수신하는 버퍼에 대한 호출자 제공 포인터입니다. fMode가 CDM_CONVERT 경우 버퍼에 대상 드라이버 버전을 나타내는 유효한 DEVMODEW 구조체가 입력에 포함됩니다.

[in, out] pcbNeeded

pdmOut에서 가리키는 버퍼의 크기(바이트)에 대한 호출자 제공 포인터입니다. 출력에서 프린터 인터페이스 DLL은 받은 크기 값을 변환된 DEVMODEW 구조의 실제 크기로 덮어써야 합니다. 받은 버퍼가 너무 작은 경우 프린터 인터페이스 DLL은 받은 크기 값을 필요한 버퍼 크기로 덮어써야 합니다.

[in] fMode

수행할 작업의 유형을 나타내는 호출자 제공 비트 플래그입니다. 다음 플래그 중 하나일 수 있습니다.

CDM_CONVERT

함수는 입력 DEVMODEW 구조체( pdmIn이 가리키는)의 내용을 새 DEVMODEW 구조체로 변환하고 결과를 pdmOut이 가리키는 DEVMODEW 구조체에 배치해야 합니다. 받은 출력 DEVMODEW 구조체의 초기 내용( pdmOut으로 가리킴)을 사용하여 출력 버전을 결정해야 합니다.

CDM_CONVERT351

함수는 입력 DEVMODEW 구조체(pdmIn으로 가리킨)의 내용을 변환하고, Windows NT 3.51과 호환되는 출력 DEVMODEW 구조를 만들고, 결과를 pdmOut이 가리키는 DEVMODEW 구조에 배치해야 합니다.

드라이버가 Windows NT 3.51에 대한 DEVMODEW 구조를 지원하지 않는 경우 함수는 입력 DEVMODEW를 현재 버전으로 변환해야 합니다.

CDM_DRIVER_DEFAULT

함수는 기본 DEVMODEW 구조체의 현재 버전을 pdmOut이 가리키는 버퍼에 복사해야 합니다.

반환 값

작업이 성공하면 함수는 TRUE를 반환해야 합니다 . 그렇지 않으면 SetLastError를 호출하여 오류 코드를 설정하고 FALSE를 반환해야 합니다.

설명

클라이언트/서버 환경에서는 서버(스풀러)가 다른 버전을 실행하는 동안 클라이언트가 운영 체제 또는 프린터 드라이버의 한 버전을 실행 중일 수 있습니다. 즉, 프린터의 DEVMODEW 구조 정의가 클라이언트와 서버 간에 일치하지 않을 수 있습니다. DrvConvertDevMode 함수는 프린터의 DEVMODEW 구조체 중 한 버전에서 다른 버전으로 변환을 수행할 수 있어야 합니다.

한 DEVMODEW 버전에서 다른 버전으로 변환하는 경우 공용 및 프라이빗 DEVMODEW 멤버를 모두 포함해야 합니다.

pPrinterName에서 가리키는 프린터 이름은 openPrinter 함수(Microsoft Windows SDK 설명서에 설명됨)에 대한 입력 인수로 사용할 수 있으며, 이 인수를 호출하여 CDM_DRIVER_DEFAULT 플래그를 받을 때 저장된 기본값을 가져올 수 있습니다. OpenPrinter를 호출하기 전에 프린터 이름 문자열을 어떤 방식으로든 수정해서는 안 됩니다. 또한 OpenPrinter 호출은 DrvConvertDevMode를 호출하는 데 사용된 것과 동일한 스레드에 있어야 합니다.

함수는 pdmInpdmOut (해당하는 경우)이 모두 유효한 DEVMODEW 구조를 가리키는지 확인해야 합니다. 그렇지 않은 경우 함수는 SetLastError(ERROR_INVALID_PARAMETER)를 호출하고 FALSE를 반환해야 합니다. pcbNeeded에서 지정한 출력 DEVMODEW 크기가 너무 작으면 드라이버는 필요한 버퍼 크기로 pcbNeeded에서 제공하는 크기 값을 덮어쓰고 SetLastError(ERROR_INSUFFICIENT_BUFFER)를 호출하고 FALSE를 반환해야 합니다.

DrvConvertDevMode 함수는 스풀러의 컨텍스트에서 실행되므로 사용자 인터페이스를 표시해서는 안 됩니다.

버퍼 크기를 가져오기 위해 pdmOut 매개 변수의 NULL DEVMODEW 구조 포인터를 사용하여 DrvConvertDevMode를 호출하면 드라이버는 마지막 오류를 ERROR_INSUFFICIENT_BUFFER 설정해야 합니다. 마지막 오류가 이 값으로 설정되지 않은 경우 스풀러는 일반적인 오류를 가정합니다.

요구 사항

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