2.2.2.1 _DEVMODE

The _DEVMODE structure defines initialization data for a printer. Although the _DEVMODE structure does not contain any pointers, it is still custom-marshaled, because the size of the structure is version-specific and implementation-specific, and cannot be expressed using IDL attributes. It has the following message format.

The print server MUST accept _DEVMODE structures with truncated public information. A truncated _DEVMODE structure contains a subset of fields, from dmDeviceName up to and including dmFields, plus at least those fields that are initialized as specified by dmFields. It is followed by private, printer driver–specific data, the size of which is specified by the dmDriverExtra field.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dmDeviceName (64 bytes)

...

...

...

dmSpecVersion

dmDriverVersion

dmSize

dmDriverExtra

dmFields

dmOrientation

dmPaperSize

dmPaperLength

dmPaperWidth

dmScale

dmCopies

dmDefaultSource

dmPrintQuality

dmColor

dmDuplex

dmYResolution

dmTTOption

dmCollate

dmFormName (64 bytes)

...

...

...

...

reserved0

reserved1

reserved2

reserved3

dmNup

reserved4

dmICMMethod

dmICMIntent

dmMediaType

dmDitherType

reserved5

reserved6

reserved7

reserved8

dmDriverExtraData (variable)

...

dmDeviceName (64 bytes): A 32-element array of 16-bit Unicode characters that form a null-terminated string that specifies the name of the printer. Printer name strings that are longer than 32 characters are truncated to fit the array. For more rules governing printer names, see section 2.2.4.14.

dmSpecVersion (2 bytes): The version of initialization data specification on which the _DEVMODE structure is based. This value SHOULD be 0x0401.<93>

dmDriverVersion (2 bytes): For printers, an optional, implementation-defined version of the printer driver.<94>

dmSize (2 bytes): The size, in bytes, of the _DEVMODE structure, which MUST be a multiple of 4. This value does not include the length of any private, printer driver–specific data that follows the _DEVMODE structure's public fields. The size of private data is specified by the dmDriverExtra value.

If the _DEVMODE structure contains truncated public information, the value of dmSize is at least the size, in bytes, of a subset of fields, from dmDeviceName up to and including dmFields, plus fields that are initialized as specified by dmFields.

dmDriverExtra (2 bytes): The size, in bytes, of the private, printer driver–specific data that follows this structure.

dmFields (4 bytes): A bitfield that specifies the fields of the _DEVMODE structure that have been initialized. If a bit is set, the corresponding field MUST be initialized and MUST be processed on receipt. If a bit is not set, the value of the corresponding field SHOULD be zero when sent and MUST be ignored on receipt.

The value of this field is the result of a bitwise OR of the following bits.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

0

U
P

0

S
C

P
W

P
L

P
S

O
R

C
L

T
T

Y

D
X

C
R

P
Q

D
S

C
P

C
M

0

0

0

0

0

0

F
M

0

0

0

0

0

D
T

M
T

C
I

Name

Description

DM_ICMINTENT

CI

If this bit is set, the dmICMIntent field MUST be initialized.

DM_MEDIATYPE

MT

If this bit is set, the dmMediaType field MUST be initialized.

DM_DITHERTYPE

DT

If this bit is set, the dmDitherType field MUST be initialized.

DM_FORMNAME

FM

If this bit is set, the dmFormName field MUST be initialized.

DM_ICMMETHOD

CM

If this bit is set, the dmICMMethod field MUST be initialized.

DM_COPIES

CP

If this bit is set, the dmCopies field MUST be initialized.

DM_DEFAULTSOURCE

DS

If this bit is set, the dmDefaultSource field MUST be initialized.

DM_PRINTQUALITY

PQ

If this bit is set, the dmPrintQuality field MUST be initialized.

DM_COLOR

CR

If this bit is set, the dmColor field MUST be initialized.

DM_DUPLEX

DX

If this bit is set, the dmDuplex field MUST be initialized.

DM_YRESOLUTION

Y

If this bit is set, the dmYResolution field MUST be initialized.

DM_TTOPTION

