] interface spoolss
{
typedef [v1_enum] enum winreg_Type winreg_Type;
- typedef [gensize] struct {
+ typedef [gensize,noprint] struct {
uint16 year;
uint16 month;
uint16 day_of_week;
} spoolss_Time;
typedef struct {
- [value(ndr_size_spoolss_Time(time, ndr->iconv_convenience, ndr->flags))] uint32 size;
+ [value(ndr_size_spoolss_Time(time, ndr->flags))] uint32 size;
[unique] spoolss_Time *time;
} spoolss_TimeCtr;
typedef enum {
PROCESSOR_ARCHITECTURE_INTEL = 0x0000,
+ PROCESSOR_ARCHITECTURE_ARM = 0x0005,
PROCESSOR_ARCHITECTURE_IA64 = 0x0006,
PROCESSOR_ARCHITECTURE_AMD64 = 0x0009
} spoolss_ProcessorArchitecture;
typedef [v1_enum] enum {
+ PROCESSOR_ARM = 0x00000000,
PROCESSOR_INTEL_386 = 0x00000182,
PROCESSOR_INTEL_486 = 0x000001E6,
PROCESSOR_INTEL_PENTIUM = 0x0000024A,
uint16 caColorfulness;
uint16 caRedGreenTint;
uint16 wCoreJTExpSize;
- [value(ndr_size_spoolss_PSDRVEXTRA(r, ndr->iconv_convenience, ndr->flags) + wCoreJTExpSize)] uint16 wCoreFullSize;
+ [value(ndr_size_spoolss_PSDRVEXTRA(r, ndr->flags) + wCoreJTExpSize)] uint16 wCoreFullSize;
uint32 fxScrFreq;
uint32 fxScrAngle;
spoolss_DMPS_Dialect iDialect;
[value(SPOOLSS_DM_SIGNATURE_UNIDRVEXTRA)] spoolss_DM_Signature dwSignature;
[value(0x0022)] uint16 wVer;
uint16 wCoreJTExpSize;
- [value(ndr_size_spoolss_UNIDRVEXTRA(r, ndr->iconv_convenience, ndr->flags) + wCoreJTExpSize)] uint16 wCoreFullSize;
+ [value(ndr_size_spoolss_UNIDRVEXTRA(r, ndr->flags) + wCoreJTExpSize)] uint16 wCoreFullSize;
uint16 wOEMExtra;
uint32 dwChecksum32;
spoolss_DMUNI_Flags dwFlags;
const int MAXDEVICENAME = 32;
typedef [public,gensize] struct {
- [charset(UTF16)] uint16 devicename[MAXDEVICENAME];
+ [charset(UTF16),to_null] uint16 devicename[MAXDEVICENAME];
spoolss_DeviceModeSpecVersion specversion;
uint16 driverversion;
uint16 size;
uint16 yresolution;
spoolss_DeviceModeTTOption ttoption;
spoolss_DeviceModeCollate collate;
- [charset(UTF16)] uint16 formname[MAXDEVICENAME];
+ [charset(UTF16),to_null] uint16 formname[MAXDEVICENAME];
uint16 logpixels; /* reserved */
uint32 bitsperpel; /* reserved */
uint32 pelswidth; /* reserved */
} spoolss_PrinterAttributes;
typedef [public,gensize] struct {
- spoolss_PrinterAttributes flags;
+ spoolss_EnumPrinterFlags flags;
[relative] nstring *description;
[relative] nstring *name;
[relative] nstring *comment;
/******************/
/* Function: 0x01 */
typedef struct {
- [value(_ndr_size_spoolss_DeviceMode(devmode, ndr->iconv_convenience, ndr->flags))] uint32 _ndr_size;
+ [value(_ndr_size_spoolss_DeviceMode(devmode, ndr->flags))] uint32 _ndr_size;
[subcontext(4),subcontext_size(_ndr_size)] spoolss_DeviceMode *devmode;
} spoolss_DevmodeContainer;
[string,charset(UTF16)] uint16 *print_processor;
[string,charset(UTF16)] uint16 *parameters;
[string,charset(UTF16)] uint16 *driver_name;
- uint32 _devmode_ptr; /* pointer to truncated devicemode */
+ uint32 *_devmode_ptr; /* pointer to truncated devicemode */
[string,charset(UTF16)] uint16 *text_status;
- uint32 _secdesc_ptr;
+ uint32 *_secdesc_ptr;
spoolss_JobStatus status;
[range(0,99)] uint32 priority;
uint32 position;
[string,charset(UTF16)] uint16 *print_processor;
[string,charset(UTF16)] uint16 *parameters;
[string,charset(UTF16)] uint16 *driver_name;
- uint32 _devmode_ptr; /* pointer to truncated devicemode */
+ uint32 *_devmode_ptr; /* pointer to truncated devicemode */
[string,charset(UTF16)] uint16 *text_status;
- uint32 _secdesc_ptr;
+ uint32 *_secdesc_ptr;
spoolss_JobStatus status;
[range(0,99)] uint32 priority;
uint32 position;
[string,charset(UTF16)] uint16 *drivername;
[string,charset(UTF16)] uint16 *comment;
[string,charset(UTF16)] uint16 *location;
- uint32 devmode_ptr;
+ uint32 *devmode_ptr;
[string,charset(UTF16)] uint16 *sepfile;
[string,charset(UTF16)] uint16 *printprocessor;
[string,charset(UTF16)] uint16 *datatype;
[string,charset(UTF16)] uint16 *parameters;
- uint32 secdesc_ptr;
+ uint32 *secdesc_ptr;
spoolss_PrinterAttributes attributes;
[range(0,99)] uint32 priority;
uint32 defaultpriority;
} spoolss_SetPrinterInfo2;
typedef struct {
- uint32 sec_desc_ptr;
+ uint32 *sec_desc_ptr;
} spoolss_SetPrinterInfo3;
typedef struct {
} spoolss_SetPrinterInfo7;
typedef struct {
- uint32 devmode_ptr;
+ uint32 *devmode_ptr;
} spoolss_SetPrinterInfo8;
typedef struct {
- uint32 devmode_ptr;
+ uint32 *devmode_ptr;
} spoolss_SetPrinterInfo9;
typedef [switch_type(uint32)] union {
[switch_is(level)] spoolss_SetPrinterInfo info;
} spoolss_SetPrinterInfoCtr;
- WERROR spoolss_SetPrinter(
+ [public] WERROR spoolss_SetPrinter(
[in,ref] policy_handle *handle,
[in,ref] spoolss_SetPrinterInfoCtr *info_ctr,
[in,ref] spoolss_DevmodeContainer *devmode_ctr,
/* Function: 0x09 */
typedef [public] struct {
- [value((ndr_size_spoolss_StringArray(r, ndr->iconv_convenience, ndr->flags)-4)/2)] uint32 _ndr_size;
+ [value((ndr_size_spoolss_StringArray(r, ndr->flags)-4)/2)] uint32 _ndr_size;
/*[subcontext(0),subcontext_size(_ndr_size*2)]*/ nstring_array string;
} spoolss_StringArray;
SPOOLSS_DRIVER_VERSION_9X = 0,
SPOOLSS_DRIVER_VERSION_NT35 = 1,
SPOOLSS_DRIVER_VERSION_NT4 = 2,
- SPOOLSS_DRIVER_VERSION_200X = 3
+ SPOOLSS_DRIVER_VERSION_200X = 3,
+ SPOOLSS_DRIVER_VERSION_2012 = 4
} spoolss_DriverOSVersion;
typedef struct {
[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;
+ [value(((ndr_size_spoolss_StringArray(dependent_files, ndr->flags)-4)/2))] uint32 _ndr_size_dependent_files;
spoolss_StringArray *dependent_files;
} spoolss_AddDriverInfo3;
[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;
+ [value(((ndr_size_spoolss_StringArray(dependent_files, 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;
+ [value(((ndr_size_spoolss_StringArray(previous_names, ndr->flags)-4)/2))] uint32 _ndr_size_previous_names;
spoolss_StringArray *previous_names;
} spoolss_AddDriverInfo4;
typedef [bitmap32bit] bitmap {
- PRINTER_DRIVER_PACKAGE_AWARE = 0x00000002
+ PRINTER_DRIVER_PACKAGE_AWARE = 0x00000001,
+ PRINTER_DRIVER_XPS = 0x00000002,
+ PRINTER_DRIVER_SANDBOX_ENABLED = 0x00000004,
+ PRINTER_DRIVER_CLASS = 0x00000008,
+ PRINTER_DRIVER_DERIVED = 0x00000010,
+ PRINTER_DRIVER_NOT_SHAREABLE = 0x00000020,
+ PRINTER_DRIVER_CATEGORY_FAX = 0x00000040,
+ PRINTER_DRIVER_CATEGORY_FILE = 0x00000080,
+ PRINTER_DRIVER_CATEGORY_VIRTUAL = 0x00000100,
+ PRINTER_DRIVER_CATEGORY_SERVICE = 0x00000200,
+ PRINTER_DRIVER_SOFT_RESET_REQUIRED = 0x00000400
} spoolss_DriverAttributes;
typedef struct {
[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;
+ [value(((ndr_size_spoolss_StringArray(dependent_files, 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;
+ [value(((ndr_size_spoolss_StringArray(previous_names, ndr->flags)-4)/2))] uint32 _ndr_size_previous_names;
spoolss_StringArray *previous_names;
NTTIME driver_date;
hyper driver_version;
[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;
+ [value(((ndr_size_spoolss_StringArray(dependent_files, 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;
+ [value(((ndr_size_spoolss_StringArray(previous_names, ndr->flags)-4)/2))] uint32 _ndr_size_previous_names;
spoolss_StringArray *previous_names;
NTTIME driver_date;
hyper driver_version;
[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;
+ [value(((ndr_size_spoolss_StringArray(color_profiles, 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_DriverAttributes printer_driver_attributes;
+ [value(((ndr_size_spoolss_StringArray(core_driver_dependencies, 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;
[relative] nstring *vendor_setup;
[relative] nstring_array *color_profiles;
[relative] nstring *inf_path;
- uint32 printer_driver_attributes;
+ spoolss_DriverAttributes printer_driver_attributes;
[relative] nstring_array *core_driver_dependencies;
NTTIME min_inbox_driver_ver_date;
hyper min_inbox_driver_ver_version;
spoolss_DriverOSVersion version;
[relative] nstring *driver_name;
[relative] nstring *architecture;
- [relative] [size_is(file_count)] spoolss_DriverFileInfo *file_info;
+ [relative,size_is(file_count),flag(NDR_ALIGN4)] spoolss_DriverFileInfo *file_info;
uint32 file_count;
[relative] nstring *monitor_name;
[relative] nstring *default_datatype;
[default];
} spoolss_DocumentInfo;
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] spoolss_DocumentInfo info;
+ } spoolss_DocumentInfoCtr;
+
WERROR spoolss_StartDocPrinter(
[in,ref] policy_handle *handle,
- [in] uint32 level,
- [in,switch_is(level)] spoolss_DocumentInfo info,
+ [in,ref] spoolss_DocumentInfoCtr *info_ctr,
[out,ref] uint32 *job_id
);
const string SPL_ARCH_W32PPC = "W32PPC";
const string SPL_ARCH_IA64 = "IA64";
const string SPL_ARCH_X64 = "x64";
+ const string SPL_ARCH_ARM = "ARM";
const string SPOOLSS_ARCHITECTURE_ALL = "All";
const string SPOOLSS_ARCHITECTURE_ALL_CLUSTER = "AllCluster";
const string SPOOLSS_ARCHITECTURE_IA_64 = "Windows IA64";
const string SPOOLSS_ARCHITECTURE_x64 = "Windows x64";
const string SPOOLSS_ARCHITECTURE_4_0 = "Windows 4.0";
+ const string SPOOLSS_ARCHITECTURE_ARM = "Windows ARM";
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;
+ [value(ndr_size_spoolss_OSVersion(r,ndr->flags))] uint32 _ndr_size;
uint32 major;
uint32 minor;
uint32 build;
} spoolss_OSVersion;
typedef [public,gensize] struct {
- [value(ndr_size_spoolss_OSVersionEx(r,ndr->iconv_convenience,ndr->flags))] uint32 _ndr_size;
+ [value(ndr_size_spoolss_OSVersionEx(r,ndr->flags))] uint32 _ndr_size;
uint32 major;
uint32 minor;
uint32 build;
const string SPOOL_REG_URL = "url";
const string SPOOL_REG_VERSIONNUMBER = "versionNumber";
- WERROR spoolss_GetPrinterData(
+ [public] WERROR spoolss_GetPrinterData(
[in,ref] policy_handle *handle,
[in] [string,charset(UTF16)] uint16 value_name[],
[out,ref] winreg_Type *type,
[case(2)] spoolss_AddFormInfo2 *info2;
} spoolss_AddFormInfo;
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] spoolss_AddFormInfo info;
+ } spoolss_AddFormInfoCtr;
+
WERROR spoolss_AddForm(
[in,ref] policy_handle *handle,
- [in] uint32 level,
- [in,switch_is(level)] spoolss_AddFormInfo info
+ [in,ref] spoolss_AddFormInfoCtr *info_ctr
);
/******************/
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
+ [in,ref] spoolss_AddFormInfoCtr *info_ctr
);
/******************/
/******************/
/* Function: 0x25 */
+
+ typedef [public,gensize] struct {
+ [string,charset(UTF16)] uint16 *port_name;
+ } spoolss_SetPortInfo1;
+
+ typedef [public,gensize] struct {
+ [string,charset(UTF16)] uint16 *port_name;
+ [string,charset(UTF16)] uint16 *monitor_name;
+ [string,charset(UTF16)] uint16 *description;
+ spoolss_PortType port_type;
+ uint32 reserved;
+ } spoolss_SetPortInfo2;
+
+ typedef [public,gensize] struct {
+ spoolss_PortStatus status;
+ [string,charset(UTF16)] uint16 *status_string;
+ spoolss_PortSeverity severity;
+ } spoolss_SetPortInfo3;
+
+ typedef [public,gensize] struct {
+ [string,charset(UTF16)] uint16 *port_name;
+ DATA_BLOB monitor_data; /* relative ?? */
+ } spoolss_SetPortInfoFF;
+
+ typedef [switch_type(uint32)] union {
+ [case(1)] spoolss_SetPortInfo1 *info1;
+ [case(2)] spoolss_SetPortInfo2 *info2;
+ [case(3)] spoolss_SetPortInfo3 *info3;
+ [case(0xff)] spoolss_SetPortInfoFF *infoFF;
+ } spoolss_SetPortInfo;
+
+ typedef struct {
+ uint32 level;
+ [switch_is(level)] spoolss_SetPrinterInfo info;
+ } spoolss_SetPortInfoContainer;
+
WERROR spoolss_AddPort(
[in,unique] [string,charset(UTF16)] uint16 *server_name,
[in] uint32 unknown,
/******************/
/* Function: 0x27 */
- [todo] WERROR spoolss_DeletePort(
+ WERROR spoolss_DeletePort(
+ [in,unique] [string,charset(UTF16)] uint16 *server_name,
+ [in] uint32 ptr,
+ [in,ref] [string,charset(UTF16)] uint16 *port_name
);
/******************/
/******************/
/* Function: 0x29 */
- [todo] WERROR spoolss_PlayGDIScriptOnPrinterIC(
+ WERROR spoolss_PlayGDIScriptOnPrinterIC(
+ [in,ref] policy_handle *gdi_handle,
+ [in,ref] [size_is(cIn)] uint8 *pIn,
+ [in] uint32 cIn,
+ [out,ref] [size_is(cOut)] uint8 *pOut,
+ [in] uint32 cOut,
+ [in] uint32 ul
);
/******************/
/******************/
/* Function: 0x35 */
- WERROR spoolss_GetPrinterDriver2(
+ [public] WERROR spoolss_GetPrinterDriver2(
[in,ref] policy_handle *handle,
[in,unique] [string,charset(UTF16)] uint16 *architecture,
[in] uint32 level,
/******************/
/* Function: 0x3d */
- [todo] WERROR spoolss_AddPortEx(
+
+ typedef struct {
+ uint32 monitor_data_size;
+ [size_is(monitor_data_size),unique] uint8 *monitor_data;
+ } spoolss_PortVarContainer;
+
+ WERROR spoolss_AddPortEx(
+ [in,unique] [string,charset(UTF16)] uint16 *servername,
+ [in,ref] spoolss_SetPortInfoContainer *port_ctr,
+ [in,ref] spoolss_PortVarContainer *port_var_ctr,
+ [in,unique] [string,charset(UTF16)] uint16 *monitor_name
);
/******************/
[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,
+ [in] spoolss_UserLevelCtr userlevel_ctr,
[out,ref] policy_handle *handle
);
/******************/
/* Function: 0x47 */
- [todo] WERROR spoolss_47(
+ WERROR spoolss_SetPort(
+ [in,unique] [string,charset(UTF16)] uint16 *servername,
+ [in,unique] [string,charset(UTF16)] uint16 *port_name,
+ [in,ref] spoolss_SetPortInfoContainer *port_ctr
);
/******************/
[relative] nstring *value_name;
[value(2*strlen_m_term(value_name))] uint32 value_name_len;
winreg_Type type;
- [relative,subcontext(0),subcontext_size(data_length),flag(NDR_REMAINING)] DATA_BLOB *data;
- [value(data->length)] uint32 data_length;
+ [relative,subcontext(0),subcontext_size(data_length),flag(NDR_REMAINING|ndr_spoolss_PrinterEnumValues_align(r->type))] DATA_BLOB *data;
+ [value(data ? data->length : 0)] uint32 data_length;
} spoolss_PrinterEnumValues;
[public,noopnum,noprint] WERROR _spoolss_EnumPrinterDataEx(
/******************/
/* Function: 0x55 */
- [todo] WERROR spoolss_55(
+ WERROR spoolss_AddPerMachineConnection(
+ [in,unique] [string,charset(UTF16)] uint16 *server,
+ [in,ref] [string,charset(UTF16)] uint16 *printername,
+ [in,ref] [string,charset(UTF16)] uint16 *printserver,
+ [in,ref] [string,charset(UTF16)] uint16 *provider
);
/******************/
/* Function: 0x56 */
- [todo] WERROR spoolss_56(
+ WERROR spoolss_DeletePerMachineConnection(
+ [in,unique] [string,charset(UTF16)] uint16 *server,
+ [in,ref] [string,charset(UTF16)] uint16 *printername
);
/******************/
/* Function: 0x57 */
- [todo] WERROR spoolss_57(
+ [todo] WERROR spoolss_EnumPerMachineConnections(
);
/******************/
PROTOCOL_LPR_TYPE = 2
} spoolss_PortProtocol;
- typedef [public] struct {
+ typedef [public,gensize] struct {
[charset(UTF16)] uint16 portname[64];
[value(0x00000001)] uint32 version;
spoolss_PortProtocol protocol;
- [value(sizeof(r))] uint32 size;
+ [value(ndr_size_spoolss_PortData1(r, ndr->flags))] uint32 size;
uint32 reserved;
[charset(UTF16)] uint16 hostaddress[49];
[charset(UTF16)] uint16 snmpcommunity[33];
uint32 snmp_dev_index;
} spoolss_PortData1;
- typedef [public] struct {
+ typedef [public,gensize] struct {
[charset(UTF16)] uint16 portname[64];
[value(0x00000002)] uint32 version;
spoolss_PortProtocol protocol;
- [value(sizeof(r))] uint32 size;
+ [value(ndr_size_spoolss_PortData2(r, ndr->flags))] uint32 size;
uint32 reserved;
[charset(UTF16)] uint16 hostaddress[128];
[charset(UTF16)] uint16 snmpcommunity[33];
/* Function: 0x6d */
[todo] WERROR spoolss_6d(
);
+
+ /******************/
+ /* Function: 0x6e */
+ [todo] WERROR spoolss_RpcGetJobNamedPropertyValue(
+ );
+
+ /******************/
+ /* Function: 0x6f */
+ [todo] WERROR spoolss_RpcSetJobNamedProperty(
+ );
+
+ /******************/
+ /* Function: 0x70 */
+ [todo] WERROR spoolss_RpcDeleteJobNamedProperty(
+ );
+
+ /******************/
+ /* Function: 0x71 */
+ [todo] WERROR spoolss_RpcEnumJobNamedProperties(
+ );
}