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,
uint32 dwSize;
[value(SPOOLSS_DM_SIGNATURE_JTEXP)] spoolss_DM_Signature dwSignature;
[value(0)] uint32 dwVersion;
- [value(16)] uint32 wJTHdrSize;
- uint32 wCoreMFOSize;
- [string,charset(UTF16)] uint16 *ModelName;
- nstring_array FeatureOptionPairs;
+ [value(16)] uint16 wJTHdrSize;
+ uint16 wCoreMFOSize; /* must be sizeof the two following elements, must be dwSize - 16*/
+ nstring ModelName;
+ [flag(STR_UTF8|STR_NULLTERM|NDR_REMAINING)] string_array FeatureOptionPairs;
} spoolss_JTEXP;
/* Device Mode Extra Data: OEM_DMEXTRA */
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 */
[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;
uint32 size_high;
} spoolss_SetJobInfo4;
- typedef [public] union {
+ typedef [ms_union,public] union {
[case(1)] spoolss_SetJobInfo1 *info1;
[case(2)] spoolss_SetJobInfo2 *info2;
[case(3)] spoolss_JobInfo3 *info3;
[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 {
+ typedef [ms_union,switch_type(uint32)] union {
[case(0)] spoolss_SetPrinterInfo0 *info0;
[case(1)] spoolss_SetPrinterInfo1 *info1;
[case(2)] spoolss_SetPrinterInfo2 *info2;
[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,
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 {
} 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 {
[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;
+ 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;
} spoolss_AddDriverInfo8;
- typedef [switch_type(uint32)] union {
+ typedef [ms_union,switch_type(uint32)] union {
[case(1)] spoolss_AddDriverInfo1 *info1;
[case(2)] spoolss_AddDriverInfo2 *info2;
[case(3)] spoolss_AddDriverInfo3 *info3;
[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;
[string,charset(UTF16)] uint16 *datatype;
} spoolss_DocumentInfo1;
- typedef [switch_type(uint32)] union {
+ typedef [ms_union,switch_type(uint32)] union {
[case(1)] spoolss_DocumentInfo1 *info1;
[case(2)]; /* TODO */
[case(3)]; /* TODO */
[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 {
uint32 lang_id;
} spoolss_AddFormInfo2;
- typedef [switch_type(uint32)] union {
+ typedef [ms_union,switch_type(uint32)] union {
[case(1)] spoolss_AddFormInfo1 *info1;
[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
);
/******************/
DATA_BLOB monitor_data; /* relative ?? */
} spoolss_SetPortInfoFF;
- typedef [switch_type(uint32)] union {
+ typedef [ms_union,switch_type(uint32)] union {
[case(1)] spoolss_SetPortInfo1 *info1;
[case(2)] spoolss_SetPortInfo2 *info2;
[case(3)] spoolss_SetPortInfo3 *info3;
/******************/
/* Function: 0x29 */
- [todo] WERROR spoolss_PlayGDIScriptOnPrinterIC(
+
+ typedef struct {
+ uint32 Checksum;
+ uint32 Index;
+ } UNIVERSAL_FONT_ID;
+
+ typedef [public] struct {
+ uint32 count;
+ UNIVERSAL_FONT_ID fonts[count];
+ } UNIVERSAL_FONT_ID_ctr;
+
+ 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
);
/******************/
NOTIFY_TABLE_SECURITYDESCRIPTOR = 0x0005
} spoolss_NotifyTable;
- typedef [switch_type(uint32)] union {
+ typedef [ms_union, switch_type(uint32)] union {
[case(1)] uint32 integer[2];
[case(2)] spoolss_NotifyString string;
[case(3)] spoolss_DevmodeContainer devmode;
[size_is(count)] spoolss_Notify notifies[];
} spoolss_NotifyInfo;
- typedef [switch_type(uint32)] union {
+ typedef [ms_union,switch_type(uint32)] union {
[case(0)] spoolss_NotifyInfo *info0;
} spoolss_ReplyPrinterInfo;
udlong reserved;
} spoolss_UserLevel3;
- typedef [switch_type(uint32)] union {
+ typedef [ms_union,switch_type(uint32)] union {
[case(1)] spoolss_UserLevel1 *level1;
[case(2)] spoolss_UserLevel2 *level2;
[case(3)] spoolss_UserLevel3 *level3;
[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
);
[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;
+ [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;
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: 0x61 */
- [todo] WERROR spoolss_61(
+
+ const string BIDI_ACTION_ENUM_SCHEMA = "EnumSchema";
+ const string BIDI_ACTION_GET = "Get";
+ const string BIDI_ACTION_SET = "Set";
+ const string BIDI_ACTION_GET_ALL = "GetAll";
+
+ typedef enum {
+ BIDI_NULL = 0x00000000,
+ BIDI_INT = 0x00000001,
+ BIDI_FLOAT = 0x00000002,
+ BIDI_BOOL = 0x00000003,
+ BIDI_STRING = 0x00000004,
+ BIDI_TEXT = 0x00000005,
+ BIDI_ENUM = 0x00000006,
+ BIDI_BLOB = 0x00000007
+ } BIDI_TYPE;
+
+ typedef struct {
+ uint32 cbBuf;
+ [size_is(cbBuf), unique] uint8 *pszString;
+ } RPC_BINARY_CONTAINER;
+
+ typedef [ms_union,switch_type(uint32)] union {
+ [case(BIDI_NULL)] uint32 bData;
+ [case(BIDI_BOOL)] uint32 bData;
+ [case(BIDI_INT)] uint32 iData;
+ [case(BIDI_STRING)] [unique] [string,charset(UTF16)] uint16 *sData;
+ [case(BIDI_TEXT)] [unique] [string,charset(UTF16)] uint16 *sData;
+ [case(BIDI_ENUM)] [unique] [string,charset(UTF16)] uint16 *sData;
+ /*[case(BIDI_FLOAT)] float fData;*/
+ [case(BIDI_BLOB)] RPC_BINARY_CONTAINER biData;
+ } RPC_BIDI_DATA_u;
+
+ typedef struct {
+ uint32 dwBidiType;
+ [switch_is(dwBidiType)] RPC_BIDI_DATA_u u;
+ } RPC_BIDI_DATA;
+
+ typedef struct {
+ uint32 dwReqNumber;
+ [unique] [string,charset(UTF16)] uint16 *pSchema;
+ RPC_BIDI_DATA data;
+ } RPC_BIDI_REQUEST_DATA;
+
+ typedef [public] struct {
+ [value(1)] uint32 Version;
+ uint32 Flags;
+ uint32 Count;
+ [size_is(Count), unique] RPC_BIDI_REQUEST_DATA *aData[];
+ } RPC_BIDI_REQUEST_CONTAINER;
+
+ typedef struct {
+ uint32 dwResult;
+ uint32 dwReqNumber;
+ [unique] [string,charset(UTF16)] uint16 *pSchema;
+ RPC_BIDI_DATA data;
+ } RPC_BIDI_RESPONSE_DATA;
+
+ typedef [public] struct {
+ [value(1)] uint32 Version;
+ uint32 Flags;
+ uint32 Count;
+ [size_is(Count), unique] RPC_BIDI_RESPONSE_DATA *aData[];
+ } RPC_BIDI_RESPONSE_CONTAINER;
+
+ WERROR spoolss_RpcSendRecvBidiData(
+ [in] policy_handle hPrinter,
+ [in,unique] [string,charset(UTF16)] uint16 *pAction,
+ [in] RPC_BIDI_REQUEST_CONTAINER *pReqData,
+ [out] RPC_BIDI_RESPONSE_CONTAINER **ppRespData
);
/******************/
/* 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(
+ );
}