X-Git-Url: http://git.samba.org/samba.git/?p=ira%2Fwip.git;a=blobdiff_plain;f=librpc%2Fidl%2Fspoolss.idl;h=14ddba8173d6d58b8f53ba1791eb054ade5ff41b;hp=9765fd3969b6dc9ddcb0c484230144eb54b69ea3;hb=5ae61cfbc281f346fd3712a975c5796f9cfbc6c2;hpb=3b181564c552ed3bc464534714148556deeeca2c diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl index 9765fd3969b..14ddba8173d 100644 --- a/librpc/idl/spoolss.idl +++ b/librpc/idl/spoolss.idl @@ -116,7 +116,7 @@ import "misc.idl", "security.idl", "winreg.idl"; JOB_STATUS_COMPLETE = 0x00001000 } spoolss_JobStatus; - typedef struct { + typedef [public,gensize] struct { [relative] nstring *printername; [relative] nstring *servername; uint32 cjobs; @@ -179,41 +179,232 @@ import "misc.idl", "security.idl", "winreg.idl"; DEVMODE_PANNINGHEIGHT = 0x10000000 } spoolss_DeviceModeFields; + typedef [enum16bit] enum { + DMSPEC_NT3 = 0x320, + DMSPEC_WIN95_98_ME = 0x400, + DMSPEC_NT4_AND_ABOVE = 0x401 + } spoolss_DeviceModeSpecVersion; + + typedef [enum16bit] enum { + DMORIENT_PORTRAIT = 0x0001, + DMORIENT_LANDSCAPE = 0x0002 + } spoolss_DeviceModeOrientation; + + typedef [enum16bit] enum { + DMPAPER_LETTER = 0x0001, /* Letter, 8 1/2 x 11 inches */ + DMPAPER_LETTERSMALL = 0x0002, /* Letter Small, 8 1/2 x 11 inches */ + DMPAPER_TABLOID = 0x0003, /* Tabloid, 11 x 17 inches */ + DMPAPER_LEDGER = 0x0004, /* Ledger, 17 x 11 inches */ + DMPAPER_LEGAL = 0x0005, /* Legal, 8 1/2 x 14 inches */ + DMPAPER_STATEMENT = 0x0006, /* Statement, 5 1/2 x 8 1/2 inches */ + DMPAPER_EXECUTIVE = 0x0007, /* Executive, 7 1/4 x 10 1/2 inches */ + DMPAPER_A3 = 0x0008, /* A3 sheet, 297 x 420 millimeters */ + DMPAPER_A4 = 0x0009, /* A4 sheet, 210 x 297 millimeters */ + DMPAPER_A4SMALL = 0x000A, /* A4 small sheet, 210 x 297 millimeters */ + DMPAPER_A5 = 0x000B, /* A5 sheet, 148 x 210 millimeters */ + DMPAPER_B4 = 0x000C, /* B4 sheet, 250 x 354 millimeters */ + DMPAPER_B5 = 0x000D, /* B5 sheet, 182 x 257-millimeter paper */ + DMPAPER_FOLIO = 0x000E, /* Folio, 8 1/2 x 13-inch paper */ + DMPAPER_QUARTO = 0x000F, /* Quarto, 215 x 275 millimeter paper */ + DMPAPER_10X14 = 0x0010, /* 10 x 14-inch sheet */ + DMPAPER_11X17 = 0x0011, /* 11 x 17-inch sheet */ + DMPAPER_NOTE = 0x0012, /* Note, 8 1/2 x 11-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_CSHEET = 0x0018, /* C Sheet, 17 x 22 inches */ + DMPAPER_DSHEET = 0x0019, /* D Sheet, 22 x 34 inches */ + DMPAPER_ESHEET = 0x001A, /* E Sheet, 34 x 44 inches */ + DMPAPER_ENV_DL = 0x001B, /* DL Envelope, 110 x 220 millimeters */ + 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_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_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_DBL_JAPANESE_POSTCARD = 0x0045, /* Double Japanese Postcard, 200 x 148 millimeters */ + DMPAPER_A6 = 0x0046, /* A6 sheet, 105 x 148 millimeters */ + DMPAPER_JENV_KAKU2 = 0x0047, /* Japanese Envelope Kaku #2 */ + DMPAPER_JENV_KAKU3 = 0x0048, /* Japanese Envelope Kaku #3 */ + DMPAPER_JENV_CHOU3 = 0x0049, /* Japanese Envelope Chou #3 */ + DMPAPER_JENV_CHOU4 = 0x004A, /* Japanese Envelope Chou #4 */ + DMPAPER_LETTER_ROTATED = 0x004B, /* Letter Rotated, 11 by 8 1/2 inches */ + DMPAPER_A3_ROTATED = 0x004C, /* A3 rotated sheet, 420 x 297 millimeters */ + DMPAPER_A4_ROTATED = 0x004D, /* A4 rotated sheet, 297 x 210 millimeters */ + DMPAPER_A5_ROTATED = 0x004E, /* A5 rotated sheet, 210 x 148 millimeters */ + DMPAPER_B4_JIS_ROTATED = 0x004F, /* B4 (JIS) rotated sheet, 364 x 257 millimeters */ + DMPAPER_B5_JIS_ROTATED = 0x0050, /* B5 (JIS) rotated sheet, 257 x 182 millimeters */ + DMPAPER_JAPANESE_POSTCARD_ROTATED = 0x0051, /* Japanese Postcard Rotated, 148 x 100 millimeters */ + DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED = 0x0052, /* Double Japanese Postcard Rotated, 148 x 200 millimeters */ + DMPAPER_A6_ROTATED = 0x0053, /* A6 rotated sheet, 148 x 105 millimeters */ + DMPAPER_JENV_KAKU2_ROTATED = 0x0054, /* Japanese Envelope Kaku #2 Rotated */ + DMPAPER_JENV_KAKU3_ROTATED = 0x0055, /* Japanese Envelope Kaku #3 Rotated */ + DMPAPER_JENV_CHOU3_ROTATED = 0x0056, /* Japanese Envelope Chou #3 Rotated */ + DMPAPER_JENV_CHOU4_ROTATED = 0x0057, /* Japanese Envelope Chou #4 Rotated */ + 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_12X11 = 0x005A, /* 12 x 11-inch sheet */ + DMPAPER_JENV_YOU4 = 0x005B, /* Japanese Envelope You #4 */ + DMPAPER_JENV_YOU4_ROTATED = 0x005C, /* Japanese Envelope You #4 */ + DMPAPER_P16K = 0x005D, /* PRC 16K, 146 x 215 millimeters */ + DMPAPER_P32K = 0x005E, /* PRC 32K, 97 x 151 millimeters */ + DMPAPER_P32KBIG = 0x005F, /* PRC 32K(Big) 97 x 151 millimeters */ + DMPAPER_PENV_1 = 0x0060, /* PRC Envelope #1, 102 by 165 millimeters */ + DMPAPER_PENV_2 = 0x0061, /* PRC Envelope #2, 102 x 176 millimeters */ + DMPAPER_PENV_3 = 0x0062, /* PRC Envelope #3, 125 x 176 millimeters */ + DMPAPER_PENV_4 = 0x0063, /* PRC Envelope #4, 110 x 208 millimeters */ + DMPAPER_PENV_5 = 0x0064, /* PRC Envelope #5, 110 x 220 millimeters */ + DMPAPER_PENV_6 = 0x0065, /* PRC Envelope #6, 120 x 230 millimeters */ + DMPAPER_PENV_7 = 0x0066, /* PRC Envelope #7, 160 x 230 millimeters */ + DMPAPER_PENV_8 = 0x0067, /* PRC Envelope #8, 120 x 309 millimeters */ + DMPAPER_PENV_9 = 0x0068, /* PRC Envelope #9, 229 x 324 millimeters */ + DMPAPER_PENV_10 = 0x0069, /* PRC Envelope #10, 324 x 458 millimeters */ + DMPAPER_P16K_ROTATED = 0x006A, /* PRC 16K Rotated, 215 x 146 millimeters */ + DMPAPER_P32K_ROTATED = 0x006B, /* PRC 32K Rotated, 151 x 97 millimeters */ + DMPAPER_P32KBIG_ROTATED = 0x006C, /* PRC 32K(Big) Rotated, 151 x 97 millimeters */ + DMPAPER_PENV_1_ROTATED = 0x006D, /* PRC Envelope #1 Rotated, 165 x 102 millimeters */ + DMPAPER_PENV_2_ROTATED = 0x006E, /* PRC Envelope #2 Rotated, 176 x 102 millimeters */ + DMPAPER_PENV_3_ROTATED = 0x006F, /* PRC Envelope #3 Rotated, 176 x 125 millimeters */ + DMPAPER_PENV_4_ROTATED = 0x0070, /* PRC Envelope #4 Rotated, 208 x 110 millimeters */ + DMPAPER_PENV_5_ROTATED = 0x0071, /* PRC Envelope #5 Rotated, 220 x 110 millimeters */ + DMPAPER_PENV_6_ROTATED = 0x0072, /* PRC Envelope #6 Rotated, 230 x 120 millimeters */ + DMPAPER_PENV_7_ROTATED = 0x0073, /* PRC Envelope #7 Rotated, 230 x 160 millimeters */ + DMPAPER_PENV_8_ROTATED = 0x0074, /* PRC Envelope #8 Rotated, 309 x 120 millimeters */ + DMPAPER_PENV_9_ROTATED = 0x0075, /* PRC Envelope #9 Rotated, 324 x 229 millimeters */ + DMPAPER_PENV_10_ROTATED = 0x0076 /* PRC Envelope #10 Rotated, 458 x 324 millimeters */ + } spoolss_DeviceModePaperSize; + + typedef [enum16bit] enum { + DMBIN_UPPER = 0x0001, + DMBIN_LOWER = 0x0002, + DMBIN_MIDDLE = 0x0003, + DMBIN_MANUAL = 0x0004, + DMBIN_ENVELOPE = 0x0005, + DMBIN_ENVMANUAL = 0x0006, + DMBIN_AUTO = 0x0007, + DMBIN_TRACTOR = 0x0008, + DMBIN_SMALLFMT = 0x0009, + DMBIN_LARGEFMT = 0x000a, + DMBIN_LARGECAPACITY = 0x000b, + DMBIN_CASSETTE = 0x000e, + DMBIN_FORMSOURCE = 0x000f + } spoolss_DeviceModeDefaultSource; + + typedef [enum16bit] enum { + DMRES_HIGH = 0xfffc, + DMRES_MEDIUM = 0xfffd, + DMRES_LOW = 0xfffe, + DMRES_DRAFT = 0xffff + } spoolss_DeviceModePrintQuality; + + typedef [enum16bit] enum { + DMRES_MONOCHROME = 0x0001, + DMRES_COLOR = 0x0002 + } spoolss_DeviceModeColor; + + typedef [enum16bit] enum { + DMDUP_SIMPLEX = 0x0001, + DMDUP_VERTICAL = 0x0002, + DMDUP_HORIZONTAL = 0x0003 + } spoolss_DeviceModeDuplex; + + typedef [enum16bit] enum { + DMTT_BITMAP = 0x0001, + DMTT_DOWNLOAD = 0x0002, + DMTT_SUBDEV = 0x0003, + DMTT_DOWNLOAD_OUTLINE = 0x0004 + } spoolss_DeviceModeTTOption; + + typedef [enum16bit] enum { + DMCOLLATE_FALSE = 0x0000, + DMCOLLATE_TRUE = 0x0001 + } spoolss_DeviceModeCollate; + + typedef [v1_enum] enum { + DMNUP_SYSTEM = 0x00000001, + DMNUP_ONEUP = 0x00000002 + } spoolss_DeviceModeNUp; + + typedef [v1_enum] enum { + DMICMMETHOD_NONE = 0x00000001, + DMICMMETHOD_SYSTEM = 0x00000002, + DMICMMETHOD_DRIVER = 0x00000003, + DMICMMETHOD_DEVICE = 0x00000004 + } spoolss_DeviceModeICMMethod; + + typedef [v1_enum] enum { + DMICM_SATURATE = 0x00000001, + DMICM_CONTRAST = 0x00000002, + DMICM_COLORIMETRIC = 0x00000003, + DMICM_ABS_COLORIMETRIC = 0x00000004 + } spoolss_DeviceModeICMIntent; + + typedef [v1_enum] enum { + DMMEDIA_STANDARD = 0x00000001, + DMMEDIA_TRANSPARENCY = 0x00000002, + DMMEDIA_GLOSSY = 0x00000003 + } spoolss_DeviceModeMediaType; + + typedef [v1_enum] enum { + DMDITHER_NONE = 0x00000001, + DMDITHER_COARSE = 0x00000002, + DMDITHER_FINE = 0x00000003, + DMDITHER_LINEART = 0x00000004, + DMDITHER_ERRORDIFFUSION = 0x00000005, + DMDITHER_RESERVED6 = 0x00000006, + DMDITHER_RESERVED7 = 0x00000007, + DMDITHER_RESERVED8 = 0x00000008, + DMDITHER_RESERVED9 = 0x00000009, + DMDITHER_GRAYSCALE = 0x0000000A + } spoolss_DeviceModeDitherType; + + const int MAXDEVICENAME = 32; + typedef [public,gensize] struct { - [charset(UTF16)] uint16 devicename[32]; - uint16 specversion; + [charset(UTF16)] uint16 devicename[MAXDEVICENAME]; + spoolss_DeviceModeSpecVersion specversion; uint16 driverversion; uint16 size; [value(r->driverextra_data.length)] uint16 __driverextra_length; spoolss_DeviceModeFields fields; - uint16 orientation; - uint16 papersize; + spoolss_DeviceModeOrientation orientation; + spoolss_DeviceModePaperSize papersize; uint16 paperlength; uint16 paperwidth; uint16 scale; uint16 copies; - uint16 defaultsource; - uint16 printquality; - uint16 color; - uint16 duplex; + spoolss_DeviceModeDefaultSource defaultsource; + spoolss_DeviceModePrintQuality printquality; + spoolss_DeviceModeColor color; + spoolss_DeviceModeDuplex duplex; uint16 yresolution; - uint16 ttoption; - uint16 collate; - [charset(UTF16)] uint16 formname[32]; - uint16 logpixels; - uint32 bitsperpel; - uint32 pelswidth; - uint32 pelsheight; - uint32 displayflags; - uint32 displayfrequency; - uint32 icmmethod; - uint32 icmintent; - uint32 mediatype; - uint32 dithertype; + spoolss_DeviceModeTTOption ttoption; + spoolss_DeviceModeCollate collate; + [charset(UTF16)] uint16 formname[MAXDEVICENAME]; + uint16 logpixels; /* reserved */ + uint32 bitsperpel; /* reserved */ + uint32 pelswidth; /* reserved */ + uint32 pelsheight; /* reserved */ + spoolss_DeviceModeNUp displayflags; + uint32 displayfrequency; /* reserved */ + spoolss_DeviceModeICMMethod icmmethod; + spoolss_DeviceModeICMIntent icmintent; + spoolss_DeviceModeMediaType mediatype; + spoolss_DeviceModeDitherType dithertype; uint32 reserved1; uint32 reserved2; - uint32 panningwidth; - uint32 panningheight; + uint32 panningwidth; /* reserved */ + uint32 panningheight; /* reserved */ [subcontext_size(__driverextra_length),subcontext(0),flag(NDR_REMAINING)] DATA_BLOB driverextra_data; } spoolss_DeviceMode; @@ -248,13 +439,6 @@ import "misc.idl", "security.idl", "winreg.idl"; PRINTER_ENUM_ICON7 | PRINTER_ENUM_ICON8); /* 0x00ff0000 */ - typedef struct { - spoolss_EnumPrinterFlags flags; - [relative] nstring *name; - [relative] nstring *description; - [relative] nstring *comment; - } spoolss_PrinterInfo1; - typedef bitmap { PRINTER_ATTRIBUTE_QUEUED = 0x00000001, PRINTER_ATTRIBUTE_DIRECT = 0x00000002, @@ -274,7 +458,14 @@ import "misc.idl", "security.idl", "winreg.idl"; PRINTER_ATTRIBUTE_TS = 0x00008000 } spoolss_PrinterAttributes; - typedef struct { + typedef [public,gensize] struct { + spoolss_PrinterAttributes flags; + [relative] nstring *description; + [relative] nstring *name; + [relative] nstring *comment; + } spoolss_PrinterInfo1; + + typedef [public,gensize] struct { [relative] nstring *servername; [relative] nstring *printername; [relative] nstring *sharename; @@ -289,7 +480,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative] nstring *parameters; [relative,subcontext(0)] security_descriptor *secdesc; spoolss_PrinterAttributes attributes; - uint32 priority; + [range(0,99)] uint32 priority; uint32 defaultpriority; uint32 starttime; uint32 untiltime; @@ -298,17 +489,17 @@ import "misc.idl", "security.idl", "winreg.idl"; uint32 averageppm; } spoolss_PrinterInfo2; - typedef struct { + typedef [public,gensize] struct { [relative,subcontext(0)] security_descriptor *secdesc; } spoolss_PrinterInfo3; - typedef struct { + typedef [public,gensize] struct { [relative] nstring *printername; [relative] nstring *servername; spoolss_PrinterAttributes attributes; } spoolss_PrinterInfo4; - typedef struct { + typedef [public,gensize] struct { [relative] nstring *printername; [relative] nstring *portname; spoolss_PrinterAttributes attributes; @@ -316,7 +507,7 @@ import "misc.idl", "security.idl", "winreg.idl"; uint32 transmission_retry_timeout; } spoolss_PrinterInfo5; - typedef struct { + typedef [public,gensize] struct { spoolss_PrinterStatus status; } spoolss_PrinterInfo6; @@ -328,7 +519,7 @@ import "misc.idl", "security.idl", "winreg.idl"; DSPRINT_PENDING = 0x80000000 } spoolss_DsPrintAction; - typedef struct { + typedef [public,gensize] struct { [relative] nstring *guid; /* text form of printer guid */ spoolss_DsPrintAction action; } spoolss_PrinterInfo7; @@ -337,7 +528,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative,subcontext(0)] spoolss_DeviceMode *devmode; } spoolss_DeviceModeInfo; - typedef [nodiscriminant,relative_base,public] union { + typedef [nodiscriminant,relative_base,public,gensize] union { [case(0)] spoolss_PrinterInfo0 info0; [case(1)] spoolss_PrinterInfo1 info1; [case(2)] spoolss_PrinterInfo2 info2; @@ -401,7 +592,7 @@ import "misc.idl", "security.idl", "winreg.idl"; /******************/ /* Function: 0x02 */ - typedef struct { + typedef [public,gensize] struct { uint32 job_id; [relative] nstring *printer_name; [relative] nstring *server_name; @@ -410,14 +601,14 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative] nstring *data_type; [relative] nstring *text_status; spoolss_JobStatus status; - uint32 priority; + [range(0,99)] uint32 priority; uint32 position; uint32 total_pages; uint32 pages_printed; spoolss_Time submitted; } spoolss_JobInfo1; - typedef struct { + typedef [public,gensize] struct { uint32 job_id; [relative] nstring *printer_name; [relative] nstring *server_name; @@ -432,7 +623,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative] nstring *text_status; [relative] security_descriptor *secdesc; spoolss_JobStatus status; - uint32 priority; + [range(0,99)] uint32 priority; uint32 position; uint32 start_time; uint32 until_time; @@ -443,13 +634,13 @@ import "misc.idl", "security.idl", "winreg.idl"; uint32 pages_printed; } spoolss_JobInfo2; - typedef struct { + typedef [public,gensize] struct { uint32 job_id; uint32 next_job_id; uint32 reserved; } spoolss_JobInfo3; - typedef struct { + typedef [public,gensize] struct { uint32 job_id; [relative] nstring *printer_name; [relative] nstring *server_name; @@ -464,7 +655,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative] nstring *text_status; [relative] security_descriptor *secdesc; spoolss_JobStatus status; - uint32 priority; + [range(0,99)] uint32 priority; uint32 position; uint32 start_time; uint32 until_time; @@ -476,7 +667,7 @@ import "misc.idl", "security.idl", "winreg.idl"; uint32 size_high; } spoolss_JobInfo4; - typedef [nodiscriminant,relative_base,public] union { + typedef [nodiscriminant,relative_base,public,gensize] union { [case(1)] spoolss_JobInfo1 info1; [case(2)] spoolss_JobInfo2 info2; [case(3)] spoolss_JobInfo3 info3; @@ -493,7 +684,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [string,charset(UTF16)] uint16 *data_type; [string,charset(UTF16)] uint16 *text_status; spoolss_JobStatus status; - uint32 priority; + [range(0,99)] uint32 priority; uint32 position; uint32 total_pages; uint32 pages_printed; @@ -515,7 +706,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [string,charset(UTF16)] uint16 *text_status; uint32 _secdesc_ptr; spoolss_JobStatus status; - uint32 priority; + [range(0,99)] uint32 priority; uint32 position; uint32 start_time; uint32 until_time; @@ -541,7 +732,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [string,charset(UTF16)] uint16 *text_status; uint32 _secdesc_ptr; spoolss_JobStatus status; - uint32 priority; + [range(0,99)] uint32 priority; uint32 position; uint32 start_time; uint32 until_time; @@ -629,9 +820,12 @@ import "misc.idl", "security.idl", "winreg.idl"; /******************/ /* Function: 0x05 */ - [todo] WERROR spoolss_AddPrinter( - /* This function is not implemented in Samba 3 as no - clients have been observed using it. */ + WERROR spoolss_AddPrinter( + [in,unique] [string,charset(UTF16)] uint16 *server, + [in,ref] spoolss_SetPrinterInfoCtr *info_ctr, + [in,ref] spoolss_DevmodeContainer *devmode_ctr, + [in,ref] sec_desc_buf *secdesc_ctr, + [out,ref] policy_handle *handle ); /******************/ @@ -683,9 +877,9 @@ import "misc.idl", "security.idl", "winreg.idl"; } spoolss_SetPrinterInfo0; typedef struct { - spoolss_EnumPrinterFlags flags; - [string,charset(UTF16)] uint16 *name; + spoolss_PrinterAttributes flags; [string,charset(UTF16)] uint16 *description; + [string,charset(UTF16)] uint16 *name; [string,charset(UTF16)] uint16 *comment; } spoolss_SetPrinterInfo1; @@ -704,7 +898,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [string,charset(UTF16)] uint16 *parameters; [subcontext(0)] security_descriptor *secdesc; spoolss_PrinterAttributes attributes; - uint32 priority; + [range(0,99)] uint32 priority; uint32 defaultpriority; uint32 starttime; uint32 untiltime; @@ -836,6 +1030,10 @@ import "misc.idl", "security.idl", "winreg.idl"; spoolss_StringArray *previous_names; } spoolss_AddDriverInfo4; + typedef [bitmap32bit] bitmap { + PRINTER_DRIVER_PACKAGE_AWARE = 0x00000002 + } spoolss_DriverAttributes; + typedef struct { spoolss_DriverOSVersion version; [string,charset(UTF16)] uint16 *driver_name; @@ -843,7 +1041,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [string,charset(UTF16)] uint16 *driver_path; [string,charset(UTF16)] uint16 *data_file; [string,charset(UTF16)] uint16 *config_file; - uint32 driver_attributes; + spoolss_DriverAttributes driver_attributes; uint32 config_version; uint32 driver_version; } spoolss_AddDriverInfo5; @@ -968,7 +1166,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; - uint32 driver_attributes; + spoolss_DriverAttributes driver_attributes; uint32 config_version; uint32 driver_version; } spoolss_DriverInfo5; @@ -1001,9 +1199,9 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative] nstring *data_file; [relative] nstring *config_file; [relative] nstring *help_file; + [relative] nstring_array *dependent_files; [relative] nstring *monitor_name; [relative] nstring *default_datatype; - [relative] nstring_array *dependent_files; [relative] nstring_array *previous_names; NTTIME driver_date; hyper driver_version; @@ -1052,7 +1250,7 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative] nstring *provider; } spoolss_DriverInfo101; - typedef [nodiscriminant,relative_base,public] union { + typedef [nodiscriminant,relative_base,public,gensize] union { [case(1)] spoolss_DriverInfo1 info1; [case(2)] spoolss_DriverInfo2 info2; [case(3)] spoolss_DriverInfo3 info3; @@ -1094,7 +1292,14 @@ import "misc.idl", "security.idl", "winreg.idl"; /******************/ /* Function: 0x0b */ - [todo] WERROR spoolss_GetPrinterDriver( + WERROR spoolss_GetPrinterDriver( + [in,ref] policy_handle *handle, + [in,unique] [string,charset(UTF16)] uint16 *architecture, + [in] uint32 level, + [in,unique] DATA_BLOB *buffer, + [in] uint32 offered, + [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_DriverInfo *info, + [out,ref] uint32 *needed ); /******************/ @@ -1279,7 +1484,21 @@ import "misc.idl", "security.idl", "winreg.idl"; /******************/ /* Function: 0x1a */ + + const string SPL_ARCH_WIN40 = "WIN40"; + const string SPL_ARCH_W32X86 = "W32X86"; + const string SPL_ARCH_W32MIPS = "W32MIPS"; + const string SPL_ARCH_W32ALPHA = "W32ALPHA"; + const string SPL_ARCH_W32PPC = "W32PPC"; + const string SPL_ARCH_IA64 = "IA64"; + const string SPL_ARCH_X64 = "x64"; + + const string SPOOLSS_ARCHITECTURE_ALL = "All"; + const string SPOOLSS_ARCHITECTURE_ALL_CLUSTER = "AllCluster"; const string SPOOLSS_ARCHITECTURE_NT_X86 = "Windows NT x86"; + const string SPOOLSS_ARCHITECTURE_IA_64 = "Windows IA64"; + const string SPOOLSS_ARCHITECTURE_x64 = "Windows x64"; + const string SPOOLSS_ARCHITECTURE_4_0 = "Windows 4.0"; const string SPOOLSS_DEFAULT_SERVER_PATH = "C:\\WINDOWS\\system32\\spool"; typedef [public,gensize] struct { @@ -1287,7 +1506,7 @@ import "misc.idl", "security.idl", "winreg.idl"; uint32 major; uint32 minor; uint32 build; - [value(2)] uint32 unknown; + [value(2)] uint32 platform_id; [subcontext(0),subcontext_size(256)] nstring extra_string; } spoolss_OSVersion; @@ -1296,47 +1515,110 @@ import "misc.idl", "security.idl", "winreg.idl"; uint32 major; uint32 minor; uint32 build; - [value(2)] uint32 unknown1; + [value(2)] uint32 platform_id; [subcontext(0),subcontext_size(256)] nstring extra_string; - uint32 unknown2;/* service pack number? I saw 0 from w2k3 and 1 from winxp sp1*/ - uint32 unknown3;/* hmm? w2k3: 131346(0x20112) winxp sp1: 503382272 0x1E010100 */ + uint16 service_pack_major; + uint16 service_pack_minor; + uint16 suite_mask; + uint8 product_type; + uint8 reserved; } spoolss_OSVersionEx; - typedef [v1_enum] enum { - SPOOLSS_PRINTER_DATA_TYPE_NULL = 0, - SPOOLSS_PRINTER_DATA_TYPE_STRING = 1, - SPOOLSS_PRINTER_DATA_TYPE_BINARY = 3, - SPOOLSS_PRINTER_DATA_TYPE_UINT32 = 4, - SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY = 7 - } spoolss_PrinterDataType; - typedef [nodiscriminant,public,gensize] union { - [case(SPOOLSS_PRINTER_DATA_TYPE_NULL)]; - [case(SPOOLSS_PRINTER_DATA_TYPE_STRING)] nstring string; - [case(SPOOLSS_PRINTER_DATA_TYPE_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary; - [case(SPOOLSS_PRINTER_DATA_TYPE_UINT32)] uint32 value; - [case(SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY)] nstring_array string_array; + [case(REG_NONE)]; + [case(REG_SZ)] nstring string; + [case(REG_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary; + [case(REG_DWORD)] uint32 value; + [case(REG_MULTI_SZ)] nstring_array string_array; [default,flag(NDR_REMAINING)] DATA_BLOB data; } spoolss_PrinterData; + /* predefined registry key names for printer data */ + + const string SPOOL_PRINTERDATA_KEY = "PrinterDriverData"; + const string SPOOL_DSSPOOLER_KEY = "DsSpooler"; + const string SPOOL_DSDRIVER_KEY = "DsDriver"; + const string SPOOL_DSUSER_KEY = "DsUser"; + const string SPOOL_PNPDATA_KEY = "PnPData"; + const string SPOOL_OID_KEY = "OID"; + + /* predefined value names for printer data */ + + const string SPOOL_REG_ASSETNUMBER = "assetNumber"; + const string SPOOL_REG_BYTESPERMINUTE = "bytesPerMinute"; + const string SPOOL_REG_DEFAULTPRIORITY = "defaultPriority"; + const string SPOOL_REG_DESCRIPTION = "description"; + const string SPOOL_REG_DRIVERNAME = "driverName"; + const string SPOOL_REG_DRIVERVERSION = "driverVersion"; + const string SPOOL_REG_FLAGS = "flags"; + const string SPOOL_REG_LOCATION = "location"; + const string SPOOL_REG_OPERATINGSYSTEM = "operatingSystem"; + const string SPOOL_REG_OPERATINGSYSTEMHOTFIX = "operatingSystemHotfix"; + const string SPOOL_REG_OPERATINGSYSTEMSERVICEPACK = "operatingSystemServicePack"; + const string SPOOL_REG_OPERATINGSYSTEMVERSION = "operatingSystemVersion"; + const string SPOOL_REG_PORTNAME = "portName"; + const string SPOOL_REG_PRINTATTRIBUTES = "printAttributes"; + const string SPOOL_REG_PRINTBINNAMES = "printBinNames"; + const string SPOOL_REG_PRINTCOLLATE = "printCollate"; + const string SPOOL_REG_PRINTCOLOR = "printColor"; + const string SPOOL_REG_PRINTDUPLEXSUPPORTED = "printDuplexSupported"; + const string SPOOL_REG_PRINTENDTIME = "printEndTime"; + const string SPOOL_REG_PRINTERNAME = "printerName"; + const string SPOOL_REG_PRINTFORMNAME = "printFormName"; + const string SPOOL_REG_PRINTKEEPPRINTEDJOBS = "printKeepPrintedJobs"; + const string SPOOL_REG_PRINTLANGUAGE = "printLanguage"; + const string SPOOL_REG_PRINTMACADDRESS = "printMACAddress"; + const string SPOOL_REG_PRINTMAXCOPIES = "printMaxCopies"; + const string SPOOL_REG_PRINTMAXRESOLUTIONSUPPORTED = "printMaxResolutionSupported"; + const string SPOOL_REG_PRINTMAXXEXTENT = "printMaxXExtent"; + const string SPOOL_REG_PRINTMAXYEXTENT = "printMaxYExtent"; + const string SPOOL_REG_PRINTMEDIAREADY = "printMediaReady"; + const string SPOOL_REG_PRINTMEDIASUPPORTED = "printMediaSupported"; + const string SPOOL_REG_PRINTMEMORY = "printMemory"; + const string SPOOL_REG_PRINTMINXEXTENT = "printMinXExtent"; + const string SPOOL_REG_PRINTMINYEXTENT = "printMinYExtent"; + const string SPOOL_REG_PRINTNETWORKADDRESS = "printNetworkAddress"; + const string SPOOL_REG_PRINTNOTIFY = "printNotify"; + const string SPOOL_REG_PRINTNUMBERUP = "printNumberUp"; + const string SPOOL_REG_PRINTORIENTATIONSSUPPORTED = "printOrientationsSupported"; + const string SPOOL_REG_PRINTOWNER = "printOwner"; + const string SPOOL_REG_PRINTPAGESPERMINUTE = "printPagesPerMinute"; + const string SPOOL_REG_PRINTRATE = "printRate"; + const string SPOOL_REG_PRINTRATEUNIT = "printRateUnit"; + const string SPOOL_REG_PRINTSEPARATORFILE = "printSeparatorFile"; + const string SPOOL_REG_PRINTSHARENAME = "printShareName"; + const string SPOOL_REG_PRINTSPOOLING = "printSpooling"; + const string SPOOL_REGVAL_PRINTWHILESPOOLING = "PrintWhileSpooling"; + const string SPOOL_REGVAL_PRINTAFTERSPOOLED = "PrintAfterSpooled"; + const string SPOOL_REGVAL_PRINTDIRECT = "PrintDirect"; + const string SPOOL_REG_PRINTSTAPLINGSUPPORTED = "printStaplingSupported"; + const string SPOOL_REG_PRINTSTARTTIME = "printStartTime"; + const string SPOOL_REG_PRINTSTATUS = "printStatus"; + const string SPOOL_REG_PRIORITY = "priority"; + const string SPOOL_REG_SERVERNAME = "serverName"; + const string SPOOL_REG_SHORTSERVERNAME = "shortServerName"; + const string SPOOL_REG_UNCNAME = "uNCName"; + const string SPOOL_REG_URL = "url"; + const string SPOOL_REG_VERSIONNUMBER = "versionNumber"; + [noopnum,noprint,public] WERROR _spoolss_GetPrinterData( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 value_name[], [in] uint32 offered, - [out,ref] spoolss_PrinterDataType *type, - [out] DATA_BLOB data, + [out,ref] winreg_Type *type, + [out,ref] DATA_BLOB *data, [out,ref] uint32 *needed ); [noopnum,noprint,public] void __spoolss_GetPrinterData( - [in] spoolss_PrinterDataType type, - [out,switch_is(type)] spoolss_PrinterData data + [in] winreg_Type type, + [out,ref,switch_is(type)] spoolss_PrinterData *data ); [nopull,nopush,public] WERROR spoolss_GetPrinterData( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 value_name[], [in] uint32 offered, - [out,ref] spoolss_PrinterDataType *type, - [out,subcontext(4),subcontext_size(offered),switch_is(*type)] spoolss_PrinterData data, + [out,ref] winreg_Type *type, + [out,ref,subcontext(4),subcontext_size(offered),switch_is(*type)] spoolss_PrinterData *data, [out,ref] uint32 *needed ); @@ -1345,18 +1627,18 @@ import "misc.idl", "security.idl", "winreg.idl"; [noopnum,nopull,noprint,public] WERROR _spoolss_SetPrinterData( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 value_name[], - [in] spoolss_PrinterDataType type, + [in] winreg_Type type, [in] DATA_BLOB data, [in] uint32 _offered ); [noopnum,nopull,noprint,public] void __spoolss_SetPrinterData( - [in] spoolss_PrinterDataType type, - [out,switch_is(type)] spoolss_PrinterData data + [in] winreg_Type type, + [out,ref,switch_is(type)] spoolss_PrinterData *data ); [nopush] WERROR spoolss_SetPrinterData( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 value_name[], - [in] spoolss_PrinterDataType type, + [in] winreg_Type type, [in,subcontext(4),switch_is(type)] spoolss_PrinterData data, [in,value(ndr_size_spoolss_PrinterData(&data,type,ndr->iconv_convenience,flags))] uint32 _offered ); @@ -1415,7 +1697,8 @@ import "misc.idl", "security.idl", "winreg.idl"; [relative] nstring *mui_dll; uint32 ressource_id; [relative] nstring *display_name; - uint32 lang_id; + uint16 lang_id; + uint16 unused; } spoolss_FormInfo2; typedef [nodiscriminant,relative_base,public,gensize] union { @@ -1509,6 +1792,16 @@ import "misc.idl", "security.idl", "winreg.idl"; [out,ref] uint32 *needed ); + /* + * Special strings for the OpenPrinter() call. See the MSDN DDK + * docs on the XcvDataPort() for more details. + */ + + const string SPL_LOCAL_PORT = "Local Port"; + const string SPL_TCPIP_PORT = "Standard TCP/IP Port"; + const string SPL_XCV_MONITOR_LOCALMON = ",XcvMonitor Local Port"; + const string SPL_XCV_MONITOR_TCPMON = ",XcvMonitor Standard TCP/IP Port"; + typedef [public,gensize] struct { [relative] nstring *port_name; } spoolss_PortInfo1; @@ -1657,7 +1950,10 @@ import "misc.idl", "security.idl", "winreg.idl"; /******************/ /* Function: 0x28 */ - [todo] WERROR spoolss_CreatePrinterIC( + WERROR spoolss_CreatePrinterIC( + [in,ref] policy_handle *handle, + [out,ref] policy_handle *gdi_handle, + [in,ref] spoolss_DevmodeContainer *devmode_ctr ); /******************/ @@ -1667,7 +1963,8 @@ import "misc.idl", "security.idl", "winreg.idl"; /******************/ /* Function: 0x2a */ - [todo] WERROR spoolss_DeletePrinterIC( + WERROR spoolss_DeletePrinterIC( + [in,out,ref] policy_handle *gdi_handle ); /******************/ @@ -1890,40 +2187,75 @@ import "misc.idl", "security.idl", "winreg.idl"; [todo] WERROR spoolss_ResetPrinterEx( ); - typedef [enum16bit] enum { - SPOOLSS_FIELD_SERVER_NAME = 0, - SPOOLSS_FIELD_PRINTER_NAME = 1, - SPOOLSS_FIELD_SHARE_NAME = 2, - SPOOLSS_FIELD_PORT_NAME = 3, - SPOOLSS_FIELD_DRIVER_NAME = 4, - SPOOLSS_FIELD_COMMENT = 5, - SPOOLSS_FIELD_LOCATION = 6, - SPOOLSS_FIELD_DEVMODE = 7, - SPOOLSS_FIELD_SEPFILE = 8, - SPOOLSS_FIELD_PRINT_PROCESSOR = 9, - SPOOLSS_FIELD_PARAMETERS = 10, - SPOOLSS_FIELD_DATATYPE = 11, - SPOOLSS_FIELD_SECURITY_DESCRIPTOR=12, - SPOOLSS_FIELD_ATTRIBUTES = 13, - SPOOLSS_FIELD_PRIORITY = 14, - SPOOLSS_FIELD_DEFAULT_PRIORITY = 15, - SPOOLSS_FIELD_START_TIME = 16, - SPOOLSS_FIELD_UNTIL_TIME = 17, - SPOOLSS_FIELD_STATUS = 18, - SPOOLSS_FIELD_STATUS_STRING = 19, - SPOOLSS_FIELD_CJOBS = 20, - SPOOLSS_FIELD_AVERAGE_PPM = 21, - SPOOLSS_FIELD_TOTAL_PAGES = 22, - SPOOLSS_FIELD_PAGES_PRINTED = 23, - SPOOLSS_FIELD_TOTAL_BYTES = 24, - SPOOLSS_FIELD_BYTES_PRINTED = 25 - } spoolss_Field; + typedef [enum16bit,public] enum { + JOB_NOTIFY_FIELD_PRINTER_NAME = 0x00, + JOB_NOTIFY_FIELD_MACHINE_NAME = 0x01, + JOB_NOTIFY_FIELD_PORT_NAME = 0x02, + JOB_NOTIFY_FIELD_USER_NAME = 0x03, + JOB_NOTIFY_FIELD_NOTIFY_NAME = 0x04, + JOB_NOTIFY_FIELD_DATATYPE = 0x05, + JOB_NOTIFY_FIELD_PRINT_PROCESSOR = 0x06, + JOB_NOTIFY_FIELD_PARAMETERS = 0x07, + JOB_NOTIFY_FIELD_DRIVER_NAME = 0x08, + JOB_NOTIFY_FIELD_DEVMODE = 0x09, + JOB_NOTIFY_FIELD_STATUS = 0x0a, + JOB_NOTIFY_FIELD_STATUS_STRING = 0x0b, + JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR = 0x0c, + JOB_NOTIFY_FIELD_DOCUMENT = 0x0d, + JOB_NOTIFY_FIELD_PRIORITY = 0x0e, + JOB_NOTIFY_FIELD_POSITION = 0x0f, + JOB_NOTIFY_FIELD_SUBMITTED = 0x10, + JOB_NOTIFY_FIELD_START_TIME = 0x11, + JOB_NOTIFY_FIELD_UNTIL_TIME = 0x12, + JOB_NOTIFY_FIELD_TIME = 0x13, + JOB_NOTIFY_FIELD_TOTAL_PAGES = 0x14, + JOB_NOTIFY_FIELD_PAGES_PRINTED = 0x15, + JOB_NOTIFY_FIELD_TOTAL_BYTES = 0x16, + JOB_NOTIFY_FIELD_BYTES_PRINTED = 0x17 + } spoolss_JobNotifyField; + + typedef [enum16bit,public] enum { + PRINTER_NOTIFY_FIELD_SERVER_NAME = 0x00, + PRINTER_NOTIFY_FIELD_PRINTER_NAME = 0x01, + PRINTER_NOTIFY_FIELD_SHARE_NAME = 0x02, + PRINTER_NOTIFY_FIELD_PORT_NAME = 0x03, + PRINTER_NOTIFY_FIELD_DRIVER_NAME = 0x04, + PRINTER_NOTIFY_FIELD_COMMENT = 0x05, + PRINTER_NOTIFY_FIELD_LOCATION = 0x06, + PRINTER_NOTIFY_FIELD_DEVMODE = 0x07, + PRINTER_NOTIFY_FIELD_SEPFILE = 0x08, + PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR = 0x09, + PRINTER_NOTIFY_FIELD_PARAMETERS = 0x0a, + PRINTER_NOTIFY_FIELD_DATATYPE = 0x0b, + PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR = 0x0c, + PRINTER_NOTIFY_FIELD_ATTRIBUTES = 0x0d, + PRINTER_NOTIFY_FIELD_PRIORITY = 0x0e, + PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY = 0x0f, + PRINTER_NOTIFY_FIELD_START_TIME = 0x10, + PRINTER_NOTIFY_FIELD_UNTIL_TIME = 0x11, + PRINTER_NOTIFY_FIELD_STATUS = 0x12, + PRINTER_NOTIFY_FIELD_STATUS_STRING = 0x13, + PRINTER_NOTIFY_FIELD_CJOBS = 0x14, + PRINTER_NOTIFY_FIELD_AVERAGE_PPM = 0x15, + PRINTER_NOTIFY_FIELD_TOTAL_PAGES = 0x16, + PRINTER_NOTIFY_FIELD_PAGES_PRINTED = 0x17, + PRINTER_NOTIFY_FIELD_TOTAL_BYTES = 0x18, + PRINTER_NOTIFY_FIELD_BYTES_PRINTED = 0x19, + PRINTER_NOTIFY_FIELD_OBJECT_GUID = 0x1a, + PRINTER_NOTIFY_FIELD_FRIENDLY_NAME = 0x1b + } spoolss_PrintNotifyField; typedef [enum16bit] enum { - SPOOLSS_NOTIFY_PRINTER = 0, - SPOOLSS_NOTIFY_JOB = 1 + PRINTER_NOTIFY_TYPE = 0x00, + JOB_NOTIFY_TYPE = 0x01 } spoolss_NotifyType; + typedef [nodiscriminant,noprint] union { + [case(PRINTER_NOTIFY_TYPE)] uint16 field; + [case(JOB_NOTIFY_TYPE)] uint16 field; + [default] uint16 field; + } spoolss_Field; + /******************/ /* Function: 0x41 */ typedef struct { @@ -1932,7 +2264,7 @@ import "misc.idl", "security.idl", "winreg.idl"; uint32 u2; uint32 u3; uint32 count; - [size_is(count)] spoolss_Field *fields; + [size_is(count),switch_is(type)] spoolss_Field *fields; } spoolss_NotifyOptionType; typedef [bitmap32bit] bitmap { @@ -1981,7 +2313,7 @@ import "misc.idl", "security.idl", "winreg.idl"; typedef struct { spoolss_NotifyType type; - spoolss_Field field; + [switch_is(type)] spoolss_Field field; spoolss_NotifyTable variable_type; uint32 job_id; [switch_is(variable_type)] spoolss_NotifyData data; @@ -2163,8 +2495,8 @@ import "misc.idl", "security.idl", "winreg.idl"; [out,size_is(value_offered/2),charset(UTF16)] uint16 value_name[], [in] uint32 value_offered, [out,ref] uint32 *value_needed, - [out,ref] uint32 *printerdata_type, - [out,ref] DATA_BLOB *buffer, + [out,ref] winreg_Type *type, + [out,ref,size_is(data_offered),flag(LIBNDR_PRINT_ARRAY_HEX)] uint8 *data, [in] uint32 data_offered, [out,ref] uint32 *data_needed ); @@ -2193,45 +2525,98 @@ import "misc.idl", "security.idl", "winreg.idl"; /******************/ /* Function: 0x4d */ - WERROR spoolss_SetPrinterDataEx( + [noopnum,nopull,noprint,public] WERROR _spoolss_SetPrinterDataEx( [in,ref] policy_handle *handle, - [in] [string,charset(UTF16)] uint16 key_name[], - [in] [string,charset(UTF16)] uint16 value_name[], - [in] uint32 type, - [in,ref] [size_is(offered)] uint8 *buffer, - [in] uint32 offered + [in] [string,charset(UTF16)] uint16 key_name[], + [in] [string,charset(UTF16)] uint16 value_name[], + [in] winreg_Type type, + [in] DATA_BLOB data, + [in] uint32 _offered + ); + [noopnum,nopull,noprint,public] void __spoolss_SetPrinterDataEx( + [in] winreg_Type type, + [out,ref,switch_is(type)] spoolss_PrinterData *data + ); + [nopush] WERROR spoolss_SetPrinterDataEx( + [in,ref] policy_handle *handle, + [in] [string,charset(UTF16)] uint16 key_name[], + [in] [string,charset(UTF16)] uint16 value_name[], + [in] winreg_Type type, + [in,subcontext(4),switch_is(type)] spoolss_PrinterData data, + [in,value(ndr_size_spoolss_PrinterData(&data,type,ndr->iconv_convenience,flags))] uint32 _offered ); /******************/ /* Function: 0x4e */ - WERROR spoolss_GetPrinterDataEx( + [noopnum,noprint,public] WERROR _spoolss_GetPrinterDataEx( + [in,ref] policy_handle *handle, + [in] [string,charset(UTF16)] uint16 key_name[], + [in] [string,charset(UTF16)] uint16 value_name[], + [in] uint32 offered, + [out,ref] winreg_Type *type, + [out,ref] DATA_BLOB *data, + [out,ref] uint32 *needed + ); + [noopnum,noprint,public] void __spoolss_GetPrinterDataEx( + [in] winreg_Type type, + [out,ref,switch_is(type)] spoolss_PrinterData *data + ); + [nopull,nopush,public] WERROR spoolss_GetPrinterDataEx( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 key_name[], [in] [string,charset(UTF16)] uint16 value_name[], - [out,ref] uint32 *type, - [out,ref] [size_is(offered)] uint8 *buffer, [in] uint32 offered, + [out,ref] winreg_Type *type, + [out,ref,subcontext(4),subcontext_size(offered),switch_is(*type)] spoolss_PrinterData *data, [out,ref] uint32 *needed ); /******************/ /* Function: 0x4f */ - [public] WERROR spoolss_EnumPrinterDataEx( + + typedef [relative_base,public,gensize] struct { + [relative] nstring *value_name; + [value(2*strlen_m_term(value_name))] uint32 value_name_len; + winreg_Type type; + [relative,switch_is(type),subcontext(0),subcontext_size(r->data_length)] spoolss_PrinterData *data; + [value(ndr_size_spoolss_PrinterData(data, type, ndr->iconv_convenience, ndr->flags))] uint32 data_length; + } spoolss_PrinterEnumValues; + + [public,noopnum,noprint] WERROR _spoolss_EnumPrinterDataEx( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 key_name[], - [out,ref] [size_is(offered)] uint8 *buffer, - [in] uint32 offered, + [out] DATA_BLOB info, + [in] uint32 offered, [out,ref] uint32 *needed, [out,ref] uint32 *count ); + [public,noopnum,noprint] void __spoolss_EnumPrinterDataEx( + [in] uint32 count, + [out] spoolss_PrinterEnumValues info[count] + ); + [nopull,nopush] WERROR spoolss_EnumPrinterDataEx( + [in,ref] policy_handle *handle, + [in] [string,charset(UTF16)] uint16 key_name[], + [in] uint32 offered, + [out,ref] uint32 *count, + [out,ref,size_is(,*count)] spoolss_PrinterEnumValues **info, + [out,ref] uint32 *needed + ); + + typedef [nodiscriminant] union { + [case(0)]; + [case(1)]; + [default] nstring_array string_array; + } spoolss_KeyNames; /******************/ /* Function: 0x50 */ [public] WERROR spoolss_EnumPrinterKey( [in, ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 key_name[], - [out,ref] [size_is(key_buffer_size/2)] uint16 *key_buffer, - [in] uint32 key_buffer_size, + [out,ref] uint32 *_ndr_size, + [out,ref,subcontext(0),subcontext_size(*_ndr_size*2),switch_is(*_ndr_size)] spoolss_KeyNames *key_buffer, + [in] uint32 offered, [out,ref] uint32 *needed ); @@ -2393,4 +2778,94 @@ import "misc.idl", "security.idl", "winreg.idl"; /* Function: 0x5f */ [todo] WERROR spoolss_5f( ); + + /******************/ + /* Function: 0x60 */ + [todo] WERROR spoolss_60( + ); + + /******************/ + /* Function: 0x61 */ + [todo] WERROR spoolss_61( + ); + + /******************/ + /* Function: 0x62 */ + [todo] WERROR spoolss_62( + ); + + /******************/ + /* Function: 0x63 */ + [todo] WERROR spoolss_63( + ); + + /******************/ + /* Function: 0x64 */ + [todo] WERROR spoolss_64( + ); + + /******************/ + /* Function: 0x65 */ + [todo] WERROR spoolss_65( + ); + + /******************/ + /* Function: 0x66 */ + typedef struct { + GUID core_driver_guid; + NTTIME driver_date; + hyper driver_version; + [charset(UTF8)] uint8 formname[520]; + } spoolss_CorePrinterDriver; + + WERROR spoolss_GetCorePrinterDrivers( + [in,unique] [string,charset(UTF16)] uint16 *servername, + [in,ref] [string,charset(UTF16)] uint16 *architecture, + [in] uint32 core_driver_size, + [in,size_is(core_driver_size)] [charset(UTF16)] uint16 *core_driver_dependencies, + [in] uint32 core_printer_driver_count, + [out,size_is(core_printer_driver_count)] spoolss_CorePrinterDriver *core_printer_drivers + ); + + /******************/ + /* Function: 0x67 */ + [todo] WERROR spoolss_67( + ); + + /******************/ + /* Function: 0x68 */ + WERROR spoolss_GetPrinterDriverPackagePath( + [in,unique] [string,charset(UTF16)] uint16 *servername, + [in,ref] [string,charset(UTF16)] uint16 *architecture, + [in,unique] [string,charset(UTF16)] uint16 *language, + [in,ref] [string,charset(UTF16)] uint16 *package_id, + [in,out,unique,size_is(driver_package_cab_size)] [charset(UTF16)] uint16 *driver_package_cab, + [in] uint32 driver_package_cab_size, + [out,ref] uint32 *required + ); + + /******************/ + /* Function: 0x69 */ + [todo] WERROR spoolss_69( + ); + + /******************/ + /* Function: 0x6a */ + [todo] WERROR spoolss_6a( + ); + + /******************/ + /* Function: 0x6b */ + [todo] WERROR spoolss_6b( + ); + + /******************/ + /* Function: 0x6c */ + [todo] WERROR spoolss_6c( + ); + + /******************/ + /* Function: 0x6d */ + [todo] WERROR spoolss_6d( + ); }