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 パラメーターが指すバッファーの内容が、指定したクエリに対して有効であることを確認します。
Microsoft が予約するエスケープ コードの詳細については、「 DrvEscape」を参照してください。
DrvDrawEscape は、すべてのドライバーで省略可能です。
要件
対象プラットフォーム | デスクトップ |
Header | winddi.h (Winddi.h を含む) |