] interface spoolss
{
typedef [v1_enum] enum winreg_Type winreg_Type;
- typedef struct {
+ typedef [gensize] struct {
uint16 year;
uint16 month;
uint16 day_of_week;
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;
+
typedef struct {
[relative] nstring *printername;
[relative] nstring *servername;
uint32 cjobs;
uint32 total_jobs;
uint32 total_bytes;
- spoolss_Time time;
+ spoolss_Time time;
uint32 global_counter;
uint32 total_pages;
uint32 version;
- uint32 unknown10;
- uint32 unknown11;
- uint32 unknown12;
+ uint32 free_build;
+ uint32 spooling;
+ uint32 max_spooling;
uint32 session_counter;
- uint32 unknown14;
- uint32 printer_errors;
- uint32 unknown16;
- uint32 unknown17;
- uint32 unknown18;
- uint32 unknown19;
+ 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;
- uint32 unknown21;
+ WERROR last_error;
uint32 status;
- uint32 unknown23;
+ uint32 enumerate_network_printers;
uint32 c_setprinter;
- uint16 unknown25;
- uint16 unknown26;
- uint32 unknown27;
- uint32 unknown28;
- uint32 unknown29;
+ 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 [public,gensize] struct {
[charset(UTF16)] uint16 devicename[32];
uint16 specversion;
uint16 driverversion;
uint16 size;
[value(r->driverextra_data.length)] uint16 __driverextra_length;
- uint32 fields;
+ spoolss_DeviceModeFields fields;
uint16 orientation;
uint16 papersize;
uint16 paperlength;
[in] uint32 offered,
[out,unique] DATA_BLOB *info,
[out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count
);
[public,noopnum,noprint] void __spoolss_EnumPrinters(
[in] uint32 level,
/* what we have here is a subcontext containing an array of no discriminant unions
* and the array has no size in front
*/
- [out,unique,switch_is(level),size_is(count)] spoolss_PrinterInfo *info,
- [out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count,
+ [out,unique,switch_is(level),size_is(*count)] spoolss_PrinterInfo *info,
+ [out,ref] uint32 *needed
);
/******************/
[in,unique] [string,charset(UTF16)] uint16 *printername,
[in,unique] [string,charset(UTF16)] uint16 *datatype,
[in] spoolss_DevmodeContainer devmode_ctr,
- [in] uint32 access_mask,
+ [in] spoolss_AccessRights access_mask,
[out,ref] policy_handle *handle
);
/******************/
/* Function: 0x02 */
+
+ /* 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 struct {
uint32 job_id;
[relative] nstring *printer_name;
[relative] nstring *document_name;
[relative] nstring *data_type;
[relative] nstring *text_status;
- uint32 status;
+ spoolss_JobStatus status;
uint32 priority;
uint32 position;
uint32 total_pages;
uint32 pages_printed;
- spoolss_Time time;
+ spoolss_Time submitted;
} spoolss_JobInfo1;
+ typedef 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;
+ 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 struct {
+ uint32 job_id;
+ uint32 next_job_id;
+ uint32 reserved;
+ } spoolss_JobInfo3;
+
+ typedef 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;
+ 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] union {
[case(1)] spoolss_JobInfo1 info1;
- [case(2)]; /* TODO */
- [case(3)]; /* TODO */
+ [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;
+ 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;
+ spoolss_DeviceMode *devmode;
+ [string,charset(UTF16)] uint16 *text_status;
+ security_descriptor *secdesc;
+ spoolss_JobStatus status;
+ 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;
+ spoolss_DeviceMode *devmode;
+ [string,charset(UTF16)] uint16 *text_status;
+ security_descriptor *secdesc;
+ spoolss_JobStatus status;
+ 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_JobInfo info;
+ [switch_is(level)] spoolss_SetJobInfo info;
} spoolss_JobInfoContainer;
typedef [v1_enum] enum {
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_LAST_PAGE_EJECTED = 7,
+ SPOOLSS_JOB_CONTROL_RETAIN = 8,
+ SPOOLSS_JOB_CONTROL_RELEASE = 9
} spoolss_JobControl;
WERROR spoolss_SetJob(
[in] uint32 offered,
[out,unique] DATA_BLOB *info,
[out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count
);
[public,noopnum,noprint] void __spoolss_EnumJobs(
[in] uint32 level,
[in] uint32 level,
[in,unique] DATA_BLOB *buffer,
[in] uint32 offered,
- [out,unique,switch_is(level),size_is(count)] spoolss_JobInfo *info,
- [out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count,
+ [out,unique,switch_is(level),size_is(*count)] spoolss_JobInfo *info,
+ [out,ref] uint32 *needed
);
/******************/
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_EnumPrinterFlags flags;
+ [string,charset(UTF16)] uint16 *name;
+ [string,charset(UTF16)] uint16 *description;
+ [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;
+ 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_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(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] uint32 level,
- [in,switch_is(level)] spoolss_SetPrinterInfo info,
- [in] spoolss_DevmodeContainer devmode_ctr,
- [in] sec_desc_buf secdesc_ctr,
+ [in,ref] spoolss_SetPrinterInfoCtr *info_ctr,
+ [in,ref] spoolss_DevmodeContainer *devmode_ctr,
+ [in,ref] sec_desc_buf *secdesc_ctr,
[in] spoolss_PrinterControl command
);
/******************/
/* Function: 0x09 */
- [todo] WERROR spoolss_AddPrinterDriver(
- );
+
+ 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 {
- [relative] nstring *driver_name;
- } spoolss_DriverInfo1;
+ [string,charset(UTF16)] uint16 *driver_name;
+ } spoolss_AddDriverInfo1;
- typedef [v1_enum] enum {
+ typedef [v1_enum,public] enum {
SPOOLSS_DRIVER_VERSION_9X = 0,
SPOOLSS_DRIVER_VERSION_NT35 = 1,
SPOOLSS_DRIVER_VERSION_NT4 = 2,
} 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 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;
+ uint32 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 *config_file;
} spoolss_DriverInfo2;
- typedef struct {
+ typedef [public,gensize] struct {
spoolss_DriverOSVersion version;
[relative] nstring *driver_name;
[relative] nstring *architecture;
[relative] nstring *default_datatype;
} spoolss_DriverInfo3;
- typedef struct {
+ typedef [public,gensize] struct {
spoolss_DriverOSVersion version;
[relative] nstring *driver_name;
[relative] nstring *architecture;
[relative] nstring_array *previous_names;
} spoolss_DriverInfo4;
- typedef struct {
+ typedef [public,gensize] struct {
spoolss_DriverOSVersion version;
[relative] nstring *driver_name;
[relative] nstring *architecture;
uint32 driver_version;
} spoolss_DriverInfo5;
- typedef struct {
+ typedef [public,gensize] struct {
spoolss_DriverOSVersion version;
[relative] nstring *driver_name;
[relative] nstring *architecture;
[relative] nstring *monitor_name;
[relative] nstring *default_datatype;
[relative] nstring_array *previous_names;
- NTTIME driver_data;
+ NTTIME driver_date;
hyper driver_version;
[relative] nstring *manufacturer_name;
[relative] nstring *manufacturer_url;
[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] union {
[case(1)] spoolss_DriverInfo1 info1;
[case(2)] spoolss_DriverInfo2 info2;
[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;
[in] uint32 offered,
[out,unique] DATA_BLOB *info,
[out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count
);
[public,noopnum,noprint] void __spoolss_EnumPrinterDrivers(
[in] uint32 level,
[in] uint32 level,
[in,unique] DATA_BLOB *buffer,
[in] uint32 offered,
- [out,unique,switch_is(level),size_is(count)] spoolss_DriverInfo *info,
- [out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count,
+ [out,unique,switch_is(level),size_is(*count)] spoolss_DriverInfo *info,
+ [out,ref] uint32 *needed
);
/******************/
/******************/
/* Function: 0x0c */
- typedef struct {
+ typedef [public,gensize] struct {
nstring directory_name;
} spoolss_DriverDirectoryInfo1;
[in] uint32 offered,
[out,unique] DATA_BLOB *info,
[out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count
);
[public,noopnum,noprint] void __spoolss_EnumPrintProcessors(
[in] uint32 level,
[in] uint32 level,
[in,unique] DATA_BLOB *buffer,
[in] uint32 offered,
- [out,unique,switch_is(level),size_is(count)] spoolss_PrintProcessorInfo *info,
- [out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count,
+ [out,unique,switch_is(level),size_is(*count)] spoolss_PrintProcessorInfo *info,
+ [out,ref] uint32 *needed
);
/******************/
/* Function: 0x10 */
- [todo] WERROR spoolss_GetPrintProcessorDirectory(
+ 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: 0x18 */
- [todo] WERROR spoolss_AddJob(
+ 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 */
- [todo] WERROR spoolss_ScheduleJob(
+ WERROR spoolss_ScheduleJob(
+ [in,ref] policy_handle *handle,
+ [in] uint32 jobid
);
/******************/
/* Function: 0x1a */
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;
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 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;
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] uint32 offered,
[out,unique] DATA_BLOB *info,
[out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count
);
[public,noopnum,noprint] void __spoolss_EnumForms(
[in] uint32 level,
[in] uint32 level,
[in,unique] DATA_BLOB *buffer,
[in] uint32 offered,
- [out,unique,switch_is(level),size_is(count)] spoolss_FormInfo *info,
- [out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count,
+ [out,unique,switch_is(level),size_is(*count)] spoolss_FormInfo *info,
+ [out,ref] uint32 *needed
);
typedef struct {
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 struct {
+ spoolss_PortStatus status;
+ [relative] nstring *status_string;
+ spoolss_PortSeverity severity;
+ } spoolss_PortInfo3;
+
+ typedef 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)]; /* TODO */
+ [case(3)] spoolss_PortInfo3 info3;
+ [case(0xff)] spoolss_PortInfoFF infoFF;
[default];
} spoolss_PortInfo;
[in] uint32 offered,
[out,unique] DATA_BLOB *info,
[out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count
);
[public,noopnum,noprint] void __spoolss_EnumPorts(
[in] uint32 level,
[in] uint32 level,
[in,unique] DATA_BLOB *buffer,
[in] uint32 offered,
- [out,unique,switch_is(level),size_is(count)] spoolss_PortInfo *info,
- [out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count,
+ [out,unique,switch_is(level),size_is(*count)] spoolss_PortInfo *info,
+ [out,ref] uint32 *needed
);
/******************/
[in] uint32 offered,
[out,unique] DATA_BLOB *info,
[out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count
);
[public,noopnum,noprint] void __spoolss_EnumMonitors(
[in] uint32 level,
[in] uint32 level,
[in,unique] DATA_BLOB *buffer,
[in] uint32 offered,
- [out,unique,switch_is(level),size_is(count)] spoolss_MonitorInfo *info,
- [out,ref] uint32 *needed,
- [out] uint32 count
+ [out,ref] uint32 *count,
+ [out,unique,switch_is(level),size_is(*count)] spoolss_MonitorInfo *info,
+ [out,ref] uint32 *needed
);
/******************/
/******************/
/* Function: 0x34 */
- [todo] WERROR spoolss_ResetPrinter(
+ WERROR spoolss_ResetPrinter(
+ [in,ref] policy_handle *handle,
+ [in,unique] [string,charset(UTF16)] uint16 *data_type,
+ [in,ref] spoolss_DevmodeContainer *devmode_ctr
);
/******************/
[in] uint32 offered,
[in] uint32 client_major_version,
[in] uint32 client_minor_version,
- [out,unique] DATA_BLOB *info,
+ [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
[in,string,charset(UTF16)] uint16 server_name[],
[in] uint32 printer_local,
[in] winreg_Type type,
- [in] uint32 unknown1,
- [in] uint32 unknown2,
+ [in,range(0,512)] uint32 bufsize,
+ [in,unique,size_is(bufsize)] uint8 *buffer,
[out,ref] policy_handle *handle
);
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 = (PRINTER_CHANGE_ADD_PRINTER |
- PRINTER_CHANGE_SET_PRINTER |
- PRINTER_CHANGE_DELETE_PRINTER |
- PRINTER_CHANGE_FAILED_CONNECTION_PRINTER); /* 0x000000FF */
+ const int PRINTER_CHANGE_PRINTER = 0x000000FF;
- const int PRINTER_CHANGE_JOB = (PRINTER_CHANGE_ADD_JOB |
- PRINTER_CHANGE_SET_JOB |
- PRINTER_CHANGE_DELETE_JOB |
- PRINTER_CHANGE_WRITE_JOB); /* 0x0000FF00 */
+ const int PRINTER_CHANGE_JOB = 0x0000FF00;
const int PRINTER_CHANGE_FORM = (PRINTER_CHANGE_ADD_FORM |
PRINTER_CHANGE_SET_FORM |
PRINTER_CHANGE_CONFIGURE_PORT |
PRINTER_CHANGE_DELETE_PORT); /* 0x00700000 */
- const int PRINTER_CHANGE_PRINT_PROCESSOR = (PRINTER_CHANGE_ADD_PRINT_PROCESSOR |
- PRINTER_CHANGE_DELETE_PRINT_PROCESSOR); /* 0x07000000 */
+ 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_JOB |
+ const int PRINTER_CHANGE_ALL = (PRINTER_CHANGE_PRINTER |
+ PRINTER_CHANGE_JOB |
PRINTER_CHANGE_FORM |
PRINTER_CHANGE_PORT |
PRINTER_CHANGE_PRINT_PROCESSOR |
uint32 u3;
uint32 count;
[size_is(count)] spoolss_Field *fields;
- } spoolss_NotifyOptionsArray;
+ } spoolss_NotifyOptionType;
+
+ typedef [bitmap32bit] bitmap {
+ PRINTER_NOTIFY_OPTIONS_REFRESH = 0x00000001
+ } spoolssNotifyOptionFlags;
typedef struct {
- uint32 version;
- uint32 flags;
+ [value(2)] uint32 version;
+ spoolssNotifyOptionFlags flags;
uint32 count;
- [size_is(count)] spoolss_NotifyOptionsArray *options;
- } spoolss_NotifyOptionsContainer;
+ [size_is(count)] spoolss_NotifyOptionType *types;
+ } spoolss_NotifyOption;
[public] WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(
[in,ref] policy_handle *handle,
- [in] uint32 flags,
+ [in] spoolss_PrinterChangeFlags flags,
[in] uint32 options,
- [in,unique] [string,charset(UTF16)] uint16 *str,
+ [in,unique] [string,charset(UTF16)] uint16 *local_machine,
[in] uint32 printer_local,
- [in,unique] spoolss_NotifyOptionsContainer *t1
+ [in,unique] spoolss_NotifyOption *notify_options
);
/******************/
/* Function: 0x42 */
- [todo] WERROR spoolss_RouterRefreshPrinterChangeNotification(
- );
typedef struct {
uint32 size;
[size_is(size/2),unique,charset(UTF16)] uint16 *string;
- } spoolss_NotifyUTF16String;
-
- typedef struct {
- uint32 size;
- [size_is(size),charset(DOS)] uint8 *string;
- } spoolss_NotifyDOSString;
-
- typedef struct {
- uint16 data[8];
- } spoolss_NotifyBlobData;
+ } spoolss_NotifyString;
- typedef struct {
- uint32 len;
- [unique] spoolss_NotifyBlobData *data;
- } spoolss_NotifyBlob;
+ 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)] dlong integer;
- [case(2)] spoolss_NotifyUTF16String utf16_string;
- [case(3)] spoolss_NotifyDOSString ascii_string;
- [case(4)] spoolss_NotifyBlob blob;
- [case(5)] spoolss_NotifyDOSString ascii_string;
+ [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;
spoolss_Field field;
- uint32 variable_type;
+ spoolss_NotifyTable variable_type;
uint32 job_id;
[switch_is(variable_type)] spoolss_NotifyData data;
} spoolss_Notify;
typedef struct {
- uint32 version;
+ [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_RemoteFindNextPrinterChangeNotifyEx(
+ [public] WERROR spoolss_RouterRefreshPrinterChangeNotify(
[in,ref] policy_handle *handle,
[in] uint32 change_low,
- [in,unique] spoolss_NotifyOptionsContainer *container,
+ [in,unique] spoolss_NotifyOption *options,
[out,ref] spoolss_NotifyInfo **info
);
[string,charset(UTF16)] uint16 *client;
[string,charset(UTF16)] uint16 *user;
uint32 build;
- uint32 major;
- uint32 minor;
- uint32 processor;
+ spoolss_MajorVersion major;
+ spoolss_MinorVersion minor;
+ spoolss_ProcessorArchitecture processor;
} spoolss_UserLevel1;
- typedef union {
+ 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_ADMINISTER = 0x00000010,
+ JOB_ACCESS_READ = 0x00000020
} spoolss_AccessRights;
/* Access rights for print servers */
[in,unique] [string,charset(UTF16)] uint16 *printername,
[in,unique] [string,charset(UTF16)] uint16 *datatype,
[in] spoolss_DevmodeContainer devmode_ctr,
- [in] uint32 access_mask,
+ [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] uint32 level,
- [in,unique,switch_is(level)] spoolss_PrinterInfo *info,
- [in] spoolss_DevmodeContainer devmode_ctr,
- [in,unique] security_descriptor *secdesc,
- [in] uint32 ulevel,
- [in,switch_is(ulevel)] spoolss_UserLevel userlevel
+ [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
);
/******************/
[in] [string,charset(UTF16)] uint16 key_name[],
[in] [string,charset(UTF16)] uint16 value_name[],
[in] uint32 type,
- [in] DATA_BLOB buffer,
+ [in,ref] [size_is(offered)] uint8 *buffer,
[in] uint32 offered
);
/******************/
/* 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[],
/******************/
/* Function: 0x59 */
- [public,todo] WERROR spoolss_AddPrinterDriverEx(
+
+ 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
);
/******************/