TT

If this bit is set, the dmTTOption field MUST be initialized.

DM_COLLATE

CL

If this bit is set, the dmCollate field MUST be initialized.

DM_ORIENTATION

OR

If this bit is set, the dmOrientation field MUST be initialized.

DM_PAPERSIZE

PS

If this bit is set, the dmPaperSize field MUST be initialized. This bit MUST NOT be set if either DM_PAPERLENGTH or DM_PAPERWIDTH are set.

DM_PAPERLENGTH

PL

If this bit is set, the dmPaperLength field MUST be initialized. This bit MUST NOT be set if DM_PAPERSIZE is set.

DM_PAPERWIDTH

PW

If this bit is set, the dmPaperWidth field MUST be initialized. This bit MUST NOT be set if DM_PAPERSIZE is set.

DM_SCALE

SC

If this bit is set, the dmScale field MUST be initialized.

DM_NUP

UP

If this bit is set, the dmNup field MUST be initialized.

dmOrientation (2 bytes): For printers, the orientation for output. If the DM_ORIENTATION bit is set in dmFields, the value of this field SHOULD be one of the following.

Name/value

Description

DMORIENT_POTRAIT

0x0001

"Portrait" orientation.

DMORIENT_LANDSCAPE

0x0002

"Landscape" orientation.

dmPaperSize (2 bytes): For printers, the size of the output media. If the DM_PAPERSIZE bit is set in dmFields, the value of this field SHOULD<95> be one of the following, or it MAY be a device-specific value that is greater than or equal to 0x0100.

Name/value

Description

DMPAPER_LETTER

0x0001

Letter, 8 1/2 x 11 inches

DMPAPER_LEGAL

0x0005

Legal, 8 1/2 x 14 inches

DMPAPER_10X14

0x0010

10 x 14-inch sheet

DMPAPER_11X17

0x0011

11 x 17-inch sheet

DMPAPER_12X11

0x005A

12 x 11-inch sheet

DMPAPER_A3

0x0008

A3 sheet, 297 x 420 millimeters

DMPAPER_A3_ROTATED

0x004C

A3 rotated sheet, 420 x 297 millimeters

DMPAPER_A4

0x0009

A4 sheet, 210 x 297 millimeters

DMPAPER_A4_ROTATED

0x004D

A4 rotated sheet, 297 x 210 millimeters

DMPAPER_A4SMALL

0x000A

A4 small sheet, 210 x 297 millimeters

DMPAPER_A5

0x000B

A5 sheet, 148 x 210 millimeters

DMPAPER_A5_ROTATED

0x004E

A5 rotated sheet, 210 x 148 millimeters

DMPAPER_A6

0x0046

A6 sheet, 105 x 148 millimeters

DMPAPER_A6_ROTATED

0x0053

A6 rotated sheet, 148 x 105 millimeters

DMPAPER_B4

0x000C

B4 sheet, 250 x 354 millimeters

DMPAPER_B4_JIS_ROTATED

0x004F

B4 (JIS) rotated sheet, 364 x 257 millimeters

DMPAPER_B5

0x000D

B5 sheet, 182 x 257-millimeter paper

DMPAPER_B5_JIS_ROTATED

0x0050

B5 (JIS) rotated sheet, 257 x 182 millimeters

DMPAPER_B6_JIS

0x0058

B6 (JIS) sheet, 128 x 182 millimeters

DMPAPER_B6_JIS_ROTATED

0x0059

B6 (JIS) rotated sheet, 182 x 128 millimeters

DMPAPER_CSHEET

0x0018

C Sheet, 17 x 22 inches

DMPAPER_DBL_JAPANESE_POSTCARD

0x0045

Double Japanese Postcard, 200 x 148 millimeters

DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED

0x0052

Double Japanese Postcard Rotated, 148 x 200 millimeters

DMPAPER_DSHEET

0x0019

D Sheet, 22 x 34 inches

DMPAPER_ENV_9

0x0013

#9 Envelope, 3 7/8 x 8 7/8 inches

DMPAPER_ENV_10

