다음을 통해 공유


DOCEVENT_FILTER 구조체(winddiui.h)

DOCEVENT_FILTER 구조에는 프린터 드라이버가 응답할 문서 이벤트 목록이 포함됩니다. 문서 이벤트의 전체 목록은 DrvDocumentEvent 를 참조하세요.

구문

typedef struct _DOCEVENT_FILTER {
  UINT  cbSize;
  UINT  cElementsAllocated;
  UINT  cElementsNeeded;
  UINT  cElementsReturned;
  DWORD aDocEventCall[ANYSIZE_ARRAY];
} DOCEVENT_FILTER, *PDOCEVENT_FILTER;

멤버

cbSize

이 구조체의 스풀러 제공 크기(바이트)입니다. 스풀러는 이 멤버를 sizeof(DOCEVENT_FILTER)로 초기화합니다.

cElementsAllocated

aDocEventCall 배열 멤버의 Spooler 제공 요소 수입니다. 스풀러는 이 멤버를 DOCUMENTEVENT_LAST - 1로 초기화합니다. (DOCUMENTEVENT_LAST 상수는 헤더 파일 Winddiui.h에 정의되어 있습니다.)

cElementsNeeded

aDocEventCall 배열 멤버에 필요한 드라이버 제공 총 요소 수입니다. 스풀러는 이 멤버를 0XFFFFFFFF 초기화합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

cElementsReturned

aDocEventCall 배열 멤버에 배치된 드라이버 제공 DOCUMENTEVENT_**XXX **이벤트 수입니다. 스풀러는 이 멤버를 0XFFFFFFFF 초기화합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

aDocEventCall[ANYSIZE_ARRAY]

프린터 드라이버가 응답할 모든 DOCUMENTEVENT_XXX 이벤트를 나열하는 드라이버가 채워진 DWORD 배열입니다. 스풀러는 이 멤버를 0으로 초기화합니다.

설명

프린터 드라이버는 DOCEVENT_FILTER 구조에서 응답할 이벤트를 나열합니다. 이렇게 하면 스풀러가 수행해야 하는 드라이버에 대한 호출 수가 제한되므로 프린터 성능이 향상됩니다. 스풀러가 iEsc 매개 변수가 DOCUMENTEVENT_QUERYFILTER 설정된 DrvDocumentEvent DDI를 호출하면 스풀러는 aDocEventCall 배열을 포함하여 DOCEVENT_FILTER 구조체가 포함된 버퍼를 할당합니다. 버퍼에 할당된 메모리 양은 다음과 같습니다.

sizeof(DOCEVENT_FILTER) + sizeof(DWORD) * (DOCUMENTEVENT_LAST - 2)

DOCEVENT_FILTER 구조체가 포함된 버퍼를 할당한 후 스풀러는 구조체 멤버를 다음 값으로 초기화합니다.

멤버 으로 초기화
cbSize 0
cElementsAllocated DOCUMENTEVENT_LAST - 1

DOCUMENTEVENT_LAST 상수는 winddiui.h에 정의되어 있습니다.
cElementsNeeded 0xffffffff
cElementsReturned 0xffffffff
aDocEventCall 0

스풀러가 구조체 멤버를 앞의 표에 표시된 값으로 초기화한 후 DrvDocumentEvent를 호출합니다. 이 함수가 반환되면 스풀러는 cElementsNeededcElementsReturned 멤버를 검사하여 둘 중 하나가 변경되었는지 확인합니다. 드라이버가 이러한 멤버 중 하나에 기록했지만 다른 멤버에 기록되지 않은 경우 스풀러는 기록되지 않은 멤버를 값 0으로 해석합니다.

드라이버가 DOCUMENTEVENT_QUERYFILTER 지원하는 경우:

  • aDocEventCall 배열이 프린터 드라이버가 배치하려는 모든 DOCUMENTEVENT_XXX 이벤트를 포함할 만큼 충분히 큰 경우 프린터 드라이버는 다음과 같습니다.

    • 배열을 해당 이벤트로 채웁니다.

    • cElementsReturned 멤버를 해당 이벤트 수로 설정합니다(cElementsAllocated보다 작거나 같아야 함).

    • cElementsNeed를 변경되지 않은 상태로 유지합니다.

    • DOCUMENTEVENT_SUCCESS 반환합니다.

이 경우 스풀러는 aDocEventCall 배열의 첫 번째 cElementsReturned 값을 사용합니다.

DOCUMENTEVENT_CREATEDCPRE 이벤트는 특별한 방식으로 처리됩니다. 스풀러가 iEsc 매개 변수가 DOCUMENTEVENT_CREATEDCPRE 설정된 DrvDocumentEvent를 호출하는 경우 스풀러는 반환 값을 사용하여 이 함수에 대한 향후 호출이 필요한지 여부를 확인합니다. 다른 DOCUMENTEVENT_XXX 이벤트와 달리 프린터 드라이버는 항상 이 이벤트가 필터링되는지 여부에 관계없이 DOCUMENTEVENT_CREATEDCPRE DrvDocumentEvent 에 대한 호출을 받습니다.

  • aDocEventCall 배열이 프린터 드라이버가 배치하려는 모든 DOCUMENTEVENT_XXX 이벤트를 포함할 만큼 크지 않은 경우 프린터 드라이버는 다음을 수행해야 합니다.

    • cElementsNeeded를 응답하려는 이벤트 수로 설정합니다(cElementsAllocated보다 커야 함).

    • cElementsRe를 변경하지 않고 그대로 둡니다.

    • 반환 DOCUMENTEVENT_SUCCESS

이 경우 스풀러는 충분히 큰 새 버퍼를 할당한 다음, DOCUMENTEVENT_QUERYFILTER 사용하여 DrvDocumentEvent 를 다시 호출합니다.

드라이버가 DOCUMENTEVENT_QUERYFILTER 이벤트를 지원하지 않는 경우 DOCUMENTEVENT_UNSUPPORTED 반환해야 합니다. 드라이버가 DOCUMENTEVENT_QUERYFILTER 지원하지만 이 이벤트를 처리할 때 내부 오류가 발생하면 DOCUMENTEVENT_FAILURE 반환해야 합니다. 두 경우 모두 스풀러는 드라이버에서 이벤트 필터를 검색할 수 없으므로 모든 이벤트에 대해 DrvDocumentEvent 를 호출하는 동작이 계속됩니다.

요구 사항

요구 사항
헤더 winddiui.h(Winddiui.h 포함)

추가 정보

DrvDocumentEvent