Freigeben über


DrvConvertDevMode-Funktion (winddiui.h)

Die DrvConvertDevMode-Funktion einer Druckerschnittstellen-DLL konvertiert die DEVMODEW- Struktur eines Druckers von einer Version in eine andere.

Syntax

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

Parameter

[in] pPrinterName

Vom Aufrufer bereitgestellter Zeiger auf eine Druckernamenzeichenfolge. Weitere Informationen zu diesem Parameter finden Sie im folgenden Abschnitt "Hinweise".

[in] pdmIn

Vom Aufrufer bereitgestellter Zeiger auf eine DEVMODEW-Eingabestruktur. Wenn fMode- CDM_DRIVER_DEFAULT ist, ist dieser Zeiger NULL-.

[out] pdmOut

Vom Aufrufer bereitgestellter Zeiger auf einen Puffer, um eine DEVMODEW-Ausgabestruktur zu empfangen. Wenn fMode- CDM_CONVERT enthält der Puffer eine gültige DEVMODEW-Struktur, die die Zieltreiberversion angibt.

[in, out] pcbNeeded

Vom Aufrufer bereitgestellter Zeiger auf die Größe des Puffers in Bytes, auf den pdmOut-verweist. Bei der Ausgabe sollte die Druckerschnittstellen-DLL den empfangenen Größenwert mit der tatsächlichen Größe der konvertierten DEVMODEW-Struktur überschreiben. Wenn der empfangene Puffer zu klein ist, sollte die Druckerschnittstellen-DLL den empfangenen Größenwert mit der erforderlichen Puffergröße überschreiben.

[in] fMode

Vom Aufrufer bereitgestellte Bitkennzeichnung, die den Typ des auszuführenden Vorgangs angibt. Dies kann eine der folgenden Flags sein:

CDM_CONVERT

Die Funktion sollte den Inhalt der Eingabe-DEVMODEW-Struktur (wie durch pdmIn) in eine neue DEVMODEW-Struktur umwandeln und das Ergebnis in der DEVMODEW-Struktur platzieren, auf die durch pdmOutverwiesen wird. Der anfängliche Inhalt der empfangenen Ausgabe DEVMODEW-Struktur (auf die durch pdmOut) verwiesen wird, sollte verwendet werden, um die Ausgabeversion zu bestimmen.

CDM_CONVERT351

Die Funktion sollte den Inhalt der Eingabe-DEVMODEW-Struktur konvertieren (auf die durch pdmInverwiesen wird), eine DEVMODEW-Ausgabestruktur erstellen, die mit Windows NT 3.51 kompatibel ist, und das Ergebnis in der DEVMODEW-Struktur platzieren, auf die durch pdmOutverwiesen wird.

Wenn der Treiber keine DEVMODEW-Struktur für Windows NT 3.51 unterstützt, sollte die Funktion die Eingabe DEVMODEW in die aktuelle Version konvertieren.

CDM_DRIVER_DEFAULT

Die Funktion sollte die aktuelle Version der standardmäßigen DEVMODEW-Struktur in den Puffer kopieren, auf den pdmOut-verweist.

Rückgabewert

Wenn der Vorgang erfolgreich ist, sollte die Funktion TRUE-zurückgeben; andernfalls sollte SetLastError aufgerufen werden, um einen Fehlercode festzulegen und FALSE-zurückzugeben.

Bemerkungen

In einer Client-/Serverumgebung kann ein Client eine Version des Betriebssystems oder druckertreibers ausführen, während der Server (Spooler) ausgeführt wird, was bedeutet, dass die DEVMODEW-Strukturdefinition eines Druckers zwischen Client und Server inkonsistent ist. Die DrvConvertDevMode Funktion muss in der Lage sein, Konvertierungen von einer Version der DEVMODEW-Struktur des Druckers in eine andere auszuführen.

Beim Konvertieren von einer DEVMODEW-Version in eine andere müssen sowohl öffentliche als auch private DEVMODEW-Member einbezogen werden.

Der Druckername, auf den pPrinterName verweist, kann als Eingabeargument für die OpenPrinter--Funktion verwendet werden (in der Microsoft Windows SDK-Dokumentation beschrieben), die aufgerufen werden kann, um gespeicherte Standardwerte abzurufen, wenn das CDM_DRIVER_DEFAULT Flag empfangen wird. Beachten Sie, dass die Druckernamenzeichenfolge vor einem Aufruf von OpenPrinter-nicht geändert werden darf. Darüber hinaus muss sich ein Aufruf von OpenPrinter- im gleichen Thread befinden, wie zum Aufrufen DrvConvertDevModeverwendet wurde.

Die Funktion sollte überprüfen, ob sowohl pdmIn als auch pdmOut- (falls zutreffend) auf gültige DEVMODEW-Strukturen verweisen. Andernfalls sollte die Funktion SetLastError(ERROR_INVALID_PARAMETER) aufrufen und FALSE-zurückgeben. Wenn die durch pcbNeed- angegebene Ausgabegröße DEVMODEW zu klein ist, sollte der Treiber den von pcbNeededed bereitgestellten Größenwert mit der erforderlichen Puffergröße überschreiben, setLastError(ERROR_INSUFFICIENT_BUFFER) aufrufen und FALSEzurückgeben.

Die DrvConvertDevMode-Funktion wird im Kontext des Spoolers ausgeführt und darf daher keine Benutzeroberfläche anzeigen.

Wenn DrvConvertDevMode mit einem NULL- DEVMODEW-Strukturzeiger im pdmOut Parameter aufgerufen wird, um die Puffergröße abzurufen, wird erwartet, dass der Treiber den letzten Fehler auf ERROR_INSUFFICIENT_BUFFER festgelegt. Wenn der letzte Fehler nicht auf diesen Wert festgelegt ist, geht der Spooler von einem allgemeinen Fehler aus.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- winddiui.h (include Winddiui.h)