다음을 통해 공유


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 배열 멤버의 스풀러 제공 요소 수입니다. 스풀러는 이 멤버를 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
cElementsRe가 0XFFFFFFFF
aDocEventCall 0

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

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

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

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

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

    • cElementsNeeded 변경되지 나뭇잎

    • DOCUMENTEVENT_SUCCESS 반환합니다.

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

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

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

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

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

    • 반환 DOCUMENTEVENT_SUCCESS

이 경우 스풀러는 충분히 큰 새 버퍼를 할당한 다음 drvDocumentEvent DOCUMENTEVENT_QUERYFILTER 또 다른 호출을 수행합니다.

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

요구 사항

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

참고 항목

DrvDocumentEvent