다음을 통해 공유


OpenPrinter2 함수

프린터 옵션 중 일부를 설정하는 동안 인쇄 하위 시스템의 지정된 프린터, 인쇄 서버 또는 기타 유형의 핸들에 대한 핸들을 검색합니다.

구문

BOOL OpenPrinter2(
  _In_  LPCTSTR            pPrinterName,
  _Out_ LPHANDLE           phPrinter,
  _In_  LPPRINTER_DEFAULTS pDefault,
  _In_  PPRINTER_OPTIONS   pOptions
);

매개 변수

pPrinterName [in]

프린터 또는 인쇄 서버, 프린터 개체, XcvMonitor 또는 XcvPort의 이름을 지정하는 null로 끝나는 상수 문자열에 대한 포인터입니다.

프린터 개체의 경우 PrinterName, Job xxxx를 사용합니다. XcvMonitor의 경우 ServerName, XcvMonitor MonitorName을 사용합니다. XcvPort의 경우 ServerName, XcvPort PortName을 사용합니다.

Windows Vista:NULL인 경우 로컬 인쇄 서버를 나타냅니다.

phPrinter [out]

열려 있는 프린터 또는 인쇄 서버 개체에 대한 핸들을 받는 변수에 대한 포인터입니다.

pDefault [in]

PRINTER_DEFAULTS 구조체에 대한 포인터입니다. 이 값은 NULL일 수 있습니다.

pOptions [in]

PRINTER_OPTIONS 구조체에 대한 포인터입니다. 이 값은 NULL일 수 있습니다.

반환 값

함수가 성공하면 반환 값은 0이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다. 확장된 오류 정보는 GetLastError를 호출합니다.

설명

DllMain에서 이 메서드를 호출하지 마세요.

참고

이는 차단 또는 동기 함수이며 즉시 반환되지 않을 수 있습니다. 이 함수가 얼마나 빨리 반환되는지는 네트워크 상태, 인쇄 서버 구성 및 애플리케이션을 작성할 때 예측하기 어려운 프린터 드라이버 구현 요소와 같은 런타임 요인에 따라 달라집니다. 사용자 인터페이스와의 상호 작용을 관리하는 스레드에서 이 함수를 호출하면 애플리케이션이 응답하지 않는 것처럼 보일 수 있습니다.

이 함수의 ANSI 버전은 구현되지 않으며 ERROR_NOT_SUPPORTED 반환합니다.

pDefault 매개 변수를 사용하면 StartDocPrinter 함수에서 제출한 문서를 인쇄하는 데 사용되는 데이터 형식 및 디바이스 모드 값을 지정할 수 있습니다. 그러나 문서가 시작된 후 SetJob 함수를 사용하여 이러한 값을 재정의할 수 있습니다.

OpenPrinter2 함수를 호출하여 인쇄 서버에 대한 핸들을 열거나 인쇄 서버에 대한 클라이언트 액세스 권한을 결정할 수 있습니다. 이렇게 하려면 pPrinterName 매개 변수에서 인쇄 서버의 이름을 지정하고, PRINTER_DEFAULTS 구조의 pDatatypepDevMode 멤버를 NULL로 설정하고, DesiredAccess 멤버를 설정하여 SERVER_ALL_ACCESS 같은 서버 액세스 마스크 값을 지정합니다. 핸들을 완료하면 ClosePrinter 함수에 전달하여 닫습니다.

PRINTER_DEFAULTS 구조체의 DesiredAccess 멤버를 사용하여 필요한 액세스 권한을 지정합니다. 액세스 권한은 다음 중 하나일 수 있습니다.

원하는 Access 값 의미
PRINTER_ACCESS_ADMINISTER SetPrinter에서 제공하는 작업과 같은 관리 작업을 수행합니다.
PRINTER_ACCESS_USE 기본 인쇄 작업을 수행합니다.
PRINTER_ALL_ACCESS SYNCHRONIZE를 제외한 모든 관리 작업 및 기본 인쇄 작업을 수행합니다. 표준 액세스 권한을 참조하세요.
PRINTER_ACCESS_MANAGE_LIMITED SetPrinter 및SetPrinterData에서 제공하는 작업과 같은 관리 작업을 수행합니다. 이 값은 Windows 8.1 시작해서 사용할 수 있습니다.
일반 보안 값(예: WRITE_DAC 특정 제어 액세스 권한을 허용합니다. 표준 액세스 권한을 참조하세요.

사용자가 원하는 액세스 권한으로 지정된 프린터 또는 인쇄 서버를 열 수 있는 권한이 없는 경우 OpenPrinter2 호출이 실패하고 GetLastError 가 ERROR_ACCESS_DENIED 값을 반환합니다.

pPrinterName이 로컬 프린터인 경우 OpenPrinter2PRINTER_OPTIONS 구조가 pOptions를 사용하여 가리키는 dwFlags의 모든 값을 무시합니다(PRINTER_OPTION_CLIENT_CHANGE 제외). 후자가 전달되면 OpenPrinter2 는 ERROR_ACCESS_DENIED 반환합니다. 따라서 로컬 프린터를 열 때 OpenPrinter2OpenPrinter보다 이점을 제공하지 않습니다.

Windows Vista:openPrinter2에서 반환된 프린터 데이터는 pOptions에서 참조하는 PRINTER_OPTIONS 구조의 dwFlags 필드에 PRINTER_OPTION_NO_CACHE 플래그를 설정하지 않는 한 로컬 캐시에서 검색됩니다.

예제

이 예제에서는 PRINTER_ACCESS_MANAGE_LIMITED PRINTER_DEFAULTS 구조에 전달되고 사용자에게 적절한 권한이 없는 경우 OpenPrinter2가 실패합니다.

// Specify the limited management permission.
PRINTER_DEFAULTS defaults = {};
defaults.DesiredAccess = PRINTER_ACCESS_MANAGE_LIMITED;

// Open a printer to which the user has no administrative rights.
HANDLE printer = nullptr;
assert(!OpenPrinter2(L QueueWithNoAdminRights , // Queue name
                     &printer,                  // Printer handle
                     &defaults,                 // Printer defaults
                     nullptr));                 // Printer options

assert(GetLastError() == ERROR_ACCESS_DENIED);

if (printer)
{
    ClosePrinter(printer);
}

이 함수를 사용하는 방법을 보여 주는 샘플 프로그램은 방법: GDI 인쇄 API를 사용하여 인쇄를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버
Windows Server 2008 [데스크톱 앱만 해당]
헤더
Winspool.h(Windows.h 포함)
라이브러리
Winspool.lib
DLL
Spoolss.dll
유니코드 및 ANSI 이름
OpenPrinter2W (유니코드) 및 OpenPrinter2A (ANSI)

추가 정보

인쇄

인쇄 스풀러 API 함수

ClosePrinter

PRINTER_DEFAULTS

PRINTER_OPTIONS

SetJob

SetPrinter

StartDocPrinter

OpenPrinter