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
cElementsReturned 0XFFFFFFFF
aDocEventCall 0

スプーラーは、前の表に示した値に構造体メンバーを初期化した後、 DrvDocumentEvent を呼び出します。 この関数が戻ると、スプーラーは cElementsNeeded メンバーと cElementsReturned メンバーを調べて、どちらかが変更されているかどうかを確認します。 ドライバーがこれらのメンバーの 1 つに書き込まれたが、もう一方には書き込まれていない場合、スプーラーは、値 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 より大きくする必要があります)

    • cElementsReturned を変更しない

    • 戻り値DOCUMENTEVENT_SUCCESS

この場合、スプーラーは十分な大きさの新しいバッファーを割り当て、DOCUMENTEVENT_QUERYFILTERを使用して DrvDocumentEvent を別の呼び出しを行います。

ドライバーがDOCUMENTEVENT_QUERYFILTER イベントをサポートしていない場合は、DOCUMENTEVENT_UNSUPPORTEDを返す必要があります。 ドライバーがDOCUMENTEVENT_QUERYFILTERをサポートしていても、このイベントを処理するときに内部エラーが発生した場合は、DOCUMENTEVENT_FAILUREを返す必要があります。 どちらの場合も、スプーラーはドライバーからイベント フィルターを取得できないため、すべてのイベントに対して DrvDocumentEvent を呼び出す動作が続行されます。

要件

要件
Header winddiui.h (Winddiui.h を含む)

こちらもご覧ください

DrvDocumentEvent