0x0014

#10 Envelope, 4 1/8 x 9 1/2 inches

DMPAPER_ENV_11

0x0015

#11 Envelope, 4 1/2 x 10 3/8 inches

DMPAPER_ENV_12

0x0016

#12 Envelope, 4 3/4 x 11 inches

DMPAPER_ENV_14

0x0017

#14 Envelope, 5 x 11 1/2 inches

DMPAPER_ENV_C5

0x001C

C5 Envelope, 162 x 229 millimeters

DMPAPER_ENV_C3

0x001D

C3 Envelope, 324 x 458 millimeters

DMPAPER_ENV_C4

0x001E

C4 Envelope, 229 x 324 millimeters

DMPAPER_ENV_C6

0x001F

C6 Envelope, 114 x 162 millimeters

DMPAPER_ENV_C65

0x0020

C65 Envelope, 114 x 229 millimeters

DMPAPER_ENV_B4

0x0021

B4 Envelope, 250 x 353 millimeters

DMPAPER_ENV_B5

0x0022

B5 Envelope, 176 x 250 millimeters

DMPAPER_ENV_B6

0x0023

B6 Envelope, 176 x 125 millimeters

DMPAPER_ENV_DL

0x001B

DL Envelope, 110 x 220 millimeters

DMPAPER_ENV_ITALY

0x0024

Italy Envelope, 110 x 230 millimeters

DMPAPER_ENV_MONARCH

0x0025

Monarch Envelope, 3 7/8 x 7 1/2 inches

DMPAPER_ENV_PERSONAL

0x0026

6 3/4 Envelope, 3 5/8 x 6 1/2 inches

DMPAPER_ESHEET

0x001A

E Sheet, 34 x 44 inches

DMPAPER_EXECUTIVE

0x0007

Executive, 7 1/4 x 10 1/2 inches

DMPAPER_FANFOLD_US

0x0027

US Std Fanfold, 14 7/8 x 11 inches

DMPAPER_FANFOLD_STD_GERMAN

0x0028

German Std Fanfold, 8 1/2 x 12 inches

DMPAPER_FANFOLD_LGL_GERMAN

0x0029

German Legal Fanfold, 8 x 13 inches

DMPAPER_FOLIO

0x000E

Folio, 8 1/2 x 13-inch paper

DMPAPER_JAPANESE_POSTCARD_ROTATED

0x0051

Japanese Postcard Rotated, 148 x 100 millimeters

DMPAPER_JENV_CHOU3

0x0049

Japanese Envelope Chou #3

DMPAPER_JENV_CHOU3_ROTATED

0x0056

Japanese Envelope Chou #3 Rotated

DMPAPER_JENV_CHOU4

0x004A

Japanese Envelope Chou #4

DMPAPER_JENV_CHOU4_ROTATED

0x0057

Japanese Envelope Chou #4 Rotated

DMPAPER_JENV_KAKU2

0x0047

Japanese Envelope Kaku #2

DMPAPER_JENV_KAKU2_ROTATED

0x0054

Japanese Envelope Kaku #2 Rotated

DMPAPER_JENV_KAKU3

0x0048

Japanese Envelope Kaku #3

DMPAPER_JENV_KAKU3_ROTATED

0x0055

Japanese Envelope Kaku #3 Rotated

DMPAPER_JENV_YOU4

0x005B

Japanese Envelope You #4

DMPAPER_JENV_YOU4_ROTATED

0x005C

Japanese Envelope You #4 Rotated

DMPAPER_LEDGER

0x0004

Ledger, 17 x 11 inches

DMPAPER_LETTER_ROTATED

0x004B

Letter Rotated, 11 by 8 1/2 inches

DMPAPER_LETTERSMALL

0x0002

Letter Small, 8 1/2 x 11 inches

DMPAPER_NOTE

0x0012

Note, 8 1/2 x 11-inches

DMPAPER_P16K

0x005D

PRC 16K, 146 x 215 millimeters

DMPAPER_P16K_ROTATED

0x006A

PRC 16K Rotated, 215 x 146 millimeters

