#include "idl_types.h" /* spoolss interface definitions */ import "misc.idl", "security.idl", "winreg.idl"; [ uuid("12345678-1234-abcd-ef00-0123456789ab"), version(1.0), endpoint("ncacn_np:[\\pipe\\spoolss]"), pointer_default(unique), helpstring("Spooler SubSystem"), helper("../librpc/ndr/ndr_spoolss_buf.h") ] interface spoolss { typedef [v1_enum] enum winreg_Type winreg_Type; typedef [gensize] struct { uint16 year; uint16 month; uint16 day_of_week; uint16 day; uint16 hour; uint16 minute; uint16 second; uint16 millisecond; } spoolss_Time; typedef struct { [value(ndr_size_spoolss_Time(time, ndr->iconv_convenience, ndr->flags))] uint32 size; [unique] spoolss_Time *time; } spoolss_TimeCtr; typedef enum { PROCESSOR_ARCHITECTURE_INTEL = 0x0000, PROCESSOR_ARCHITECTURE_IA64 = 0x0006, PROCESSOR_ARCHITECTURE_AMD64 = 0x0009 } spoolss_ProcessorArchitecture; typedef [v1_enum] enum { PROCESSOR_INTEL_386 = 0x00000182, PROCESSOR_INTEL_486 = 0x000001E6, PROCESSOR_INTEL_PENTIUM = 0x0000024A, PROCESSOR_INTEL_IA64 = 0x00000898, PROCESSOR_AMD_X8664 = 0x000022A0 } spoolss_ProcessorType; typedef [v1_enum] enum { /* Windows 95, Windows 98, Windows Me, Windows NT4 */ SPOOLSS_MAJOR_VERSION_NT4_95_98_ME = 0x00000004, /* Windows 2000, Windows 2003, Windows XP */ SPOOLSS_MAJOR_VERSION_2000_2003_XP = 0x00000005, /* Windows Vista, Windows 2008 */ SPOOLSS_MAJOR_VERSION_2008_VISTA = 0x00000006 } spoolss_MajorVersion; typedef [v1_enum] enum { /* Windows 2008, Windows Vista, Windows 2000, Windows NT4, Windows 95 */ SPOOLSS_MINOR_VERSION_0 = 0x00000000, /* Windows XP */ SPOOLSS_MINOR_VERSION_XP = 0x00000001, /* Windows 2003, Windows XP x64 */ SPOOLSS_MINOR_VERSION_2003_XP64 = 0x00000002, /* Windows 98 */ SPOOLSS_MINOR_VERSION_98 = 0x0000000a, /* Windows Me */ SPOOLSS_MINOR_VERSION_ME = 0x0000005a } spoolss_MinorVersion; const int PRINTER_STATUS_OK = 0x00000000; typedef bitmap { PRINTER_STATUS_PAUSED = 0x00000001, PRINTER_STATUS_ERROR = 0x00000002, PRINTER_STATUS_PENDING_DELETION = 0x00000004, PRINTER_STATUS_PAPER_JAM = 0x00000008, PRINTER_STATUS_PAPER_OUT = 0x00000010, PRINTER_STATUS_MANUAL_FEED = 0x00000020, PRINTER_STATUS_PAPER_PROBLEM = 0x00000040, PRINTER_STATUS_OFFLINE = 0x00000080, PRINTER_STATUS_IO_ACTIVE = 0x00000100, PRINTER_STATUS_BUSY = 0x00000200, PRINTER_STATUS_PRINTING = 0x00000400, PRINTER_STATUS_OUTPUT_BIN_FULL = 0x00000800, PRINTER_STATUS_NOT_AVAILABLE = 0x00001000, PRINTER_STATUS_WAITING = 0x00002000, PRINTER_STATUS_PROCESSING = 0x00004000, PRINTER_STATUS_INITIALIZING = 0x00008000, PRINTER_STATUS_WARMING_UP = 0x00010000, PRINTER_STATUS_TONER_LOW = 0x00020000, PRINTER_STATUS_NO_TONER = 0x00040000, PRINTER_STATUS_PAGE_PUNT = 0x00080000, PRINTER_STATUS_USER_INTERVENTION= 0x00100000, PRINTER_STATUS_OUT_OF_MEMORY = 0x00200000, PRINTER_STATUS_DOOR_OPEN = 0x00400000, PRINTER_STATUS_SERVER_UNKNOWN = 0x00800000, PRINTER_STATUS_POWER_SAVE = 0x01000000 } spoolss_PrinterStatus; /* JOB status codes. */ const int JOB_STATUS_QUEUED = 0x0000; typedef [bitmap32bit] bitmap { JOB_STATUS_PAUSED = 0x00000001, JOB_STATUS_ERROR = 0x00000002, JOB_STATUS_DELETING = 0x00000004, JOB_STATUS_SPOOLING = 0x00000008, JOB_STATUS_PRINTING = 0x00000010, JOB_STATUS_OFFLINE = 0x00000020, JOB_STATUS_PAPEROUT = 0x00000040, JOB_STATUS_PRINTED = 0x00000080, JOB_STATUS_DELETED = 0x00000100, JOB_STATUS_BLOCKED_DEVQ = 0x00000200, JOB_STATUS_USER_INTERVENTION = 0x00000400, JOB_STATUS_RESTART = 0x00000800, JOB_STATUS_COMPLETE = 0x00001000 } spoolss_JobStatus; typedef [public,gensize] struct { [relative] nstring *printername; [relative] nstring *servername; uint32 cjobs; uint32 total_jobs; uint32 total_bytes; spoolss_Time time; uint32 global_counter; uint32 total_pages; uint32 version; uint32 free_build; uint32 spooling; uint32 max_spooling; uint32 session_counter; uint32 num_error_out_of_paper; uint32 num_error_not_ready; spoolss_JobStatus job_error; uint32 number_of_processors; spoolss_ProcessorType processor_type; uint32 high_part_total_bytes; uint32 change_id; WERROR last_error; spoolss_PrinterStatus status; uint32 enumerate_network_printers; uint32 c_setprinter; spoolss_ProcessorArchitecture processor_architecture; uint16 processor_level; uint32 ref_ic; uint32 reserved2; uint32 reserved3; } spoolss_PrinterInfo0; typedef [bitmap32bit] bitmap { DEVMODE_ORIENTATION = 0x00000001, DEVMODE_PAPERSIZE = 0x00000002, DEVMODE_PAPERLENGTH = 0x00000004, DEVMODE_PAPERWIDTH = 0x00000008, DEVMODE_SCALE = 0x00000010, DEVMODE_POSITION = 0x00000020, DEVMODE_NUP = 0x00000040, DEVMODE_COPIES = 0x00000100, DEVMODE_DEFAULTSOURCE = 0x00000200, DEVMODE_PRINTQUALITY = 0x00000400, DEVMODE_COLOR = 0x00000800, DEVMODE_DUPLEX = 0x00001000, DEVMODE_YRESOLUTION = 0x00002000, DEVMODE_TTOPTION = 0x00004000, DEVMODE_COLLATE = 0x00008000, DEVMODE_FORMNAME = 0x00010000, DEVMODE_LOGPIXELS = 0x00020000, DEVMODE_BITSPERPEL = 0x00040000, DEVMODE_PELSWIDTH = 0x00080000, DEVMODE_PELSHEIGHT = 0x00100000, DEVMODE_DISPLAYFLAGS = 0x00200000, DEVMODE_DISPLAYFREQUENCY = 0x00400000, DEVMODE_ICMMETHOD = 0x00800000, DEVMODE_ICMINTENT = 0x01000000, DEVMODE_MEDIATYPE = 0x02000000, DEVMODE_DITHERTYPE = 0x04000000, DEVMODE_PANNINGWIDTH = 0x08000000, 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; typedef [public,gensize] struct { [charset(UTF16)] uint16 devicename[32]; spoolss_DeviceModeSpecVersion specversion; uint16 driverversion; uint16 size; [value(r->driverextra_data.length)] uint16 __driverextra_length; spoolss_DeviceModeFields fields; spoolss_DeviceModeOrientation orientation; spoolss_DeviceModePaperSize papersize; uint16 paperlength; uint16 paperwidth; uint16 scale; uint16 copies; spoolss_DeviceModeDefaultSource defaultsource; spoolss_DeviceModePrintQuality printquality; spoolss_DeviceModeColor color; spoolss_DeviceModeDuplex duplex; uint16 yresolution; spoolss_DeviceModeTTOption ttoption; spoolss_DeviceModeCollate collate; [charset(UTF16)] uint16 formname[32]; 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; /* reserved */ uint32 panningheight; /* reserved */ [subcontext_size(__driverextra_length),subcontext(0),flag(NDR_REMAINING)] DATA_BLOB driverextra_data; } spoolss_DeviceMode; typedef [public] bitmap { PRINTER_ENUM_DEFAULT = 0x00000001, PRINTER_ENUM_LOCAL = 0x00000002, PRINTER_ENUM_CONNECTIONS = 0x00000004, PRINTER_ENUM_FAVORITE = 0x00000004, PRINTER_ENUM_NAME = 0x00000008, PRINTER_ENUM_REMOTE = 0x00000010, PRINTER_ENUM_SHARED = 0x00000020, PRINTER_ENUM_NETWORK = 0x00000040, PRINTER_ENUM_EXPAND = 0x00004000, PRINTER_ENUM_CONTAINER = 0x00008000, PRINTER_ENUM_ICON1 = 0x00010000, PRINTER_ENUM_ICON2 = 0x00020000, PRINTER_ENUM_ICON3 = 0x00040000, PRINTER_ENUM_ICON4 = 0x00080000, PRINTER_ENUM_ICON5 = 0x00100000, PRINTER_ENUM_ICON6 = 0x00200000, PRINTER_ENUM_ICON7 = 0x00400000, PRINTER_ENUM_ICON8 = 0x00800000, PRINTER_ENUM_HIDE = 0x01000000 } spoolss_EnumPrinterFlags; const int PRINTER_ENUM_ICONMASK = (PRINTER_ENUM_ICON1 | PRINTER_ENUM_ICON2 | PRINTER_ENUM_ICON3 | PRINTER_ENUM_ICON4 | PRINTER_ENUM_ICON5 | PRINTER_ENUM_ICON6 | PRINTER_ENUM_ICON7 | PRINTER_ENUM_ICON8); /* 0x00ff0000 */ typedef bitmap { PRINTER_ATTRIBUTE_QUEUED = 0x00000001, PRINTER_ATTRIBUTE_DIRECT = 0x00000002, PRINTER_ATTRIBUTE_DEFAULT = 0x00000004, PRINTER_ATTRIBUTE_SHARED = 0x00000008, PRINTER_ATTRIBUTE_NETWORK = 0x00000010, PRINTER_ATTRIBUTE_HIDDEN = 0x00000020, PRINTER_ATTRIBUTE_LOCAL = 0x00000040, PRINTER_ATTRIBUTE_ENABLE_DEVQ = 0x00000080, PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS = 0x00000100, PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST = 0x00000200, PRINTER_ATTRIBUTE_WORK_OFFLINE = 0x00000400, PRINTER_ATTRIBUTE_ENABLE_BIDI = 0x00000800, PRINTER_ATTRIBUTE_RAW_ONLY = 0x00001000, PRINTER_ATTRIBUTE_PUBLISHED = 0x00002000, PRINTER_ATTRIBUTE_FAX = 0x00004000, PRINTER_ATTRIBUTE_TS = 0x00008000 } spoolss_PrinterAttributes; 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; [relative] nstring *portname; [relative] nstring *drivername; [relative] nstring *comment; [relative] nstring *location; [relative,subcontext(0)] spoolss_DeviceMode *devmode; [relative] nstring *sepfile; [relative] nstring *printprocessor; [relative] nstring *datatype; [relative] nstring *parameters; [relative,subcontext(0)] security_descriptor *secdesc; spoolss_PrinterAttributes attributes; [range(0,99)] uint32 priority; uint32 defaultpriority; uint32 starttime; uint32 untiltime; spoolss_PrinterStatus status; uint32 cjobs; uint32 averageppm; } spoolss_PrinterInfo2; typedef [public,gensize] struct { [relative,subcontext(0)] security_descriptor *secdesc; } spoolss_PrinterInfo3; typedef [public,gensize] struct { [relative] nstring *printername; [relative] nstring *servername; spoolss_PrinterAttributes attributes; } spoolss_PrinterInfo4; typedef [public,gensize] struct { [relative] nstring *printername; [relative] nstring *portname; spoolss_PrinterAttributes attributes; uint32 device_not_selected_timeout; uint32 transmission_retry_timeout; } spoolss_PrinterInfo5; typedef [public,gensize] struct { spoolss_PrinterStatus status; } spoolss_PrinterInfo6; typedef bitmap { DSPRINT_PUBLISH = 0x00000001, DSPRINT_UPDATE = 0x00000002, DSPRINT_UNPUBLISH = 0x00000004, DSPRINT_REPUBLISH = 0x00000008, DSPRINT_PENDING = 0x80000000 } spoolss_DsPrintAction; typedef [public,gensize] struct { [relative] nstring *guid; /* text form of printer guid */ spoolss_DsPrintAction action; } spoolss_PrinterInfo7; typedef struct { [relative,subcontext(0)] spoolss_DeviceMode *devmode; } spoolss_DeviceModeInfo; typedef [nodiscriminant,relative_base,public,gensize] union { [case(0)] spoolss_PrinterInfo0 info0; [case(1)] spoolss_PrinterInfo1 info1; [case(2)] spoolss_PrinterInfo2 info2; [case(3)] spoolss_PrinterInfo3 info3; [case(4)] spoolss_PrinterInfo4 info4; [case(5)] spoolss_PrinterInfo5 info5; [case(6)] spoolss_PrinterInfo6 info6; [case(7)] spoolss_PrinterInfo7 info7; [case(8)] spoolss_DeviceModeInfo info8; [case(9)] spoolss_DeviceModeInfo info9; [default]; } spoolss_PrinterInfo; /******************/ /* Function: 0x00 */ /* we are using this as internal parsing code */ [public,noopnum,noprint] WERROR _spoolss_EnumPrinters( [in] spoolss_EnumPrinterFlags flags, [in,unique] [string,charset(UTF16)] uint16 *server, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out,ref] uint32 *needed, [out,ref] uint32 *count ); [public,noopnum,noprint] void __spoolss_EnumPrinters( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_PrinterInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumPrinters( [in] spoolss_EnumPrinterFlags flags, [in,unique] [string,charset(UTF16)] uint16 *server, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, /* what we have here is a subcontext containing an array of no discriminant unions * and the array has no size in front */ [out,ref] uint32 *count, [out,ref,switch_is(level),size_is(,*count)] spoolss_PrinterInfo **info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x01 */ typedef struct { [value(_ndr_size_spoolss_DeviceMode(devmode, ndr->iconv_convenience, ndr->flags))] uint32 _ndr_size; [subcontext(4),subcontext_size(_ndr_size)] spoolss_DeviceMode *devmode; } spoolss_DevmodeContainer; [public] WERROR spoolss_OpenPrinter( [in,unique] [string,charset(UTF16)] uint16 *printername, [in,unique] [string,charset(UTF16)] uint16 *datatype, [in] spoolss_DevmodeContainer devmode_ctr, [in] spoolss_AccessRights access_mask, [out,ref] policy_handle *handle ); /******************/ /* Function: 0x02 */ typedef [public,gensize] struct { uint32 job_id; [relative] nstring *printer_name; [relative] nstring *server_name; [relative] nstring *user_name; [relative] nstring *document_name; [relative] nstring *data_type; [relative] nstring *text_status; spoolss_JobStatus status; [range(0,99)] uint32 priority; uint32 position; uint32 total_pages; uint32 pages_printed; spoolss_Time submitted; } spoolss_JobInfo1; typedef [public,gensize] struct { uint32 job_id; [relative] nstring *printer_name; [relative] nstring *server_name; [relative] nstring *user_name; [relative] nstring *document_name; [relative] nstring *notify_name; [relative] nstring *data_type; [relative] nstring *print_processor; [relative] nstring *parameters; [relative] nstring *driver_name; [relative] spoolss_DeviceMode *devmode; [relative] nstring *text_status; [relative] security_descriptor *secdesc; spoolss_JobStatus status; [range(0,99)] uint32 priority; uint32 position; uint32 start_time; uint32 until_time; uint32 total_pages; uint32 size; spoolss_Time submitted; uint32 time; uint32 pages_printed; } spoolss_JobInfo2; typedef [public,gensize] struct { uint32 job_id; uint32 next_job_id; uint32 reserved; } spoolss_JobInfo3; typedef [public,gensize] struct { uint32 job_id; [relative] nstring *printer_name; [relative] nstring *server_name; [relative] nstring *user_name; [relative] nstring *document_name; [relative] nstring *notify_name; [relative] nstring *data_type; [relative] nstring *print_processor; [relative] nstring *parameters; [relative] nstring *driver_name; [relative] spoolss_DeviceMode *devmode; [relative] nstring *text_status; [relative] security_descriptor *secdesc; spoolss_JobStatus status; [range(0,99)] uint32 priority; uint32 position; uint32 start_time; uint32 until_time; uint32 total_pages; uint32 size; spoolss_Time submitted; uint32 time; uint32 pages_printed; uint32 size_high; } spoolss_JobInfo4; typedef [nodiscriminant,relative_base,public,gensize] union { [case(1)] spoolss_JobInfo1 info1; [case(2)] spoolss_JobInfo2 info2; [case(3)] spoolss_JobInfo3 info3; [case(4)] spoolss_JobInfo4 info4; [default]; } spoolss_JobInfo; typedef struct { uint32 job_id; [string,charset(UTF16)] uint16 *printer_name; [string,charset(UTF16)] uint16 *server_name; [string,charset(UTF16)] uint16 *user_name; [string,charset(UTF16)] uint16 *document_name; [string,charset(UTF16)] uint16 *data_type; [string,charset(UTF16)] uint16 *text_status; spoolss_JobStatus status; [range(0,99)] uint32 priority; uint32 position; uint32 total_pages; uint32 pages_printed; spoolss_Time submitted; } spoolss_SetJobInfo1; typedef struct { uint32 job_id; [string,charset(UTF16)] uint16 *printer_name; [string,charset(UTF16)] uint16 *server_name; [string,charset(UTF16)] uint16 *user_name; [string,charset(UTF16)] uint16 *document_name; [string,charset(UTF16)] uint16 *notify_name; [string,charset(UTF16)] uint16 *data_type; [string,charset(UTF16)] uint16 *print_processor; [string,charset(UTF16)] uint16 *parameters; [string,charset(UTF16)] uint16 *driver_name; uint32 _devmode_ptr; /* pointer to truncated devicemode */ [string,charset(UTF16)] uint16 *text_status; uint32 _secdesc_ptr; spoolss_JobStatus status; [range(0,99)] uint32 priority; uint32 position; uint32 start_time; uint32 until_time; uint32 total_pages; uint32 size; spoolss_Time submitted; uint32 time; uint32 pages_printed; } spoolss_SetJobInfo2; typedef struct { uint32 job_id; [string,charset(UTF16)] uint16 *printer_name; [string,charset(UTF16)] uint16 *server_name; [string,charset(UTF16)] uint16 *user_name; [string,charset(UTF16)] uint16 *document_name; [string,charset(UTF16)] uint16 *notify_name; [string,charset(UTF16)] uint16 *data_type; [string,charset(UTF16)] uint16 *print_processor; [string,charset(UTF16)] uint16 *parameters; [string,charset(UTF16)] uint16 *driver_name; uint32 _devmode_ptr; /* pointer to truncated devicemode */ [string,charset(UTF16)] uint16 *text_status; uint32 _secdesc_ptr; spoolss_JobStatus status; [range(0,99)] uint32 priority; uint32 position; uint32 start_time; uint32 until_time; uint32 total_pages; uint32 size; spoolss_Time submitted; uint32 time; uint32 pages_printed; uint32 size_high; } spoolss_SetJobInfo4; typedef [public] union { [case(1)] spoolss_SetJobInfo1 *info1; [case(2)] spoolss_SetJobInfo2 *info2; [case(3)] spoolss_JobInfo3 *info3; [case(4)] spoolss_SetJobInfo4 *info4; [default]; } spoolss_SetJobInfo; typedef struct { uint32 level; [switch_is(level)] spoolss_SetJobInfo info; } spoolss_JobInfoContainer; typedef [v1_enum] enum { SPOOLSS_JOB_CONTROL_PAUSE = 1, SPOOLSS_JOB_CONTROL_RESUME = 2, SPOOLSS_JOB_CONTROL_CANCEL = 3, SPOOLSS_JOB_CONTROL_RESTART = 4, SPOOLSS_JOB_CONTROL_DELETE = 5, SPOOLSS_JOB_CONTROL_SEND_TO_PRINTER = 6, SPOOLSS_JOB_CONTROL_LAST_PAGE_EJECTED = 7, SPOOLSS_JOB_CONTROL_RETAIN = 8, SPOOLSS_JOB_CONTROL_RELEASE = 9 } spoolss_JobControl; WERROR spoolss_SetJob( [in,ref] policy_handle *handle, [in] uint32 job_id, [in,unique] spoolss_JobInfoContainer *ctr, [in] spoolss_JobControl command ); /******************/ /* Function: 0x03 */ WERROR spoolss_GetJob( [in,ref] policy_handle *handle, [in] uint32 job_id, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_JobInfo *info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x04 */ [public,noopnum,noprint] WERROR _spoolss_EnumJobs( [in,ref] policy_handle *handle, [in] uint32 firstjob, [in] uint32 numjobs, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out,ref] uint32 *needed, [out,ref] uint32 *count ); [public,noopnum,noprint] void __spoolss_EnumJobs( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_JobInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumJobs( [in,ref] policy_handle *handle, [in] uint32 firstjob, [in] uint32 numjobs, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,ref] uint32 *count, [out,ref,switch_is(level),size_is(,*count)] spoolss_JobInfo **info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x05 */ 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 ); /******************/ /* Function: 0x06 */ WERROR spoolss_DeletePrinter( [in] policy_handle *handle ); /******************/ /* Function: 0x07 */ typedef [v1_enum] enum { SPOOLSS_PRINTER_CONTROL_UNPAUSE = 0, SPOOLSS_PRINTER_CONTROL_PAUSE = 1, SPOOLSS_PRINTER_CONTROL_RESUME = 2, SPOOLSS_PRINTER_CONTROL_PURGE = 3, SPOOLSS_PRINTER_CONTROL_SET_STATUS = 4 } spoolss_PrinterControl; typedef struct { [string,charset(UTF16)] uint16 *servername; [string,charset(UTF16)] uint16 *printername; uint32 cjobs; uint32 total_jobs; uint32 total_bytes; spoolss_Time time; uint32 global_counter; uint32 total_pages; uint32 version; uint32 free_build; uint32 spooling; uint32 max_spooling; uint32 session_counter; uint32 num_error_out_of_paper; uint32 num_error_not_ready; uint32 job_error; uint32 number_of_processors; spoolss_ProcessorType processor_type; uint32 high_part_total_bytes; uint32 change_id; WERROR last_error; uint32 status; uint32 enumerate_network_printers; uint32 c_setprinter; spoolss_ProcessorArchitecture processor_architecture; uint16 processor_level; uint32 ref_ic; uint32 reserved2; uint32 reserved3; } spoolss_SetPrinterInfo0; typedef struct { spoolss_PrinterAttributes flags; [string,charset(UTF16)] uint16 *description; [string,charset(UTF16)] uint16 *name; [string,charset(UTF16)] uint16 *comment; } spoolss_SetPrinterInfo1; typedef struct { [string,charset(UTF16)] uint16 *servername; [string,charset(UTF16)] uint16 *printername; [string,charset(UTF16)] uint16 *sharename; [string,charset(UTF16)] uint16 *portname; [string,charset(UTF16)] uint16 *drivername; [string,charset(UTF16)] uint16 *comment; [string,charset(UTF16)] uint16 *location; [subcontext(0)] spoolss_DeviceMode *devmode; [string,charset(UTF16)] uint16 *sepfile; [string,charset(UTF16)] uint16 *printprocessor; [string,charset(UTF16)] uint16 *datatype; [string,charset(UTF16)] uint16 *parameters; [subcontext(0)] security_descriptor *secdesc; spoolss_PrinterAttributes attributes; [range(0,99)] uint32 priority; uint32 defaultpriority; uint32 starttime; uint32 untiltime; spoolss_PrinterStatus status; uint32 cjobs; uint32 averageppm; } spoolss_SetPrinterInfo2; typedef struct { uint32 sec_desc_ptr; } spoolss_SetPrinterInfo3; typedef struct { [string,charset(UTF16)] uint16 *printername; [string,charset(UTF16)] uint16 *servername; spoolss_PrinterAttributes attributes; } spoolss_SetPrinterInfo4; typedef struct { [string,charset(UTF16)] uint16 *printername; [string,charset(UTF16)] uint16 *portname; spoolss_PrinterAttributes attributes; uint32 device_not_selected_timeout; uint32 transmission_retry_timeout; } spoolss_SetPrinterInfo5; typedef struct { spoolss_PrinterStatus status; } spoolss_SetPrinterInfo6; typedef struct { [string,charset(UTF16)] uint16 *guid; /* text form of printer guid */ spoolss_DsPrintAction action; } spoolss_SetPrinterInfo7; typedef [switch_type(uint32)] union { [case(0)] spoolss_SetPrinterInfo0 *info0; [case(1)] spoolss_SetPrinterInfo1 *info1; [case(2)] spoolss_SetPrinterInfo2 *info2; [case(3)] spoolss_SetPrinterInfo3 *info3; [case(4)] spoolss_SetPrinterInfo4 *info4; [case(5)] spoolss_SetPrinterInfo5 *info5; [case(6)] spoolss_SetPrinterInfo6 *info6; [case(7)] spoolss_SetPrinterInfo7 *info7; [case(8)] spoolss_DeviceModeInfo *info8; [case(9)] spoolss_DeviceModeInfo *info9; [default]; } spoolss_SetPrinterInfo; typedef struct { uint32 level; [switch_is(level)] spoolss_SetPrinterInfo info; } spoolss_SetPrinterInfoCtr; WERROR spoolss_SetPrinter( [in,ref] policy_handle *handle, [in,ref] spoolss_SetPrinterInfoCtr *info_ctr, [in,ref] spoolss_DevmodeContainer *devmode_ctr, [in,ref] sec_desc_buf *secdesc_ctr, [in] spoolss_PrinterControl command ); /******************/ /* Function: 0x08 */ [public] WERROR spoolss_GetPrinter( [in,ref] policy_handle *handle, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_PrinterInfo *info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x09 */ typedef [public] struct { [value((ndr_size_spoolss_StringArray(r, ndr->iconv_convenience, ndr->flags)-4)/2)] uint32 _ndr_size; /*[subcontext(0),subcontext_size(_ndr_size*2)]*/ nstring_array string; } spoolss_StringArray; typedef struct { [string,charset(UTF16)] uint16 *driver_name; } spoolss_AddDriverInfo1; typedef [v1_enum,public] enum { SPOOLSS_DRIVER_VERSION_9X = 0, SPOOLSS_DRIVER_VERSION_NT35 = 1, SPOOLSS_DRIVER_VERSION_NT4 = 2, SPOOLSS_DRIVER_VERSION_200X = 3 } spoolss_DriverOSVersion; typedef struct { spoolss_DriverOSVersion version; [string,charset(UTF16)] uint16 *driver_name; [string,charset(UTF16)] uint16 *architecture; [string,charset(UTF16)] uint16 *driver_path; [string,charset(UTF16)] uint16 *data_file; [string,charset(UTF16)] uint16 *config_file; } spoolss_AddDriverInfo2; typedef struct { spoolss_DriverOSVersion version; [string,charset(UTF16)] uint16 *driver_name; [string,charset(UTF16)] uint16 *architecture; [string,charset(UTF16)] uint16 *driver_path; [string,charset(UTF16)] uint16 *data_file; [string,charset(UTF16)] uint16 *config_file; [string,charset(UTF16)] uint16 *help_file; [string,charset(UTF16)] uint16 *monitor_name; [string,charset(UTF16)] uint16 *default_datatype; [value(((ndr_size_spoolss_StringArray(dependent_files, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_dependent_files; spoolss_StringArray *dependent_files; } spoolss_AddDriverInfo3; typedef struct { spoolss_DriverOSVersion version; [string,charset(UTF16)] uint16 *driver_name; [string,charset(UTF16)] uint16 *architecture; [string,charset(UTF16)] uint16 *driver_path; [string,charset(UTF16)] uint16 *data_file; [string,charset(UTF16)] uint16 *config_file; [string,charset(UTF16)] uint16 *help_file; [string,charset(UTF16)] uint16 *monitor_name; [string,charset(UTF16)] uint16 *default_datatype; [value(((ndr_size_spoolss_StringArray(dependent_files, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_dependent_files; spoolss_StringArray *dependent_files; [value(((ndr_size_spoolss_StringArray(previous_names, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_previous_names; 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; [string,charset(UTF16)] uint16 *architecture; [string,charset(UTF16)] uint16 *driver_path; [string,charset(UTF16)] uint16 *data_file; [string,charset(UTF16)] uint16 *config_file; spoolss_DriverAttributes driver_attributes; uint32 config_version; uint32 driver_version; } spoolss_AddDriverInfo5; typedef struct { spoolss_DriverOSVersion version; [string,charset(UTF16)] uint16 *driver_name; [string,charset(UTF16)] uint16 *architecture; [string,charset(UTF16)] uint16 *driver_path; [string,charset(UTF16)] uint16 *data_file; [string,charset(UTF16)] uint16 *config_file; [string,charset(UTF16)] uint16 *help_file; [string,charset(UTF16)] uint16 *monitor_name; [string,charset(UTF16)] uint16 *default_datatype; [value(((ndr_size_spoolss_StringArray(dependent_files, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_dependent_files; spoolss_StringArray *dependent_files; [value(((ndr_size_spoolss_StringArray(previous_names, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_previous_names; spoolss_StringArray *previous_names; NTTIME driver_date; hyper driver_version; [string,charset(UTF16)] uint16 *manufacturer_name; [string,charset(UTF16)] uint16 *manufacturer_url; [string,charset(UTF16)] uint16 *hardware_id; [string,charset(UTF16)] uint16 *provider; } spoolss_AddDriverInfo6; typedef struct { spoolss_DriverOSVersion version; [string,charset(UTF16)] uint16 *driver_name; [string,charset(UTF16)] uint16 *architecture; [string,charset(UTF16)] uint16 *driver_path; [string,charset(UTF16)] uint16 *data_file; [string,charset(UTF16)] uint16 *config_file; [string,charset(UTF16)] uint16 *help_file; [string,charset(UTF16)] uint16 *monitor_name; [string,charset(UTF16)] uint16 *default_datatype; [value(((ndr_size_spoolss_StringArray(dependent_files, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_dependent_files; spoolss_StringArray *dependent_files; [value(((ndr_size_spoolss_StringArray(previous_names, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_previous_names; spoolss_StringArray *previous_names; NTTIME driver_date; hyper driver_version; [string,charset(UTF16)] uint16 *manufacturer_name; [string,charset(UTF16)] uint16 *manufacturer_url; [string,charset(UTF16)] uint16 *hardware_id; [string,charset(UTF16)] uint16 *provider; [string,charset(UTF16)] uint16 *print_processor; [string,charset(UTF16)] uint16 *vendor_setup; [value(((ndr_size_spoolss_StringArray(color_profiles, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_color_profiles; spoolss_StringArray *color_profiles; [string,charset(UTF16)] uint16 *inf_path; uint32 printer_driver_attributes; [value(((ndr_size_spoolss_StringArray(core_driver_dependencies, ndr->iconv_convenience, ndr->flags)-4)/2))] uint32 _ndr_size_core_driver_dependencies; spoolss_StringArray *core_driver_dependencies; NTTIME min_inbox_driver_ver_date; hyper min_inbox_driver_ver_version; } spoolss_AddDriverInfo8; typedef [switch_type(uint32)] union { [case(1)] spoolss_AddDriverInfo1 *info1; [case(2)] spoolss_AddDriverInfo2 *info2; [case(3)] spoolss_AddDriverInfo3 *info3; [case(4)] spoolss_AddDriverInfo4 *info4; [case(6)] spoolss_AddDriverInfo6 *info6; [case(8)] spoolss_AddDriverInfo8 *info8; } spoolss_AddDriverInfo; typedef struct { uint32 level; [switch_is(level)] spoolss_AddDriverInfo info; } spoolss_AddDriverInfoCtr; WERROR spoolss_AddPrinterDriver( [in,unique] [string,charset(UTF16)] uint16 *servername, [in,ref] spoolss_AddDriverInfoCtr *info_ctr ); typedef [public,gensize] struct { [relative] nstring *driver_name; } spoolss_DriverInfo1; typedef [public,gensize] struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; } spoolss_DriverInfo2; typedef [public,gensize] struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [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; } spoolss_DriverInfo3; typedef [public,gensize] struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [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 *previous_names; } spoolss_DriverInfo4; typedef [public,gensize] struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; spoolss_DriverAttributes driver_attributes; uint32 config_version; uint32 driver_version; } spoolss_DriverInfo5; typedef [public,gensize] struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [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 *previous_names; NTTIME driver_date; hyper driver_version; [relative] nstring *manufacturer_name; [relative] nstring *manufacturer_url; [relative] nstring *hardware_id; [relative] nstring *provider; } spoolss_DriverInfo6; typedef [public,gensize] struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] nstring *driver_path; [relative] nstring *data_file; [relative] nstring *config_file; [relative] nstring *help_file; [relative] nstring *monitor_name; [relative] nstring *default_datatype; [relative] nstring_array *dependent_files; [relative] nstring_array *previous_names; NTTIME driver_date; hyper driver_version; [relative] nstring *manufacturer_name; [relative] nstring *manufacturer_url; [relative] nstring *hardware_id; [relative] nstring *provider; [relative] nstring *print_processor; [relative] nstring *vendor_setup; [relative] nstring_array *color_profiles; [relative] nstring *inf_path; uint32 printer_driver_attributes; [relative] nstring_array *core_driver_dependencies; NTTIME min_inbox_driver_ver_date; hyper min_inbox_driver_ver_version; } spoolss_DriverInfo8; typedef [v1_enum] enum { SPOOLSS_DRIVER_FILE_TYPE_RENDERING = 0x00000000, SPOOLSS_DRIVER_FILE_TYPE_CONFIGURATION = 0x00000001, SPOOLSS_DRIVER_FILE_TYPE_DATA = 0x00000002, SPOOLSS_DRIVER_FILE_TYPE_HELP = 0x00000003, SPOOLSS_DRIVER_FILE_TYPE_OTHER = 0x00000004 } spoolss_DriverFileType; typedef [public] struct { [relative] nstring *file_name; spoolss_DriverFileType file_type; uint32 file_version; } spoolss_DriverFileInfo; typedef [public,gensize,nopush,nopull] struct { spoolss_DriverOSVersion version; [relative] nstring *driver_name; [relative] nstring *architecture; [relative] [size_is(file_count)] spoolss_DriverFileInfo *file_info; uint32 file_count; [relative] nstring *monitor_name; [relative] nstring *default_datatype; [relative] nstring_array *previous_names; NTTIME driver_date; hyper driver_version; [relative] nstring *manufacturer_name; [relative] nstring *manufacturer_url; [relative] nstring *hardware_id; [relative] nstring *provider; } spoolss_DriverInfo101; typedef [nodiscriminant,relative_base,public,gensize] union { [case(1)] spoolss_DriverInfo1 info1; [case(2)] spoolss_DriverInfo2 info2; [case(3)] spoolss_DriverInfo3 info3; [case(4)] spoolss_DriverInfo4 info4; [case(5)] spoolss_DriverInfo5 info5; [case(6)] spoolss_DriverInfo6 info6; [case(8)] spoolss_DriverInfo8 info8; [case(101)] spoolss_DriverInfo101 info101; [default]; } spoolss_DriverInfo; /******************/ /* Function: 0x0a */ [public,noopnum,noprint] WERROR _spoolss_EnumPrinterDrivers( [in,unique] [string,charset(UTF16)] uint16 *server, [in,unique] [string,charset(UTF16)] uint16 *environment, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out,ref] uint32 *needed, [out,ref] uint32 *count ); [public,noopnum,noprint] void __spoolss_EnumPrinterDrivers( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_DriverInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumPrinterDrivers( [in,unique] [string,charset(UTF16)] uint16 *server, [in,unique] [string,charset(UTF16)] uint16 *environment, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,ref] uint32 *count, [out,ref,switch_is(level),size_is(,*count)] spoolss_DriverInfo **info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x0b */ 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 ); /******************/ /* Function: 0x0c */ typedef [public,gensize] struct { nstring directory_name; } spoolss_DriverDirectoryInfo1; /* NOTE: it's seems that w2k3 completly ignores the level in its server code */ typedef [nodiscriminant,relative_base,gensize,public] union { [case(1)] spoolss_DriverDirectoryInfo1 info1; [default] spoolss_DriverDirectoryInfo1 info1; } spoolss_DriverDirectoryInfo; [public] WERROR spoolss_GetPrinterDriverDirectory( [in,unique] [string,charset(UTF16)] uint16 *server, [in,unique] [string,charset(UTF16)] uint16 *environment, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_DriverDirectoryInfo *info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x0d */ WERROR spoolss_DeletePrinterDriver( [in,unique] [string,charset(UTF16)] uint16 *server, [in] [string,charset(UTF16)] uint16 architecture[], [in] [string,charset(UTF16)] uint16 driver[] ); /******************/ /* Function: 0x0e */ WERROR spoolss_AddPrintProcessor( [in,unique] [string,charset(UTF16)] uint16 *server, [in] [string,charset(UTF16)] uint16 architecture[], [in] [string,charset(UTF16)] uint16 path_name[], [in] [string,charset(UTF16)] uint16 print_processor_name[] ); /******************/ /* Function: 0x0f */ typedef [public,gensize] struct { [relative] nstring *print_processor_name; } spoolss_PrintProcessorInfo1; typedef [nodiscriminant,relative_base,public] union { [case(1)] spoolss_PrintProcessorInfo1 info1; [default]; } spoolss_PrintProcessorInfo; [public,noopnum,noprint] WERROR _spoolss_EnumPrintProcessors( [in,unique] [string,charset(UTF16)] uint16 *servername, [in,unique] [string,charset(UTF16)] uint16 *environment, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out,ref] uint32 *needed, [out,ref] uint32 *count ); [public,noopnum,noprint] void __spoolss_EnumPrintProcessors( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_PrintProcessorInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumPrintProcessors( [in,unique] [string,charset(UTF16)] uint16 *servername, [in,unique] [string,charset(UTF16)] uint16 *environment, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,ref] uint32 *count, [out,ref,switch_is(level),size_is(,*count)] spoolss_PrintProcessorInfo **info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x10 */ typedef [public,gensize] struct { nstring directory_name; } spoolss_PrintProcessorDirectoryInfo1; typedef [nodiscriminant,relative_base,gensize,public] union { [case(1)] spoolss_PrintProcessorDirectoryInfo1 info1; [default] spoolss_PrintProcessorDirectoryInfo1 info1; } spoolss_PrintProcessorDirectoryInfo; WERROR spoolss_GetPrintProcessorDirectory( [in,unique] [string,charset(UTF16)] uint16 *server, [in,unique] [string,charset(UTF16)] uint16 *environment, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_PrintProcessorDirectoryInfo *info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x11 */ typedef struct { [string,charset(UTF16)] uint16 *document_name; [string,charset(UTF16)] uint16 *output_file; [string,charset(UTF16)] uint16 *datatype; } spoolss_DocumentInfo1; typedef [switch_type(uint32)] union { [case(1)] spoolss_DocumentInfo1 *info1; [case(2)]; /* TODO */ [case(3)]; /* TODO */ [default]; } spoolss_DocumentInfo; WERROR spoolss_StartDocPrinter( [in,ref] policy_handle *handle, [in] uint32 level, [in,switch_is(level)] spoolss_DocumentInfo info, [out,ref] uint32 *job_id ); /******************/ /* Function: 0x12 */ WERROR spoolss_StartPagePrinter( [in,ref] policy_handle *handle ); /******************/ /* Function: 0x13 */ WERROR spoolss_WritePrinter( [in,ref] policy_handle *handle, [in] DATA_BLOB data, [in,value(r->in.data.length)] uint32 _data_size, [out,ref] uint32 *num_written ); /******************/ /* Function: 0x14 */ WERROR spoolss_EndPagePrinter( [in,ref] policy_handle *handle ); /******************/ /* Function: 0x15 */ WERROR spoolss_AbortPrinter( [in,ref] policy_handle *handle ); /******************/ /* Function: 0x16 */ WERROR spoolss_ReadPrinter( [in,ref] policy_handle *handle, [out,ref] [size_is(data_size)] uint8 *data, [in] uint32 data_size, [out,ref] uint32 *_data_size ); /******************/ /* Function: 0x17 */ WERROR spoolss_EndDocPrinter( [in,ref] policy_handle *handle ); /******************/ /* Function: 0x18 */ WERROR spoolss_AddJob( [in,ref] policy_handle *handle, [in] uint32 level, [in,out,unique] [size_is(offered)] uint8 *buffer, [in] uint32 offered, [out,ref] uint32 *needed ); /******************/ /* Function: 0x19 */ WERROR spoolss_ScheduleJob( [in,ref] policy_handle *handle, [in] uint32 jobid ); /******************/ /* 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_NT_X86 = "Windows NT x86"; const string SPOOLSS_DEFAULT_SERVER_PATH = "C:\\WINDOWS\\system32\\spool"; typedef [public,gensize] struct { [value(ndr_size_spoolss_OSVersion(r,ndr->iconv_convenience,ndr->flags))] uint32 _ndr_size; uint32 major; uint32 minor; uint32 build; [value(2)] uint32 platform_id; [subcontext(0),subcontext_size(256)] nstring extra_string; } spoolss_OSVersion; typedef [public,gensize] struct { [value(ndr_size_spoolss_OSVersionEx(r,ndr->iconv_convenience,ndr->flags))] uint32 _ndr_size; uint32 major; uint32 minor; uint32 build; [value(2)] uint32 platform_id; [subcontext(0),subcontext_size(256)] nstring extra_string; uint16 service_pack_major; uint16 service_pack_minor; uint16 suite_mask; uint8 product_type; uint8 reserved; } spoolss_OSVersionEx; typedef [nodiscriminant,public,gensize] union { [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; [noopnum,noprint,public] WERROR _spoolss_GetPrinterData( [in,ref] policy_handle *handle, [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_GetPrinterData( [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] winreg_Type *type, [out,ref,subcontext(4),subcontext_size(offered),switch_is(*type)] spoolss_PrinterData *data, [out,ref] uint32 *needed ); /******************/ /* Function: 0x1b */ [noopnum,nopull,noprint,public] WERROR _spoolss_SetPrinterData( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 value_name[], [in] winreg_Type type, [in] DATA_BLOB data, [in] uint32 _offered ); [noopnum,nopull,noprint,public] void __spoolss_SetPrinterData( [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] 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: 0x1c */ [todo] WERROR spoolss_WaitForPrinterChange( ); /******************/ /* Function: 0x1d */ [public] WERROR spoolss_ClosePrinter( [in,out,ref] policy_handle *handle ); /******************/ /* Function: 0x1e */ typedef [v1_enum] enum { SPOOLSS_FORM_USER = 0, SPOOLSS_FORM_BUILTIN = 1, SPOOLSS_FORM_PRINTER = 2 } spoolss_FormFlags; typedef struct { uint32 width; uint32 height; } spoolss_FormSize; typedef struct { uint32 left; uint32 top; uint32 right; uint32 bottom; } spoolss_FormArea; typedef [public,gensize] struct { spoolss_FormFlags flags; [relative] nstring *form_name; spoolss_FormSize size; spoolss_FormArea area; } spoolss_FormInfo1; typedef [bitmap32bit] bitmap { SPOOLSS_FORM_STRING_TYPE_NONE = 0x00000001, SPOOLSS_FORM_STRING_TYPE_MUI_DLL = 0x00000002, SPOOLSS_FORM_STRING_TYPE_LANG_PAIR = 0x00000004 } spoolss_FormStringType; typedef [public,gensize] struct { spoolss_FormFlags flags; [relative] nstring *form_name; spoolss_FormSize size; spoolss_FormArea area; [relative] astring *keyword; spoolss_FormStringType string_type; [relative] nstring *mui_dll; uint32 ressource_id; [relative] nstring *display_name; uint32 lang_id; } spoolss_FormInfo2; typedef [nodiscriminant,relative_base,public,gensize] union { [case(1)] spoolss_FormInfo1 info1; [case(2)] spoolss_FormInfo2 info2; [default]; } spoolss_FormInfo; typedef struct { spoolss_FormFlags flags; [string,charset(UTF16)] uint16 *form_name; spoolss_FormSize size; spoolss_FormArea area; } spoolss_AddFormInfo1; typedef struct { spoolss_FormFlags flags; [string,charset(UTF16)] uint16 *form_name; spoolss_FormSize size; spoolss_FormArea area; [string,charset(DOS)] uint8 *keyword; spoolss_FormStringType string_type; [string,charset(UTF16)] uint16 *mui_dll; uint32 ressource_id; [string,charset(UTF16)] uint16 *display_name; uint32 lang_id; } spoolss_AddFormInfo2; typedef [switch_type(uint32)] union { [case(1)] spoolss_AddFormInfo1 *info1; [case(2)] spoolss_AddFormInfo2 *info2; } spoolss_AddFormInfo; WERROR spoolss_AddForm( [in,ref] policy_handle *handle, [in] uint32 level, [in,switch_is(level)] spoolss_AddFormInfo info ); /******************/ /* Function: 0x1f */ WERROR spoolss_DeleteForm( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 form_name[] ); /******************/ /* Function: 0x20 */ WERROR spoolss_GetForm( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 form_name[], [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_FormInfo *info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x21 */ WERROR spoolss_SetForm( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 form_name[], [in] uint32 level, [in,switch_is(level)] spoolss_AddFormInfo info ); /******************/ /* Function: 0x22 */ [public,noopnum,noprint] WERROR _spoolss_EnumForms( [in,ref] policy_handle *handle, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out,ref] uint32 *needed, [out,ref] uint32 *count ); [public,noopnum,noprint] void __spoolss_EnumForms( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_FormInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumForms( [in,ref] policy_handle *handle, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,ref] uint32 *count, [out,ref,switch_is(level),size_is(,*count)] spoolss_FormInfo **info, [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; typedef bitmap { SPOOLSS_PORT_TYPE_WRITE = 0x00000001, SPOOLSS_PORT_TYPE_READ = 0x00000002, SPOOLSS_PORT_TYPE_REDIRECTED = 0x00000004, SPOOLSS_PORT_TYPE_NET_ATTACHED = 0x00000008 } spoolss_PortType; typedef [public,gensize] struct { [relative] nstring *port_name; [relative] nstring *monitor_name; [relative] nstring *description; spoolss_PortType port_type; uint32 reserved; } spoolss_PortInfo2; typedef [v1_enum] enum { PORT_STATUS_CLEAR = 0x00000000, PORT_STATUS_OFFLINE = 0x00000001, PORT_STATUS_PAPER_JAM = 0x00000002, PORT_STATUS_PAPER_OUT = 0x00000003, PORT_STATUS_OUTPUT_BIN_FULL = 0x00000004, PORT_STATUS_PAPER_PROBLEM = 0x00000005, PORT_STATUS_NO_TONER = 0x00000006, PORT_STATUS_DOOR_OPEN = 0x00000007, PORT_STATUS_USER_INTERVENTION = 0x00000008, PORT_STATUS_OUT_OF_MEMORY = 0x00000009, PORT_STATUS_TONER_LOW = 0x0000000A, PORT_STATUS_WARMING_UP = 0x0000000B, PORT_STATUS_POWER_SAVE = 0x0000000C } spoolss_PortStatus; typedef [v1_enum] enum { PORT_STATUS_TYPE_ERROR = 0x00000001, PORT_STATUS_TYPE_WARNING = 0x00000002, PORT_STATUS_TYPE_INFO = 0x00000003 } spoolss_PortSeverity; typedef [public,gensize] struct { spoolss_PortStatus status; [relative] nstring *status_string; spoolss_PortSeverity severity; } spoolss_PortInfo3; typedef [public,gensize] struct { [relative] nstring *port_name; DATA_BLOB monitor_data; /* relative ?? */ } spoolss_PortInfoFF; typedef [nodiscriminant,relative_base,public] union { [case(1)] spoolss_PortInfo1 info1; [case(2)] spoolss_PortInfo2 info2; [case(3)] spoolss_PortInfo3 info3; [case(0xff)] spoolss_PortInfoFF infoFF; [default]; } spoolss_PortInfo; /******************/ /* Function: 0x23 */ [public,noopnum,noprint] WERROR _spoolss_EnumPorts( [in,unique] [string,charset(UTF16)] uint16 *servername, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out,ref] uint32 *needed, [out,ref] uint32 *count ); [public,noopnum,noprint] void __spoolss_EnumPorts( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_PortInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumPorts( [in,unique] [string,charset(UTF16)] uint16 *servername, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,ref] uint32 *count, [out,ref,switch_is(level),size_is(,*count)] spoolss_PortInfo **info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x24 */ typedef [public,gensize] struct { [relative] nstring *monitor_name; } spoolss_MonitorInfo1; typedef [public,gensize] struct { [relative] nstring *monitor_name; [relative] nstring *environment; [relative] nstring *dll_name; } spoolss_MonitorInfo2; typedef [nodiscriminant,relative_base,public] union { [case(1)] spoolss_MonitorInfo1 info1; [case(2)] spoolss_MonitorInfo2 info2; [default]; } spoolss_MonitorInfo; [public,noopnum,noprint] WERROR _spoolss_EnumMonitors( [in,unique] [string,charset(UTF16)] uint16 *servername, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out,ref] uint32 *needed, [out,ref] uint32 *count ); [public,noopnum,noprint] void __spoolss_EnumMonitors( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_MonitorInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumMonitors( [in,unique] [string,charset(UTF16)] uint16 *servername, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,ref] uint32 *count, [out,ref,switch_is(level),size_is(,*count)] spoolss_MonitorInfo **info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x25 */ WERROR spoolss_AddPort( [in,unique] [string,charset(UTF16)] uint16 *server_name, [in] uint32 unknown, [in] [string,charset(UTF16)] uint16 monitor_name[] ); /******************/ /* Function: 0x26 */ [todo] WERROR spoolss_ConfigurePort( ); /******************/ /* Function: 0x27 */ [todo] WERROR spoolss_DeletePort( ); /******************/ /* Function: 0x28 */ WERROR spoolss_CreatePrinterIC( [in,ref] policy_handle *handle, [out,ref] policy_handle *gdi_handle, [in,ref] spoolss_DevmodeContainer *devmode_ctr ); /******************/ /* Function: 0x29 */ [todo] WERROR spoolss_PlayGDIScriptOnPrinterIC( ); /******************/ /* Function: 0x2a */ WERROR spoolss_DeletePrinterIC( [in,out,ref] policy_handle *gdi_handle ); /******************/ /* Function: 0x2b */ [todo] WERROR spoolss_AddPrinterConnection( ); /******************/ /* Function: 0x2c */ [todo] WERROR spoolss_DeletePrinterConnection( ); /******************/ /* Function: 0x2d */ [todo] WERROR spoolss_PrinterMessageBox( /* Marked as obsolete in MSDN. "Not necessary and has no effect". */ ); /******************/ /* Function: 0x2e */ [todo] WERROR spoolss_AddMonitor( ); /******************/ /* Function: 0x2f */ [todo] WERROR spoolss_DeleteMonitor( ); /******************/ /* Function: 0x30 */ [todo] WERROR spoolss_DeletePrintProcessor( ); /******************/ /* Function: 0x31 */ [todo] WERROR spoolss_AddPrintProvidor( ); /******************/ /* Function: 0x32 */ [todo] WERROR spoolss_DeletePrintProvidor( ); /******************/ /* Function: 0x33 */ typedef [public,gensize] struct { [relative] nstring *name_array; } spoolss_PrintProcDataTypesInfo1; typedef [nodiscriminant,relative_base,public] union { [case(1)] spoolss_PrintProcDataTypesInfo1 info1; [default]; } spoolss_PrintProcDataTypesInfo; [public,noopnum,noprint] WERROR _spoolss_EnumPrintProcDataTypes( [in,unique] [string,charset(UTF16)] uint16 *servername, [in,unique] [string,charset(UTF16)] uint16 *print_processor_name, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,unique] DATA_BLOB *info, [out,ref] uint32 *needed, [out,ref] uint32 *count ); [public,noopnum,noprint] void __spoolss_EnumPrintProcDataTypes( [in] uint32 level, [in] uint32 count, [out,switch_is(level)] spoolss_PrintProcDataTypesInfo info[count] ); [nopull,nopush] WERROR spoolss_EnumPrintProcDataTypes( [in,unique] [string,charset(UTF16)] uint16 *servername, [in,unique] [string,charset(UTF16)] uint16 *print_processor_name, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [out,ref] uint32 *count, [out,ref,switch_is(level),size_is(,*count)] spoolss_PrintProcDataTypesInfo **info, [out,ref] uint32 *needed ); /******************/ /* Function: 0x34 */ WERROR spoolss_ResetPrinter( [in,ref] policy_handle *handle, [in,unique] [string,charset(UTF16)] uint16 *data_type, [in,ref] spoolss_DevmodeContainer *devmode_ctr ); /******************/ /* Function: 0x35 */ WERROR spoolss_GetPrinterDriver2( [in,ref] policy_handle *handle, [in,unique] [string,charset(UTF16)] uint16 *architecture, [in] uint32 level, [in,unique] DATA_BLOB *buffer, [in] uint32 offered, [in] uint32 client_major_version, [in] uint32 client_minor_version, [out,unique,subcontext(4),subcontext_size(offered),switch_is(level)] spoolss_DriverInfo *info, [out,ref] uint32 *needed, [out,ref] uint32 *server_major_version, [out,ref] uint32 *server_minor_version ); /******************/ /* Function: 0x36 */ [todo] WERROR spoolss_FindFirstPrinterChangeNotification( ); /******************/ /* Function: 0x37 */ [todo] WERROR spoolss_FindNextPrinterChangeNotification( ); /******************/ /* Function: 0x38 */ [public] WERROR spoolss_FindClosePrinterNotify( [in,ref] policy_handle *handle ); /******************/ /* Function: 0x39 */ [todo] WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld( ); /******************/ /* Function: 0x3a */ [public] WERROR spoolss_ReplyOpenPrinter( [in,string,charset(UTF16)] uint16 server_name[], [in] uint32 printer_local, [in] winreg_Type type, [in,range(0,512)] uint32 bufsize, [in,unique,size_is(bufsize)] uint8 *buffer, [out,ref] policy_handle *handle ); /******************/ /* Function: 0x3b */ typedef [bitmap32bit] bitmap { PRINTER_CHANGE_ADD_PRINTER = 0x00000001, PRINTER_CHANGE_SET_PRINTER = 0x00000002, PRINTER_CHANGE_DELETE_PRINTER = 0x00000004, PRINTER_CHANGE_FAILED_CONNECTION_PRINTER = 0x00000008, PRINTER_CHANGE_ADD_JOB = 0x00000100, PRINTER_CHANGE_SET_JOB = 0x00000200, PRINTER_CHANGE_DELETE_JOB = 0x00000400, PRINTER_CHANGE_WRITE_JOB = 0x00000800, PRINTER_CHANGE_ADD_FORM = 0x00010000, PRINTER_CHANGE_SET_FORM = 0x00020000, PRINTER_CHANGE_DELETE_FORM = 0x00040000, PRINTER_CHANGE_ADD_PORT = 0x00100000, PRINTER_CHANGE_CONFIGURE_PORT = 0x00200000, PRINTER_CHANGE_DELETE_PORT = 0x00400000, PRINTER_CHANGE_ADD_PRINT_PROCESSOR = 0x01000000, PRINTER_CHANGE_DELETE_PRINT_PROCESSOR = 0x04000000, PRINTER_CHANGE_SERVER = 0x08000000, PRINTER_CHANGE_ADD_PRINTER_DRIVER = 0x10000000, PRINTER_CHANGE_SET_PRINTER_DRIVER = 0x20000000, PRINTER_CHANGE_DELETE_PRINTER_DRIVER = 0x40000000, PRINTER_CHANGE_TIMEOUT = 0x80000000 } spoolss_PrinterChangeFlags; const int PRINTER_CHANGE_PRINTER = 0x000000FF; const int PRINTER_CHANGE_JOB = 0x0000FF00; const int PRINTER_CHANGE_FORM = (PRINTER_CHANGE_ADD_FORM | PRINTER_CHANGE_SET_FORM | PRINTER_CHANGE_DELETE_FORM); /* 0x00070000 */ const int PRINTER_CHANGE_PORT = (PRINTER_CHANGE_ADD_PORT | PRINTER_CHANGE_CONFIGURE_PORT | PRINTER_CHANGE_DELETE_PORT); /* 0x00700000 */ const int PRINTER_CHANGE_PRINT_PROCESSOR = 0x07000000; const int PRINTER_CHANGE_PRINTER_DRIVER = (PRINTER_CHANGE_ADD_PRINTER_DRIVER | PRINTER_CHANGE_SET_PRINTER_DRIVER | PRINTER_CHANGE_DELETE_PRINTER_DRIVER); /* 0x70000000 */ const int PRINTER_CHANGE_ALL = (PRINTER_CHANGE_PRINTER | PRINTER_CHANGE_JOB | PRINTER_CHANGE_FORM | PRINTER_CHANGE_PORT | PRINTER_CHANGE_PRINT_PROCESSOR | PRINTER_CHANGE_PRINTER_DRIVER); /* 0x7777FFFF */ WERROR spoolss_RouterReplyPrinter( [in,ref] policy_handle *handle, [in] spoolss_PrinterChangeFlags flags, [in,range(0,512)] uint32 bufsize, [in,unique,size_is(bufsize)] uint8 *buffer ); /******************/ /* Function: 0x3c */ [public] WERROR spoolss_ReplyClosePrinter( [in,out,ref] policy_handle *handle ); /******************/ /* Function: 0x3d */ [todo] WERROR spoolss_AddPortEx( ); /******************/ /* Function: 0x3e */ [todo] WERROR spoolss_RouterFindFirstPrinterChangeNotification( ); /******************/ /* Function: 0x3f */ [todo] WERROR spoolss_SpoolerInit( ); /******************/ /* Function: 0x40 */ [todo] WERROR spoolss_ResetPrinterEx( ); 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 { 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 { spoolss_NotifyType type; uint16 u1; uint32 u2; uint32 u3; uint32 count; [size_is(count),switch_is(type)] spoolss_Field *fields; } spoolss_NotifyOptionType; typedef [bitmap32bit] bitmap { PRINTER_NOTIFY_OPTIONS_REFRESH = 0x00000001 } spoolssNotifyOptionFlags; typedef struct { [value(2)] uint32 version; spoolssNotifyOptionFlags flags; uint32 count; [size_is(count)] spoolss_NotifyOptionType *types; } spoolss_NotifyOption; [public] WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx( [in,ref] policy_handle *handle, [in] spoolss_PrinterChangeFlags flags, [in] uint32 options, [in,unique] [string,charset(UTF16)] uint16 *local_machine, [in] uint32 printer_local, [in,unique] spoolss_NotifyOption *notify_options ); /******************/ /* Function: 0x42 */ typedef struct { uint32 size; [size_is(size/2),unique,charset(UTF16)] uint16 *string; } spoolss_NotifyString; typedef [v1_enum] enum { NOTIFY_TABLE_DWORD = 0x0001, NOTIFY_TABLE_STRING = 0x0002, NOTIFY_TABLE_DEVMODE = 0x0003, NOTIFY_TABLE_TIME = 0x0004, NOTIFY_TABLE_SECURITYDESCRIPTOR = 0x0005 } spoolss_NotifyTable; typedef [switch_type(uint32)] union { [case(1)] uint32 integer[2]; [case(2)] spoolss_NotifyString string; [case(3)] spoolss_DevmodeContainer devmode; [case(4)] spoolss_TimeCtr time; [case(5)] sec_desc_buf sd; } spoolss_NotifyData; typedef struct { spoolss_NotifyType type; [switch_is(type)] spoolss_Field field; spoolss_NotifyTable variable_type; uint32 job_id; [switch_is(variable_type)] spoolss_NotifyData data; } spoolss_Notify; typedef struct { [value(2)] uint32 version; uint32 flags; uint32 count; [size_is(count)] spoolss_Notify notifies[]; } spoolss_NotifyInfo; typedef [switch_type(uint32)] union { [case(0)] spoolss_NotifyInfo *info0; } spoolss_ReplyPrinterInfo; typedef [bitmap32bit] bitmap { PRINTER_NOTIFY_INFO_DISCARDED = 0x00000001, PRINTER_NOTIFY_INFO_DISCARDNOTED = 0x00010000, PRINTER_NOTIFY_INFO_COLOR_MISMATCH = 0x00080000 } spoolss_PrinterNotifyFlags; WERROR spoolss_RouterReplyPrinterEx( [in,ref] policy_handle *handle, [in] uint32 color, [in] spoolss_PrinterChangeFlags flags, [out,ref] spoolss_PrinterNotifyFlags *reply_result, [in] uint32 reply_type, [in,switch_is(reply_type)] spoolss_ReplyPrinterInfo info ); /******************/ /* Function: 0x43 */ [public] WERROR spoolss_RouterRefreshPrinterChangeNotify( [in,ref] policy_handle *handle, [in] uint32 change_low, [in,unique] spoolss_NotifyOption *options, [out,ref] spoolss_NotifyInfo **info ); /******************/ /* Function: 0x44 */ [todo] WERROR spoolss_44( ); typedef struct { uint32 size; [string,charset(UTF16)] uint16 *client; [string,charset(UTF16)] uint16 *user; uint32 build; spoolss_MajorVersion major; spoolss_MinorVersion minor; spoolss_ProcessorArchitecture processor; } spoolss_UserLevel1; typedef struct { uint32 not_used; } spoolss_UserLevel2; typedef struct { uint32 size; uint32 flags; uint32 size2; [string,charset(UTF16)] uint16 *client; [string,charset(UTF16)] uint16 *user; uint32 build; spoolss_MajorVersion major; spoolss_MinorVersion minor; spoolss_ProcessorArchitecture processor; udlong reserved; } spoolss_UserLevel3; typedef [switch_type(uint32)] union { [case(1)] spoolss_UserLevel1 *level1; [case(2)] spoolss_UserLevel2 *level2; [case(3)] spoolss_UserLevel3 *level3; } spoolss_UserLevel; typedef struct { uint32 level; [switch_is(level)] spoolss_UserLevel user_info; } spoolss_UserLevelCtr; typedef bitmap { SERVER_ACCESS_ADMINISTER = 0x00000001, SERVER_ACCESS_ENUMERATE = 0x00000002, PRINTER_ACCESS_ADMINISTER = 0x00000004, PRINTER_ACCESS_USE = 0x00000008, JOB_ACCESS_ADMINISTER = 0x00000010, JOB_ACCESS_READ = 0x00000020 } spoolss_AccessRights; /* Access rights for print servers */ const int SERVER_ALL_ACCESS = SEC_STD_REQUIRED | SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE; const int SERVER_READ = SEC_STD_READ_CONTROL | SERVER_ACCESS_ENUMERATE; const int SERVER_WRITE = STANDARD_RIGHTS_WRITE_ACCESS | SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE; const int SERVER_EXECUTE = SEC_STD_READ_CONTROL | SERVER_ACCESS_ENUMERATE; /* Access rights for printers */ const int PRINTER_ALL_ACCESS = SEC_STD_REQUIRED | PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE; const int PRINTER_READ = SEC_STD_READ_CONTROL | PRINTER_ACCESS_USE; const int PRINTER_WRITE = STANDARD_RIGHTS_WRITE_ACCESS | PRINTER_ACCESS_USE; const int PRINTER_EXECUTE = SEC_STD_READ_CONTROL | PRINTER_ACCESS_USE; /* Access rights for jobs */ const int JOB_ALL_ACCESS = SEC_STD_REQUIRED | JOB_ACCESS_ADMINISTER; const int JOB_READ = SEC_STD_READ_CONTROL | JOB_ACCESS_ADMINISTER; const int JOB_WRITE = STANDARD_RIGHTS_WRITE_ACCESS | JOB_ACCESS_ADMINISTER; const int JOB_EXECUTE = SEC_STD_READ_CONTROL | JOB_ACCESS_ADMINISTER; /* ACE masks for various print permissions */ const int PRINTER_ACE_FULL_CONTROL = SEC_GENERIC_ALL | PRINTER_ALL_ACCESS; const int PRINTER_ACE_MANAGE_DOCUMENTS = SEC_GENERIC_ALL | READ_CONTROL_ACCESS; const int PRINTER_ACE_PRINT = GENERIC_EXECUTE_ACCESS | READ_CONTROL_ACCESS | PRINTER_ACCESS_USE; /******************/ /* Function: 0x45 */ [public] WERROR spoolss_OpenPrinterEx( [in,unique] [string,charset(UTF16)] uint16 *printername, [in,unique] [string,charset(UTF16)] uint16 *datatype, [in] spoolss_DevmodeContainer devmode_ctr, [in] spoolss_AccessRights access_mask, [in] uint32 level, [in,switch_is(level)] spoolss_UserLevel userlevel, [out,ref] policy_handle *handle ); /******************/ /* Function: 0x46 */ WERROR spoolss_AddPrinterEx( [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, [in,ref] spoolss_UserLevelCtr *userlevel_ctr, [out,ref] policy_handle *handle ); /******************/ /* Function: 0x47 */ [todo] WERROR spoolss_47( ); /******************/ /* Function: 0x48 */ WERROR spoolss_EnumPrinterData( [in,ref] policy_handle *handle, [in] uint32 enum_index, [out,size_is(value_offered/2),charset(UTF16)] uint16 value_name[], [in] uint32 value_offered, [out,ref] uint32 *value_needed, [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 ); /******************/ /* Function: 0x49 */ WERROR spoolss_DeletePrinterData( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 value_name[] ); /******************/ /* Function: 0x4a */ [todo] WERROR spoolss_4a( ); /******************/ /* Function: 0x4b */ [todo] WERROR spoolss_4b( ); /******************/ /* Function: 0x4c */ [todo] WERROR spoolss_4c( ); /******************/ /* Function: 0x4d */ 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,ref] [size_is(offered)] uint8 *buffer, [in] uint32 offered ); /******************/ /* Function: 0x4e */ WERROR spoolss_GetPrinterDataEx( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 key_name[], [in] [string,charset(UTF16)] uint16 value_name[], [out,ref] winreg_Type *type, [out,ref] [size_is(offered)] uint8 *buffer, [in] uint32 offered, [out,ref] uint32 *needed ); /******************/ /* Function: 0x4f */ 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] 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 ); /******************/ /* Function: 0x50 */ [public] WERROR spoolss_EnumPrinterKey( [in, ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 key_name[], [out,ref] [size_is(offered/2)] uint16 *key_buffer, [in] uint32 offered, [out,ref] uint32 *needed ); /******************/ /* Function: 0x51 */ WERROR spoolss_DeletePrinterDataEx( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 key_name[], [in] [string,charset(UTF16)] uint16 value_name[] ); /******************/ /* Function: 0x52 */ WERROR spoolss_DeletePrinterKey( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 key_name[] ); /******************/ /* Function: 0x53 */ [todo] WERROR spoolss_53( ); /******************/ /* Function: 0x54 */ typedef [public,bitmap32bit] bitmap { DPD_DELETE_UNUSED_FILES = 0x00000001, DPD_DELETE_SPECIFIC_VERSION = 0x00000002, DPD_DELETE_ALL_FILES = 0x00000004 } spoolss_DeleteDriverFlags; WERROR spoolss_DeletePrinterDriverEx( [in,unique] [string,charset(UTF16)] uint16 *server, [in] [string,charset(UTF16)] uint16 architecture[], [in] [string,charset(UTF16)] uint16 driver[], [in] spoolss_DeleteDriverFlags delete_flags, [in] uint32 version ); /******************/ /* Function: 0x55 */ [todo] WERROR spoolss_55( ); /******************/ /* Function: 0x56 */ [todo] WERROR spoolss_56( ); /******************/ /* Function: 0x57 */ [todo] WERROR spoolss_57( ); /******************/ /* Function: 0x58 */ typedef [v1_enum] enum { PROTOCOL_RAWTCP_TYPE = 1, PROTOCOL_LPR_TYPE = 2 } spoolss_PortProtocol; typedef [public] struct { [charset(UTF16)] uint16 portname[64]; [value(0x00000001)] uint32 version; spoolss_PortProtocol protocol; [value(sizeof(r))] uint32 size; uint32 reserved; [charset(UTF16)] uint16 hostaddress[49]; [charset(UTF16)] uint16 snmpcommunity[33]; uint32 dblspool; [charset(UTF16)] uint16 queue[33]; [charset(UTF16)] uint16 ip_address[16]; /* s3 had 17 */ [charset(UTF16)] uint16 hardware_address[13]; [charset(UTF16)] uint16 device_type[257]; uint32 port_number; boolean32 snmp_enabled; uint32 snmp_dev_index; } spoolss_PortData1; typedef [public] struct { [charset(UTF16)] uint16 portname[64]; [value(0x00000002)] uint32 version; spoolss_PortProtocol protocol; [value(sizeof(r))] uint32 size; uint32 reserved; [charset(UTF16)] uint16 hostaddress[128]; [charset(UTF16)] uint16 snmpcommunity[33]; uint32 dblspool; [charset(UTF16)] uint16 queue[33]; [charset(UTF16)] uint16 device_type[257]; uint32 port_number; boolean32 snmp_enabled; uint32 snmp_dev_index; uint32 port_monitor_mib_index; } spoolss_PortData2; typedef [public] struct { nstring dll_name; } spoolss_MonitorUi; WERROR spoolss_XcvData( [in,ref] policy_handle *handle, [in] [string,charset(UTF16)] uint16 function_name[], [in] DATA_BLOB in_data, [in,value(r->in.in_data.length)] uint32 _in_data_length, [out,ref] [size_is(out_data_size)] uint8 *out_data, [in] uint32 out_data_size, [out,ref] uint32 *needed, [in,out,ref] uint32 *status_code ); /******************/ /* Function: 0x59 */ typedef [bitmap32bit] bitmap { APD_STRICT_UPGRADE = 0x00000001, APD_STRICT_DOWNGRADE = 0x00000002, APD_COPY_ALL_FILES = 0x00000004, APD_COPY_NEW_FILES = 0x00000008, APD_COPY_FROM_DIRECTORY = 0x00000010, APD_DONT_COPY_FILES_TO_CLUSTER = 0x00001000, APD_COPY_TO_ALL_SPOOLERS = 0x00002000, APD_RETURN_BLOCKING_STATUS_CODE = 0x00010000 } spoolss_AddPrinterDriverExFlags; [public] WERROR spoolss_AddPrinterDriverEx( [in,unique] [string,charset(UTF16)] uint16 *servername, [in,ref] spoolss_AddDriverInfoCtr *info_ctr, [in] spoolss_AddPrinterDriverExFlags flags ); /******************/ /* Function: 0x5a */ [todo] WERROR spoolss_5a( ); /******************/ /* Function: 0x5b */ [todo] WERROR spoolss_5b( ); /******************/ /* Function: 0x5c */ [todo] WERROR spoolss_5c( ); /******************/ /* Function: 0x5d */ [todo] WERROR spoolss_5d( ); /******************/ /* Function: 0x5e */ [todo] WERROR spoolss_5e( ); /******************/ /* 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( ); }