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를 호출합니다. 이 함수가 반환되면 스풀러는 cElementsNeeded 및 cElementsReturned 멤버를 검사하여 둘 중 하나가 변경되었는지 확인합니다. 드라이버가 이러한 멤버 중 하나에 기록했지만 다른 멤버에 기록되지 않은 경우 스풀러는 기록되지 않은 멤버를 값 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 포함) |