다음을 통해 공유


CreatePrintAsyncNotifyChannel 함수(prnasnot.h)

인쇄 드라이버 또는 포트 모니터와 같은 인쇄 스풀러 호스팅 인쇄 구성 요소와 구성 요소에서 알림을 받는 애플리케이션 간에 통신 채널을 만듭니다.

구문

HRESULT CreatePrintAsyncNotifyChannel(
  [in]  PCWSTR                            pszName,
  [in]  PrintAsyncNotificationType        *pNotificationType,
  [in]  PrintAsyncNotifyUserFilter        eUserFilter,
  [in]  PrintAsyncNotifyConversationStyle eConversationStyle,
  [in]  IPrintAsyncNotifyCallback         *pCallback,
  [out] IPrintAsyncNotifyChannel          **ppIAsynchNotification
);

매개 변수

[in] pszName

인쇄 서버 또는 인쇄 큐의 이름에 대한 포인터입니다.

[in] pNotificationType

채널에서 보낼 알림 유형에 대한 데이터 스키마의 GUID에 대한 포인터입니다.

[in] eUserFilter

알림을 보낼지 여부를 지정하는 값입니다.

  • Print Spooler 호스팅 플러그 인 발신자와 동일한 사용자로 실행되는 애플리케이션만 해당합니다.
  • 더 광범위한 수신 대기 애플리케이션 집합입니다.

[in] eConversationStyle

통신이 양방향인지 단방향인지를 지정하는 값입니다.

[in] pCallback

수신 대기 애플리케이션이 Print Spooler 호스팅 구성 요소를 다시 호출하는 데 사용할 개체에 대한 포인터입니다. 방향성이kUniDirectional인 경우 NULL이어야 합니다.

[out] ppIAsynchNotification

새 채널에 대한 포인터입니다.

반환 값

HRESULT 심각도 의미
S_OK SUCCESS 함수가 성공적으로 완료되었습니다.
CHANNEL_ALREADY_OPENED 오류 채널이 이미 열려 있습니다.
MAX_CHANNEL_COUNT_EXCEEDED 오류 지정된 큐 또는 인쇄 서버를 사용하여 지정된 유형의 알림에 대해 이미 등록된 최대 수신 대기 애플리케이션 수입니다. 기본 최대값은 10,000입니다.
 

반환 값은 COM 오류 코드입니다. 이 함수는 작업을 성공적으로 완료할 수 있지만 S_OK 이외의 HRESULT 를 반환할 수 있으므로 SUCCEEDED 또는 FAILED 매크로를 사용하여 호출의 성공을 결정해야 합니다. 함수에서 반환된 특정 HRESULT 를 얻으려면 HRESULT_CODE 매크로를 사용합니다.

다음 코드 예제에서는 이러한 매크로를 사용하여 반환 값을 평가하는 방법을 보여 줍니다.

if (SUCCEEDED(hr)){
  //Call was successful 
}

if (FAILED(hr)) {
  // Call failed 
}

if (FAILED(hr)) {
  // Call failed 
  switch (HRESULT_CODE(hr)){
    case CHANNEL_ALREADY_OPENED:
      // Some action 
      break;
    case MAX_CHANNEL_COUNT_EXCEEDED:
      // Some action 
      break;
    default:
      //Default action 
      break;
  }
} else {
  //call succeeded 
}

COM 오류 코드에 관한 자세한 내용은 오류 처리를 참조하세요.

가능한 다른 반환 값 은 PrintAsyncNotifyError 를 참조하세요.

설명

참고 이는 차단 또는 동기 함수이며 즉시 반환되지 않을 수 있습니다. 이 함수가 얼마나 빨리 반환되는지는 네트워크 상태, 인쇄 서버 구성 및 프린터 드라이버 구현과 같은 런타임 요인(애플리케이션을 작성할 때 예측하기 어려운 요소)에 따라 달라집니다. 사용자 인터페이스와의 상호 작용을 관리하는 스레드에서 이 함수를 호출하면 애플리케이션이 응답하지 않는 것처럼 보일 수 있습니다.
 
구성 요소는 인쇄 스풀러 프로세스에서 실행되는 경우에만 채널을 열 수 있습니다. 예를 들어 애플리케이션이 프린터 드라이버를 로드하는 경우 드라이버는 채널을 열 수 없지만 인쇄 스풀러 내에 로드된 프린터 드라이버는 채널을 열 수 있습니다. 수신 대기 애플리케이션은 Print Spooler 프로세스 내부 또는 외부에 있을 수 있습니다.

채널을 닫려면 IPrintAsyncNotifyChannel::CloseChannel; 그러나 IPrintAsyncNotifyChannel::CloseChannelCreatePrintAsyncNotifyChannel 호출 직후에 호출할 수 없습니다.

IPrintAsyncNotifyChannel::Release()만 호출합니다.

  1. 이전 IPrintAsyncNotifyChannel::AddRef() 호출과 명시적으로 일치하는 경우 입니다.
  2. 채널이 UniDirectional 채널이고 CreatePrintAsyncNotifyChannel에 대한 성공적인 호출에서 받은 포인터를 중단하는 경우
  3. BiDirectional 채널을 만든 후 또는 IPrintNotifyAsyncCallback::OnEventNotify 및 구현에서 다음을 수행하면 됩니다.
    1. IPrintAsyncNotifyChannel::SendNotification 또는 IPrintAsyncNotifyChannel::CloseChannel OR을 호출하지 않았습니다.
    2. IPrintAsyncNotifyChannel::SendNotification 또는 IPrintAsyncNotifyChannel::CloseChannel에 대한 호출을 다시 시도하지 않았으므로 OR에 실패했습니다.
    3. 서버 쪽에서 반환 값 NO_LISTENER OR에 성공한 IPrintAsyncNotifyChannel::SendNotification에 대한 호출을 다시 시도하지 않았습니다.
    4. 클라이언트 쪽에서 반환 값 CHANNEL_ACQUIRED 성공한 IPrintAsyncNotifyChannel::SendNotification에 대한 호출을 다시 시도하지 않았습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 prnasnot.h
라이브러리 Winspool.lib
DLL Spoolss.dll

추가 정보

클라이언트 가장(Client Impersonation)

인쇄 스풀러 API 함수

인쇄