DMPAPER_P32K

0x005E

PRC 32K, 97 x 151 millimeters

DMPAPER_P32K_ROTATED

0x006B

PRC 32K Rotated, 151 x 97 millimeters

DMPAPER_P32KBIG

0x005F

PRC 32K(Big) 97 x 151 millimeters

DMPAPER_P32KBIG_ROTATED

0x006C

PRC 32K(Big) Rotated, 151 x 97 millimeters

DMPAPER_PENV_1

0x0060

PRC Envelope #1, 102 by 165 millimeters

DMPAPER_PENV_1_ROTATED

0x006D

PRC Envelope #1 Rotated, 165 x 102 millimeters

DMPAPER_PENV_2

0x0061

PRC Envelope #2, 102 x 176 millimeters

DMPAPER_PENV_2_ROTATED

0x006E

PRC Envelope #2 Rotated, 176 x 102 millimeters

DMPAPER_PENV_3

0x0062

PRC Envelope #3, 125 x 176 millimeters

DMPAPER_PENV_3_ROTATED

0x006F

PRC Envelope #3 Rotated, 176 x 125 millimeters

DMPAPER_PENV_4

0x0063

PRC Envelope #4, 110 x 208 millimeters

DMPAPER_PENV_4_ROTATED

0x0070

PRC Envelope #4 Rotated, 208 x 110 millimeters

DMPAPER_PENV_5

0x0064

PRC Envelope #5, 110 x 220 millimeters

DMPAPER_PENV_5_ROTATED

0x0071

PRC Envelope #5 Rotated, 220 x 110 millimeters

DMPAPER_PENV_6

0x0065

PRC Envelope #6, 120 x 230 millimeters

DMPAPER_PENV_6_ROTATED

0x0072

PRC Envelope #6 Rotated, 230 x 120 millimeters

DMPAPER_PENV_7

0x0066

PRC Envelope #7, 160 x 230 millimeters

DMPAPER_PENV_7_ROTATED

0x0073

PRC Envelope #7 Rotated, 230 x 160 millimeters

DMPAPER_PENV_8

0x0067

PRC Envelope #8, 120 x 309 millimeters

DMPAPER_PENV_8_ROTATED

0x0074

PRC Envelope #8 Rotated, 309 x 120 millimeters

DMPAPER_PENV_9

0x0068

PRC Envelope #9, 229 x 324 millimeters

DMPAPER_PENV_9_ROTATED

0x0075

PRC Envelope #9 Rotated, 324 x 229 millimeters

DMPAPER_PENV_10

0x0069

PRC Envelope #10, 324 x 458 millimeters

DMPAPER_PENV_10_ROTATED

0x0076

PRC Envelope #10 Rotated, 458 x 324 millimeters

DMPAPER_QUARTO

0x000F

Quarto, 215 x 275 millimeter paper

DMPAPER_STATEMENT

0x0006

Statement, 5 1/2 x 8 1/2 inches

DMPAPER_TABLOID

0x0003

Tabloid, 11 x 17 inches

0x0100 ≤ value

The value is device-specific.

dmPaperLength (2 bytes): If the DM_PAPERLENGTH bit is set in the dmFields field, this field specifies the length of the paper, in tenths of a millimeter, to use in the printer for which the job is destined.

dmPaperWidth (2 bytes): If the DM_PAPERWIDTH bit is set in the dmFields field, this field specifies the width of the paper, in tenths of a millimeter, to use in the printer for which the job is destined.

dmScale (2 bytes): If the DM_SCALE bit is set in the dmFields field, this field specifies the percentage factor by which the printed output is to be scaled.

dmCopies (2 bytes): If the DM_COPIES bit is set in the dmFields field, this field specifies the number of copies to be printed, if the device supports multiple-page copies.

dmDefaultSource (2 bytes): If the DM_DEFAULTSOURCE bit is set in the dmFields field, this field specifies the paper source.

The value of this field SHOULD be one of the following, or it MAY be a device-specific value that is greater than or equal to 0x0100.

Name/value

