/*
  spoolss interface definitions
*/

[ uuid(12345678-1234-abcd-ef00-0123456789ab),
  version(1.0),
  pointer_default(unique)
] interface spoolss
{
	/******************/
	/* Function: 0x00 */

	typedef struct {
		nstring devicename;
		uint16 specversion;
		uint16 driverversion;
		uint16 size;
		uint16 driverextra;
		uint32 fields;
		uint16 orientation;
		uint16 papersize;
		uint16 paperlength;
		uint16 paperwidth;
		uint16 scale;
		uint16 copies;
		uint16 defaultsource;
		uint16 printquality;
		uint16 color;
		uint16 duplex;
		uint16 yresolution;
		uint16 ttoption;
		uint16 collate;
		nstring formname;
		uint16 logpixels;
		uint32 bitsperpel;
		uint32 pelswidth;
		uint32 pelsheight;
		uint32 displayflags;
		uint32 displayfrequency;
		uint32 icmmethod;
		uint32 icmintent;
		uint32 mediatype;
		uint32 dithertype;
		uint32 reserved1;
		uint32 reserved2;
		uint32 panningwidth;
		uint32 panningheight;
		uint8  private[driverextra];
	} spoolss_DeviceMode;

	typedef struct {
		uint32 flags;
		[relative] nstring name;
		[relative] nstring description;
		[relative] nstring comment;
	} spoolss_PrinterInfo1;

	typedef struct {
		[relative] nstring servername;
		[relative] nstring printername;
		[relative] nstring sharename;
		[relative] nstring portname;
		[relative] nstring drivername;
		[relative] nstring comment;
		[relative] nstring location;
		[relative] spoolss_DeviceMode *devmode;
		[relative] nstring sepfile;
		[relative] nstring printprocessor;
		[relative] nstring datatype;
		[relative] nstring parameters;
		[relative] security_descriptor *secdesc;
		uint32 attributes;
		uint32 priority;
		uint32 defaultpriority;
		uint32 starttime;
		uint32 untiltime;
		uint32 status;
		uint32 cjobs;
		uint32 averageppm;
	} spoolss_PrinterInfo2;

	typedef struct {
		uint32 flags;
		security_descriptor secdesc;
	} spoolss_PrinterInfo3;

	typedef struct {
		[relative] nstring printername;
		[relative] nstring servername;
		uint32 attributes;
	} spoolss_PrinterInfo4;

	typedef struct {
		[relative] nstring printername;
		[relative] nstring portname;
		uint32 attributes;
		uint32 device_not_selected_timeout;
		uint32 transmission_retry_timeout;
	} spoolss_PrinterInfo5;

	typedef struct {
		uint32 unknown;
	} spoolss_PrinterInfo6;

	typedef struct {
		[relative] nstring guid; /* text form of printer guid */
		uint32 action;
	} spoolss_PrinterInfo7;

	typedef [nodiscriminant,public] union {
		[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;
	} spoolss_PrinterInfo;

	WERROR spoolss_EnumPrinters(
		[in]	     uint32 flags,
		[in]	     unistr *server,
		[in]	     uint32 level,
		[in,out]     DATA_BLOB *buffer,
		[in,out,ref] uint32 *buf_size,
		[out]	     uint32 count
		);

	/******************/
	/* Function: 0x01 */
	WERROR spoolss_OpenPrinter(
		[in]        unistr *server,
		[in]        unistr *printer,
		[in]        DATA_BLOB *buffer,
		[in]        uint32 access_mask,
		[out,ref]   policy_handle *handle
		);

	/******************/
	/* Function: 0x02 */
	NTSTATUS spoolss_02(
		);

	/******************/
	/* Function: 0x03 */
	NTSTATUS spoolss_03(
		);

	/******************/
	/* Function: 0x04 */
	NTSTATUS spoolss_EnumJobs(
		[in,ref] policy_handle *handle,
		[in]	 uint32 firstjob,
		[in]	 uint32 numjobs,
		[in]	 uint32 level,
		[in,out]     DATA_BLOB *buffer,
		[in,out,ref] uint32 *buf_size,
		[out]	 uint32 numjobs
		);

	/******************/
	/* Function: 0x05 */
	NTSTATUS spoolss_05(
		);

	/******************/
	/* Function: 0x06 */
	NTSTATUS spoolss_06(
		);

	/******************/
	/* Function: 0x07 */
	NTSTATUS spoolss_07(
		);

	/******************/
	/* Function: 0x08 */
	WERROR spoolss_GetPrinter(
		[in,ref]     policy_handle *handle,
		[in]	     uint32 level,
		[in]         DATA_BLOB *buffer,
		[out,subcontext,switch_is(level)] spoolss_PrinterInfo *info,
		[in,out,ref] uint32 *buf_size
		);

	/******************/
	/* Function: 0x09 */
	NTSTATUS spoolss_09(
		);

	/******************/
	/* Function: 0x0a */
	NTSTATUS spoolss_0a(
		);

	/******************/
	/* Function: 0x0b */
	NTSTATUS spoolss_0b(
		);

	/******************/
	/* Function: 0x0c */
	NTSTATUS spoolss_0c(
		);

	/******************/
	/* Function: 0x0d */
	NTSTATUS spoolss_0d(
		);

	/******************/
	/* Function: 0x0e */
	NTSTATUS spoolss_0e(
		);

	/******************/
	/* Function: 0x0f */
	NTSTATUS spoolss_0f(
		);

	/******************/
	/* Function: 0x10 */
	NTSTATUS spoolss_10(
		);

	/******************/
	/* Function: 0x11 */
	NTSTATUS spoolss_11(
		);

	/******************/
	/* Function: 0x12 */
	NTSTATUS spoolss_StartPagePrinter(
		[in,ref] policy_handle *handle		
		);

	/******************/
	/* Function: 0x13 */
	NTSTATUS spoolss_13(
		);

	/******************/
	/* Function: 0x14 */
	NTSTATUS spoolss_EndPagePrinter(
		[in,ref] policy_handle *handle		
		);

	/******************/
	/* Function: 0x15 */
	NTSTATUS spoolss_15(
		);

	/******************/
	/* Function: 0x16 */
	NTSTATUS spoolss_16(
		);

	/******************/
	/* Function: 0x17 */
	NTSTATUS spoolss_EndDocPrinter(
		);

	/******************/
	/* Function: 0x18 */
	NTSTATUS spoolss_18(
		);

	/******************/
	/* Function: 0x19 */
	NTSTATUS spoolss_19(
		);

	/******************/
	/* Function: 0x1a */
	NTSTATUS spoolss_1a(
		);

	/******************/
	/* Function: 0x1b */
	NTSTATUS spoolss_1b(
		);

	/******************/
	/* Function: 0x1c */
	NTSTATUS spoolss_1c(
		);

	/******************/
	/* Function: 0x1d */
	WERROR spoolss_ClosePrinter(
		[in,out,ref]     policy_handle *handle
		);

	/******************/
	/* Function: 0x1e */
	NTSTATUS spoolss_1e(
		);

	/******************/
	/* Function: 0x1f */
	NTSTATUS spoolss_1f(
		);

	/******************/
	/* Function: 0x20 */
	NTSTATUS spoolss_20(
		);

	/******************/
	/* Function: 0x21 */
	NTSTATUS spoolss_21(
		);

	/******************/
	/* Function: 0x22 */
	NTSTATUS spoolss_22(
		);

	/******************/
	/* Function: 0x23 */
	NTSTATUS spoolss_23(
		);

	/******************/
	/* Function: 0x24 */
	NTSTATUS spoolss_24(
		);

	/******************/
	/* Function: 0x25 */
	NTSTATUS spoolss_25(
		);

	/******************/
	/* Function: 0x26 */
	NTSTATUS spoolss_26(
		);

	/******************/
	/* Function: 0x27 */
	NTSTATUS spoolss_27(
		);

	/******************/
	/* Function: 0x28 */
	NTSTATUS spoolss_28(
		);

	/******************/
	/* Function: 0x29 */
	NTSTATUS spoolss_29(
		);

	/******************/
	/* Function: 0x2a */
	NTSTATUS spoolss_2a(
		);

	/******************/
	/* Function: 0x2b */
	NTSTATUS spoolss_2b(
		);

	/******************/
	/* Function: 0x2c */
	NTSTATUS spoolss_2c(
		);

	/******************/
	/* Function: 0x2d */
	NTSTATUS spoolss_2d(
		);

	/******************/
	/* Function: 0x2e */
	NTSTATUS spoolss_2e(
		);

	/******************/
	/* Function: 0x2f */
	NTSTATUS spoolss_2f(
		);

	/******************/
	/* Function: 0x30 */
	NTSTATUS spoolss_30(
		);

	/******************/
	/* Function: 0x31 */
	NTSTATUS spoolss_31(
		);

	/******************/
	/* Function: 0x32 */
	NTSTATUS spoolss_32(
		);

	/******************/
	/* Function: 0x33 */
	NTSTATUS spoolss_33(
		);

	/******************/
	/* Function: 0x34 */
	NTSTATUS spoolss_34(
		);

	/******************/
	/* Function: 0x35 */
	NTSTATUS spoolss_35(
		);

	/******************/
	/* Function: 0x36 */
	NTSTATUS spoolss_36(
		);

	/******************/
	/* Function: 0x37 */
	NTSTATUS spoolss_37(
		);

	/******************/
	/* Function: 0x38 */
	NTSTATUS spoolss_38(
		);

	/******************/
	/* Function: 0x39 */
	NTSTATUS spoolss_39(
		);

	/******************/
	/* Function: 0x3a */
	NTSTATUS spoolss_3a(
		);

	/******************/
	/* Function: 0x3b */
	NTSTATUS spoolss_3b(
		);

	/******************/
	/* Function: 0x3c */
	NTSTATUS spoolss_3c(
		);

	/******************/
	/* Function: 0x3d */
	NTSTATUS spoolss_3d(
		);

	/******************/
	/* Function: 0x3e */
	NTSTATUS spoolss_3e(
		);

	/******************/
	/* Function: 0x3f */
	NTSTATUS spoolss_3f(
		);

	/******************/
	/* Function: 0x40 */
	NTSTATUS spoolss_40(
		);

	/******************/
	/* Function: 0x41 */
	NTSTATUS spoolss_41(
		);

	/******************/
	/* Function: 0x42 */
	NTSTATUS spoolss_42(
		);

	/******************/
	/* Function: 0x43 */
	NTSTATUS spoolss_43(
		);

	/******************/
	/* Function: 0x44 */
	NTSTATUS spoolss_44(
		);

	typedef struct {
		uint32 foo;
	} spoolss_Devmode;

	typedef struct {
		uint32 size;
		spoolss_Devmode *devmode;
	} spoolss_DevmodeContainer;

	typedef struct {
		uint32 size;
		unistr *client;
		unistr *user;
		uint32 build;
		uint32 major;
		uint32 minor;
		uint32 processor;
	} spoolss_UserLevel1;

	typedef union {
		[case(1)]  spoolss_UserLevel1 *level1;
	} spoolss_UserLevel;

	/******************/
	/* Function: 0x45 */
	WERROR spoolss_OpenPrinterEx(
		[in]                  unistr *printername,
		[in]                  unistr *datatype,
		[in]	              spoolss_DevmodeContainer devmode_ctr,
		[in]	              uint32 access_required,
		[in]	              uint32 level,
		[in,switch_is(level)] spoolss_UserLevel userlevel,
		[out,ref]	      policy_handle *handle
		);

	/******************/
	/* Function: 0x46 */
	NTSTATUS spoolss_46(
		);

	/******************/
	/* Function: 0x47 */
	NTSTATUS spoolss_47(
		);

	/******************/
	/* Function: 0x48 */
	WERROR spoolss_EnumPrinterData(
		[in,ref] policy_handle *handle,
		[in]	 uint32 enum_index,
		[in]     uint32 value_offered,
		[out]	 lstring value,
		[out]	 uint32 value_needed,
		[out]    uint32 printerdata_type,
		[out]    DATA_BLOB data,
		[in,out,ref] uint32 *data_size
		);

	/******************/
	/* Function: 0x49 */
	NTSTATUS spoolss_49(
		);

	/******************/
	/* Function: 0x4a */
	NTSTATUS spoolss_4a(
		);

	/******************/
	/* Function: 0x4b */
	NTSTATUS spoolss_4b(
		);

	/******************/
	/* Function: 0x4c */
	NTSTATUS spoolss_4c(
		);

	/******************/
	/* Function: 0x4d */
	NTSTATUS spoolss_4d(
		);

	/******************/
	/* Function: 0x4e */
	NTSTATUS spoolss_4e(
		);

	/******************/
	/* Function: 0x4f */
	NTSTATUS spoolss_4f(
		);

	/******************/
	/* Function: 0x50 */
	NTSTATUS spoolss_50(
		);

	/******************/
	/* Function: 0x51 */
	NTSTATUS spoolss_51(
		);

	/******************/
	/* Function: 0x52 */
	NTSTATUS spoolss_52(
		);

	/******************/
	/* Function: 0x53 */
	NTSTATUS spoolss_53(
		);

	/******************/
	/* Function: 0x54 */
	NTSTATUS spoolss_54(
		);

	/******************/
	/* Function: 0x55 */
	NTSTATUS spoolss_55(
		);

	/******************/
	/* Function: 0x56 */
	NTSTATUS spoolss_56(
		);

	/******************/
	/* Function: 0x57 */
	NTSTATUS spoolss_57(
		);

	/******************/
	/* Function: 0x58 */
	NTSTATUS spoolss_58(
		);

	/******************/
	/* Function: 0x59 */
	NTSTATUS spoolss_59(
		);

	/******************/
	/* Function: 0x5a */
	NTSTATUS spoolss_5a(
		);

	/******************/
	/* Function: 0x5b */
	NTSTATUS spoolss_5b(
		);

	/******************/
	/* Function: 0x5c */
	NTSTATUS spoolss_5c(
		);

	/******************/
	/* Function: 0x5d */
	NTSTATUS spoolss_5d(
		);

	/******************/
	/* Function: 0x5e */
	NTSTATUS spoolss_5e(
		);

	/******************/
	/* Function: 0x5f */
	NTSTATUS spoolss_5f(
		);

}