DrvConvertDevMode 関数 (winddiui.h)

プリンター インターフェイス DLL の DrvConvertDevMode 関数は、プリンターの DEVMODEW 構造体をあるバージョンから別のバージョンに変換します。

構文

BOOL DrvConvertDevMode(
  [in]      LPTSTR   pPrinterName,
  [in]      PDEVMODE pdmIn,
  [out]     PDEVMODE pdmOut,
  [in, out] PLONG    pcbNeeded,
  [in]      DWORD    fMode
);

パラメーター

[in] pPrinterName

プリンター名文字列への呼び出し元指定ポインター。 このパラメーターの詳細については、次の「解説」セクションを参照してください。

[in] pdmIn

入力 DEVMODEW 構造体への呼び出し元指定ポインター。 fMode がCDM_DRIVER_DEFAULTの場合、このポインターは NULL です

[out] pdmOut

出力 DEVMODEW 構造体を受け取るバッファーへの呼び出し元指定ポインター。 fMode がCDM_CONVERT場合は、バッファーに含まれる入力時に、ターゲット ドライバーのバージョンを示す有効な DEVMODEW 構造体。

[in, out] pcbNeeded

pdmOut が指すバッファーのサイズ (バイト単位) への呼び出し元指定ポインター。 出力時に、プリンター インターフェイス DLL は、受信したサイズ値を変換された DEVMODEW 構造体の実際のサイズで上書きする必要があります。 受信したバッファーが小さすぎる場合、プリンター インターフェイス DLL は、受信したサイズの値を必要なバッファー サイズで上書きする必要があります。

[in] fMode

実行する操作の種類を示す呼び出し元指定のビット フラグ。 これには、次のいずれかのフラグを指定できます。

CDM_CONVERT

関数は、入力 DEVMODEW 構造体 ( pdmIn が指す) の内容を新しい DEVMODEW 構造体に変換し、結果を pdmOut が指す DEVMODEW 構造体に配置する必要があります。 受信した出力 DEVMODEW 構造体 ( pdmOut が指す) の初期内容を使用して、出力バージョンを決定する必要があります。

CDM_CONVERT351

関数は、入力 DEVMODEW 構造体 (pdmIn が指す) の内容を変換し、Windows NT 3.51 と互換性のある出力 DEVMODEW 構造体を作成し、結果を pdmOut が指す DEVMODEW 構造体に配置する必要があります。

ドライバーが Windows NT 3.51 の DEVMODEW 構造体をサポートしていない場合、関数は入力 DEVMODEW を現在のバージョンに変換する必要があります。

CDM_DRIVER_DEFAULT

関数は、既定の DEVMODEW 構造体の現在のバージョンを pdmOut が指すバッファーにコピーする必要があります。

戻り値

操作が成功した場合、関数は TRUE を返す必要があります。それ以外の場合は、SetLastError を呼び出してエラー コードを設定し、 FALSE を返す必要があります。

注釈

クライアント/サーバー環境では、サーバー (スプーラー) が別のバージョンを実行している間に、クライアントがオペレーティング システムまたはプリンター ドライバーの 1 つのバージョンを実行している可能性があります。つまり、プリンターの DEVMODEW 構造体定義がクライアントとサーバーの間で矛盾している可能性があります。 DrvConvertDevMode 関数は、プリンターの DEVMODEW 構造体のあるバージョンから別のバージョンへの変換を実行できる必要があります。

ある DEVMODEW バージョンから別のバージョンに変換する場合は、パブリックとプライベートの両方の DEVMODEW メンバーを含める必要があります。

pPrinterName が指すプリンター名は、OpenPrinter 関数への入力引数として使用できます (Microsoft Windows SDKのドキュメントで説明)。 CDM_DRIVER_DEFAULT フラグを受け取ったときに、格納されている既定値を取得するために呼び出すことができます。 OpenPrinter を呼び出す前に、プリンター名の文字列を変更しないでください。 さらに、 OpenPrinter の呼び出しは、 DrvConvertDevMode の呼び出しに使用されたものと同じスレッドに存在する必要があります。

関数は、 pdmInpdmOut (該当する場合) の両方が有効な DEVMODEW 構造体を指していることを確認する必要があります。 そうでない場合、関数は SetLastError(ERROR_INVALID_PARAMETER) を呼び出して FALSE を返す必要があります。 pcbNeeded で指定された出力 DEVMODEW サイズが小さすぎる場合、ドライバーは pcbNeeded によって提供されるサイズ値を必要なバッファー サイズで上書きし、SetLastError(ERROR_INSUFFICIENT_BUFFER) を呼び出し、FALSE を返す必要があります。

DrvConvertDevMode 関数はスプーラーのコンテキストで実行されるため、ユーザー インターフェイスを表示することはできません。

バッファー サイズを取得するために pdmOut パラメーターに NULL DEVMODEW 構造体ポインターを指定して DrvConvertDevMode が呼び出されると、ドライバーは最後のエラーをERROR_INSUFFICIENT_BUFFERに設定することが想定されます。 最後のエラーがこの値に設定されていない場合、スプーラーは一般的なエラーを想定します。

要件

要件
対象プラットフォーム デスクトップ
Header winddiui.h (Winddiui.h を含む)