Description

DMBIN_UPPER

0x0001

Select the upper paper bin. This value is also used for the paper source for printers that only have one paper bin.

DMBIN_LOWER

0x0002

Select the lower bin.

DMBIN_MIDDLE

0x0003

Select the middle paper bin.

DMBIN_MANUAL

0x0004

Manually select the paper bin.

DMBIN_ENVELOPE

0x0005

Select the auto envelope bin.

DMBIN_ENVMANUAL

0x0006

Select the manual envelope bin.

DMBIN_AUTO

0x0007

Auto-select the bin.

DMBIN_TRACTOR

0x0008

Select the bin with the tractor paper.

DMBIN_SMALLFMT

0x0009

Select the bin with the smaller paper format.

DMBIN_LARGEFMT

0x000A

Select the bin with the larger paper format.

DMBIN_LARGECAPACITY

0x000B

Select the bin with large capacity.

DMBIN_CASSETTE

0x000E

Select the cassette bin.

DMBIN_FORMSOURCE

0x000F

Select the bin with the required form.

dmPrintQuality (2 bytes): If the DM_PRINTQUALITY bit is set in the dmFields field, this field specifies the printer resolution. The value of this field MUST be either a positive value that specifies a device-dependent resolution in dots per inch (DPI) or one of the following four predefined device-independent values that are mapped to a device-specific resolution in an implementation-specific manner.

Name/value

Description

DMRES_HIGH

0xFFFC

High-resolution printouts

DMRES_MEDIUM

0xFFFD

Medium-resolution printouts

DMRES_LOW

0xFFFE

Low-resolution printouts

DMRES_DRAFT

0xFFFF

Draft-resolution printouts

dmColor (2 bytes): If the DM_COLOR bit is set in the dmFields field, this field specifies the color mode to use with color printers. The value of this field MUST be one of the following.

Name/value

Description

DMRES_MONOCHROME

0x0001

Use monochrome printing mode.

DMRES_COLOR

0x0002

Use color printing mode.

dmDuplex (2 bytes): If the DM_DUPLEX bit is set in the dmFields field, this field specifies duplex or double-sided printing for printers that are capable of duplex printing. The value of this field MUST be one of the following.

Name/value

Description

DMDUP_SIMPLEX

0x0001

Normal (non-duplex) printing.

DMDUP_VERTICAL

0x0002

Long-edge binding; that is, the long edge of the page is vertical.

DMDUP_HORIZONTAL

0x0003

Short-edge binding; that is, the long edge of the page is horizontal.

dmYResolution (2 bytes): If the DM_YRESOLUTION bit is set in the dmFields, this field specifies the y-resolution, in dots per inch, of the printer.

dmTTOption (2 bytes): If the DM_TTOPTION bit is set in the dmFields field, this field specifies how TrueType fonts MUST be printed. The value of this field MUST be one of the following.

Name/value

Description

DMTT_BITMAP

0x0001

Prints TrueType fonts as graphics. This is the default action for dot-matrix printers.

DMTT_DOWNLOAD

0x0002

Downloads TrueType fonts as soft fonts. This is the default action for Hewlett-Packard printers that use printer control language (PCL).

DMTT_SUBDEV

0x0003

Substitutes device fonts for TrueType fonts. This is the default action for PostScript printers.

DMTT_DOWNLOAD_OUTLINE

0x0004

Downloads TrueType fonts as outline soft fonts.<96>

dmCollate (2 bytes): If the DM_COLLATE bit is set in the dmFields field, this field specifies whether collation is used when printing multiple copies. The value of this field is one of the following:

Name/value

Description

DMCOLLATE_FALSE

0x0000

Do not collate when printing multiple copies.

DMCOLLATE_TRUE

0x0001

Collate when printing multiple copies.

dmFormName (64 bytes): This field is a 32-element array of 16-bit Unicode characters. If the DM_FORMNAME bit is set in the dmFields field, this field specifies the name of the form to use, for example, "Letter" or "Legal". The value of this field is restricted to 32 characters, including the trailing null. Form names that are longer than 32 characters, including the trailing null, are truncated to fit the array.

