DrvDrawEscape 関数 (winddi.h)

DrvDrawEscape 関数は、複数の関数呼び出しを提供するエントリ ポイントです。特定の関数は、iEsc パラメーターの値に依存します。

構文

ULONG DrvDrawEscape(
  [in] SURFOBJ *pso,
  [in] ULONG   iEsc,
  [in] CLIPOBJ *pco,
  [in] RECTL   *prcl,
  [in] ULONG   cjIn,
  [in] PVOID   pvIn
);

パラメーター

[in] pso

呼び出しの転送先のサーフェスを識別する SURFOBJ 構造体へのポインター。

[in] iEsc

実行する操作を指定します。 残りのパラメーターの意味は、このパラメーターによって異なります。 このパラメーターには、次の値を指定できます。

説明
ESC_PASSTHROUGH デバイス ドライバーに生のデバイス データを渡します。 生データのバイト数は 、cjIn によって示されます。 データは pvIn によって指されます。 戻り値は、関数が成功した場合に書き込まれたバイト数です。 それ以外の場合は 0 になり、エラー コードがログに記録されます。

[in] pco

呼び出し元が上書きできるサーフェス上の領域を検索するためにクエリを実行できる CLIPOBJ 構造体へのポインター。

[in] prcl

サーフェス上のウィンドウの四角形を定義する RECTL 構造体へのポインター。 アプリケーションは、サーフェス上のウィンドウの位置を認識しません。 GDI は、この四角形を提供し、呼び出しの間、四角形が安定していることを保証するロックを保持します。 アプリケーションから受け取った座標は、ウィンドウの四角形の左上隅を基準にしています。

[in] cjIn

pvIn が指すバッファーのサイズをバイト単位で指定します。

[in] pvIn

呼び出しの入力データへのポインター。 入力データの形式は、 iEsc で指定された関数によって異なります。

戻り値

戻り値は 、iEsc で指定された関数によって異なります。 サポートされていない関数が呼び出された場合、ドライバーは0xFFFFFFFFを返す必要があります。

解説

このエントリ ポイントは、CLIPOBJ 構造体が提供される点で DrvEscape とは異なります。 これにより、ドライバーはウィンドウ環境で独自の 描画関数 を実装できます。

GDI は、(悪意のある可能性のある) クライアント アプリケーションからドライバーにデータを直接渡します。つまり、 DrvDrawEscape 関数はすべての入力引数を検証する必要があります。 具体的には、この関数は次の操作を行う必要があります。

  • iEsc パラメーターで受け取った値が有効なクエリを表していることを確認します。
  • 入力バッファーのサイズ ( cjIn パラメーターの値) が、指定したクエリに対して有効であることを確認します。
  • pvIn パラメーターが指すバッファーの内容が、指定したクエリに対して有効であることを確認します。
デバイスがサポートするエスケープは、 DrvEscape の呼び出しによって決まります。

Microsoft が予約するエスケープ コードの詳細については、「 DrvEscape」を参照してください。

DrvDrawEscape は、すべてのドライバーで省略可能です。

要件

   
対象プラットフォーム デスクトップ
Header winddi.h (Winddi.h を含む)

関連項目

CLIPOBJ

DrvEnableDriver

DrvEscape