reserved0 (2 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

reserved1 (4 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

reserved2 (4 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

reserved3 (4 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

dmNup (4 bytes): If the DM_NUP bit is set in the dmFields, this field specifies the responsibility for performing page layout for N-Up Printing. It is one of the following values:

Name/value

Description

DMNUP_SYSTEM

0x00000001

The print server does the page layout.

DMNUP_ONEUP

0x00000002

The application does the page layout.

reserved4 (4 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

dmICMMethod (4 bytes): If the DM_ICMMETHOD bit is set in the dmFields field, this field specifies how Image Color Management (ICM) is handled. For a non-ICM application, this field determines if ICM is enabled or disabled. For ICM applications, the system examines this field to determine how to handle ICM support. The value of this field is one of the following predefined values or a printer driver-defined value greater than or equal to 0x00000100.

Name/value

Description

DMICMMETHOD_NONE

0x00000001

Specifies that ICM is disabled.

DMICMMETHOD_SYSTEM

0x00000002

Specifies that ICM is handled by the system on which the page description language (PDL) data is generated.

DMICMMETHOD_DRIVER

0x00000003

Specifies that ICM is handled by the printer driver.

DMICMMETHOD_DEVICE

0x00000004

Specifies that ICM is handled by the destination device.

dmICMIntent (4 bytes): If the DM_ICMINTENT bit is set in the dmFields field, this field specifies which color matching method, or intent, is used by default. This field is primarily for non-ICM applications. ICM applications can establish intents by using the ICM functions. The value of this field is one of the following predefined values, or a printer driver defined value greater than or equal to 0x00000100.

Name/value

Description

DMICM_SATURATE

0x00000001

Color matching SHOULD be optimized for color saturation.

DMICM_CONTRAST

0x00000002

Color matching SHOULD optimize for color contrast.

DMICM_COLORIMETRIC

0x00000003

Color matching SHOULD optimize to match the exact color requested.

DMICM_ABS_COLORIMETRIC

0x00000004

Color matching SHOULD optimize to match the exact color requested without white point mapping.

dmMediaType (4 bytes): If the DM_MEDIATYPE bit is set in the dmFields field, this field specifies the type of media to print on. The value of this field is one of the following predefined values or else a printer driver-defined value greater than or equal to 0x00000100.

Name/value

Description

DMMEDIA_STANDARD

0x00000001

Plain paper

DMMEDIA_TRANSPARENCY

0x00000002

Transparent film

DMMEDIA_GLOSSY

0x00000003

Glossy paper

dmDitherType (4 bytes): If the DM_DITHERTYPE bit is set in the dmFields field, this field specifies how dithering is to be done. The value of this field is one of the following predefined values or else a printer driver-defined value greater than or equal to 0x00000100.

Name/value

Description

DMDITHER_NONE

0x00000001

No dithering.

DMDITHER_COARSE

0x00000002

Dithering with a coarse brush.

DMDITHER_FINE

0x00000003

Dithering with a fine brush.

DMDITHER_LINEART

0x00000004

Line art dithering, a special dithering method that produces well defined borders between black, white, and gray scaling.

DMDITHER_ERRORDIFFUSION

0x00000005

Error diffusion dithering.<97>

DMDITHER_RESERVED6

0x00000006

Same as DMDITHER_LINEART.

DMDITHER_RESERVED7

0x00000007

Same as DMDITHER_LINEART.

DMDITHER_RESERVED8

0x00000008

Same as DMDITHER_LINEART.

DMDITHER_RESERVED9

0x00000009

Same as DMDITHER_LINEART.

DMDITHER_GRAYSCALE

0x0000000A

Device does gray scaling.

reserved5 (4 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

reserved6 (4 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

reserved7 (4 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

reserved8 (4 bytes): A value that SHOULD be zero when sent and MUST be ignored on receipt.

dmDriverExtraData (variable): This field can contain implementation-specific printer driver data. Its size in bytes is specified by the dmDriverExtra field.<98>