Unix SMB/Netbios implementation.
Version 1.9.
SMB parameters and setup
- Copyright (C) Andrew Tridgell 1992-1998
- Copyright (C) Luke Kenneth Casson Leighton 1996-1998
- Copyright (C) Jean Francois Micouleau 1998-1999
+ Copyright (C) Andrew Tridgell 1992-2000,
+ Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
+ Copyright (C) Jean Francois Micouleau 1998-2000.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#ifndef _RPC_SPOOLSS_H /* _RPC_SPOOLSS_H */
-#define _RPC_SPOOLSS_H
+#ifndef _RPC_SPOOLSS_H /* _RPC_SPOOLSS_H */
+#define _RPC_SPOOLSS_H
#define INTEGER 1
#define STRING 2
/* spoolss pipe: this are the calls which are not implemented ...
#define SPOOLSS_OPENPRINTER 0x01
-#define SPOOLSS_GETJOB 0x03
-#define SPOOLSS_DELETEPRINTER 0x06
#define SPOOLSS_GETPRINTERDRIVER 0x0b
-#define SPOOLSS_DELETEPRINTERDRIVER 0x0d
-#define SPOOLSS_ADDPRINTPROCESSOR 0x0e
#define SPOOLSS_GETPRINTPROCESSORDIRECTORY 0x10
-#define SPOOLSS_ABORTPRINTER 0x15
#define SPOOLSS_READPRINTER 0x16
#define SPOOLSS_WAITFORPRINTERCHANGE 0x1c
-#define SPOOLSS_DELETEFORM 0x1f
-#define SPOOLSS_GETFORM 0x20
-#define SPOOLSS_ENUMMONITORS 0x24
#define SPOOLSS_ADDPORT 0x25
#define SPOOLSS_CONFIGUREPORT 0x26
#define SPOOLSS_DELETEPORT 0x27
#define SPOOLSS_FINDFIRSTPRINTERCHANGENOTIFICATION 0x36
#define SPOOLSS_FINDNEXTPRINTERCHANGENOTIFICATION 0x37
#define SPOOLSS_ROUTERFINDFIRSTPRINTERNOTIFICATIONOLD 0x39
-#define SPOOLSS_REPLYOPENPRINTER 0x3a
#define SPOOLSS_ROUTERREPLYPRINTER 0x3b
-#define SPOOLSS_REPLYCLOSEPRINTER 0x3c
#define SPOOLSS_ADDPORTEX 0x3d
#define SPOOLSS_REMOTEFINDFIRSTPRINTERCHANGENOTIFICATION0x3e
#define SPOOLSS_SPOOLERINIT 0x3f
#define SPOOLSS_ROUTERREFRESHPRINTERCHANGENOTIFICATION 0x42
*/
-/* those are implemented */
+/*
+ * Unimplement Win2k specific RPC's
+
+/*
+ seen strings - DsSpooler, DsForms, etc...
+ Enumeration? Returns DRIVER_INFO_6 fields
+*/
+#define SPOOLSS_UNKNOWN_1 0x4f
+#define SPOOLSS_ADDPRINTERDRIVEREX 0x59
+
+/* those are implemented */
#define SPOOLSS_ENUMPRINTERS 0x00
#define SPOOLSS_SETJOB 0x02
+#define SPOOLSS_GETJOB 0x03
#define SPOOLSS_ENUMJOBS 0x04
#define SPOOLSS_ADDPRINTER 0x05
+#define SPOOLSS_DELETEPRINTER 0x06
#define SPOOLSS_SETPRINTER 0x07
#define SPOOLSS_GETPRINTER 0x08
#define SPOOLSS_ADDPRINTERDRIVER 0x09
#define SPOOLSS_ENUMPRINTERDRIVERS 0x0a
#define SPOOLSS_GETPRINTERDRIVERDIRECTORY 0x0c
+#define SPOOLSS_DELETEPRINTERDRIVER 0x0d
+#define SPOOLSS_ADDPRINTPROCESSOR 0x0e
#define SPOOLSS_ENUMPRINTPROCESSORS 0x0f
#define SPOOLSS_STARTDOCPRINTER 0x11
#define SPOOLSS_STARTPAGEPRINTER 0x12
#define SPOOLSS_WRITEPRINTER 0x13
#define SPOOLSS_ENDPAGEPRINTER 0x14
+#define SPOOLSS_ABORTPRINTER 0x15
#define SPOOLSS_ENDDOCPRINTER 0x17
#define SPOOLSS_ADDJOB 0x18
#define SPOOLSS_SCHEDULEJOB 0x19
#define SPOOLSS_SETPRINTERDATA 0x1b
#define SPOOLSS_CLOSEPRINTER 0x1d
#define SPOOLSS_ADDFORM 0x1e
+#define SPOOLSS_DELETEFORM 0x1f
+#define SPOOLSS_GETFORM 0x20
#define SPOOLSS_SETFORM 0x21
#define SPOOLSS_ENUMFORMS 0x22
#define SPOOLSS_ENUMPORTS 0x23
-#define SPOOLSS_ENUMPRINTPROCESSORDATATYPES 0x33
+#define SPOOLSS_ENUMMONITORS 0x24
+#define SPOOLSS_ENUMPRINTPROCDATATYPES 0x33
#define SPOOLSS_GETPRINTERDRIVER2 0x35
/* find close printer notification */
#define SPOOLSS_FCPN 0x38
+#define SPOOLSS_REPLYOPENPRINTER 0x3a
+#define SPOOLSS_REPLYCLOSEPRINTER 0x3c
/* remote find first printer change notifyEx */
#define SPOOLSS_RFFPCNEX 0x41
+/*SPOOLSS_ROUTERREFRESHPRINTERCHANGENOTIFICATION */
+#define SPOOLSS_RRPCN 0x42
/* remote find next printer change notifyEx */
#define SPOOLSS_RFNPCNEX 0x43
#define SPOOLSS_OPENPRINTEREX 0x45
#define SPOOLSS_ADDPRINTEREX 0x46
#define SPOOLSS_ENUMPRINTERDATA 0x48
-
-
-#define SERVER_ACCESS_ADMINISTER 0x00000001
-#define SERVER_ACCESS_ENUMERATE 0x00000002
-
-#define PRINTER_ACCESS_ADMINISTER 0x00000004
-#define PRINTER_ACCESS_USE 0x00000008
+#define SPOOLSS_DELETEPRINTERDATA 0x49
+#define SPOOLSS_GETPRINTERDATAEX 0x4e
+#define SPOOLSS_SETPRINTERDATAEX 0x50
#define PRINTER_CONTROL_UNPAUSE 0x00000000
#define PRINTER_CONTROL_PAUSE 0x00000001
#define PRINTER_STATUS_POWER_SAVE 0x01000000
+#define SERVER_ACCESS_ADMINISTER 0x00000001
+#define SERVER_ACCESS_ENUMERATE 0x00000002
+#define PRINTER_ACCESS_ADMINISTER 0x00000004
+#define PRINTER_ACCESS_USE 0x00000008
#define JOB_ACCESS_ADMINISTER 0x00000010
-#define STANDARD_RIGHTS_READ 0x00020000
-#define STANDARD_RIGHTS_WRITE STANDARD_RIGHTS_READ
-#define STANDARD_RIGHTS_EXECUTE STANDARD_RIGHTS_READ
-#define STANDARD_RIGHTS_REQUIRED 0x000F0000
+/* JOB status codes. */
+
+#define JOB_STATUS_PAUSED 0x001
+#define JOB_STATUS_ERROR 0x002
+#define JOB_STATUS_DELETING 0x004
+#define JOB_STATUS_SPOOLING 0x008
+#define JOB_STATUS_PRINTING 0x010
+#define JOB_STATUS_OFFLINE 0x020
+#define JOB_STATUS_PAPEROUT 0x040
+#define JOB_STATUS_PRINTED 0x080
+#define JOB_STATUS_DELETED 0x100
+#define JOB_STATUS_BLOCKED 0x200
+#define JOB_STATUS_USER_INTERVENTION 0x400
+
+/* ACE masks for the various print permissions */
+
+#define PRINTER_ACE_FULL_CONTROL GENERIC_ALL_ACCESS
+#define PRINTER_ACE_MANAGE_DOCUMENTS READ_CONTROL_ACCESS
+#define PRINTER_ACE_PRINT \
+ (GENERIC_READ_ACCESS | GENERIC_WRITE_ACCESS | GENERIC_EXECUTE_ACCESS)
/* Access rights for print servers */
-#define SERVER_ALL_ACCESS STANDARD_RIGHTS_REQUIRED|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE
-#define SERVER_READ STANDARD_RIGHTS_READ|SERVER_ACCESS_ENUMERATE
-#define SERVER_WRITE STANDARD_RIGHTS_WRITE|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE
-#define SERVER_EXECUTE STANDARD_RIGHTS_EXECUTE|SERVER_ACCESS_ENUMERATE
+#define SERVER_ALL_ACCESS STANDARD_RIGHTS_REQUIRED_ACCESS|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE
+#define SERVER_READ STANDARD_RIGHTS_READ_ACCESS|SERVER_ACCESS_ENUMERATE
+#define SERVER_WRITE STANDARD_RIGHTS_WRITE_ACCESS|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE
+#define SERVER_EXECUTE STANDARD_RIGHTS_EXECUTE_ACCESS|SERVER_ACCESS_ENUMERATE
/* Access rights for printers */
-#define PRINTER_ALL_ACCESS STANDARD_RIGHTS_REQUIRED|PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE
-#define PRINTER_READ STANDARD_RIGHTS_READ|PRINTER_ACCESS_USE
-#define PRINTER_WRITE STANDARD_RIGHTS_WRITE|PRINTER_ACCESS_USE
-#define PRINTER_EXECUTE STANDARD_RIGHTS_EXECUTE|PRINTER_ACCESS_USE
+#define PRINTER_ALL_ACCESS STANDARD_RIGHTS_REQUIRED_ACCESS|PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE
+#define PRINTER_READ STANDARD_RIGHTS_READ_ACCESS|PRINTER_ACCESS_USE
+#define PRINTER_WRITE STANDARD_RIGHTS_WRITE_ACCESS|PRINTER_ACCESS_USE
+#define PRINTER_EXECUTE STANDARD_RIGHTS_EXECUTE_ACCESS|PRINTER_ACCESS_USE
/* Access rights for jobs */
-#define JOB_ALL_ACCESS STANDARD_RIGHTS_REQUIRED|JOB_ACCESS_ADMINISTER
-#define JOB_READ STANDARD_RIGHTS_READ|JOB_ACCESS_ADMINISTER
-#define JOB_WRITE STANDARD_RIGHTS_WRITE|JOB_ACCESS_ADMINISTER
-#define JOB_EXECUTE STANDARD_RIGHTS_EXECUTE|JOB_ACCESS_ADMINISTER
-
-#define PRINTER_HND_SIZE 20
+#define JOB_ALL_ACCESS STANDARD_RIGHTS_REQUIRED_ACCESS|JOB_ACCESS_ADMINISTER
+#define JOB_READ STANDARD_RIGHTS_READ_ACCESS|JOB_ACCESS_ADMINISTER
+#define JOB_WRITE STANDARD_RIGHTS_WRITE_ACCESS|JOB_ACCESS_ADMINISTER
+#define JOB_EXECUTE STANDARD_RIGHTS_EXECUTE_ACCESS|JOB_ACCESS_ADMINISTER
#define ONE_VALUE 01
#define TWO_VALUE 02
#define JOB_NOTIFY_TYPE 0x01
#define MAX_PRINTER_NOTIFY 26
+#define MAX_JOB_NOTIFY 24
+
+#define MAX_NOTIFY_TYPE_FOR_NOW 26
#define PRINTER_NOTIFY_SERVER_NAME 0x00
#define PRINTER_NOTIFY_PRINTER_NAME 0x01
#define PRINTER_NOTIFY_TOTAL_BYTES 0x18
#define PRINTER_NOTIFY_BYTES_PRINTED 0x19
-#define MAX_JOB_NOTIFY 24
-
#define JOB_NOTIFY_PRINTER_NAME 0x00
#define JOB_NOTIFY_MACHINE_NAME 0x01
#define JOB_NOTIFY_PORT_NAME 0x02
#define JOB_NOTIFY_TOTAL_BYTES 0x16
#define JOB_NOTIFY_BYTES_PRINTED 0x17
+#define PRINTER_CHANGE_ADD_PRINTER 0x00000001
+#define PRINTER_CHANGE_SET_PRINTER 0x00000002
+#define PRINTER_CHANGE_DELETE_PRINTER 0x00000004
+#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 0x00000008
+#define PRINTER_CHANGE_PRINTER (PRINTER_CHANGE_ADD_PRINTER | \
+ PRINTER_CHANGE_SET_PRINTER | \
+ PRINTER_CHANGE_DELETE_PRINTER | \
+ PRINTER_CHANGE_FAILED_CONNECTION_PRINTER )
+
+#define PRINTER_CHANGE_ADD_JOB 0x00000100
+#define PRINTER_CHANGE_SET_JOB 0x00000200
+#define PRINTER_CHANGE_DELETE_JOB 0x00000400
+#define PRINTER_CHANGE_WRITE_JOB 0x00000800
+#define PRINTER_CHANGE_JOB (PRINTER_CHANGE_ADD_JOB | \
+ PRINTER_CHANGE_SET_JOB | \
+ PRINTER_CHANGE_DELETE_JOB | \
+ PRINTER_CHANGE_WRITE_JOB )
+
+#define PRINTER_CHANGE_ADD_FORM 0x00010000
+#define PRINTER_CHANGE_SET_FORM 0x00020000
+#define PRINTER_CHANGE_DELETE_FORM 0x00040000
+#define PRINTER_CHANGE_FORM (PRINTER_CHANGE_ADD_FORM | \
+ PRINTER_CHANGE_SET_FORM | \
+ PRINTER_CHANGE_DELETE_FORM )
+
+#define PRINTER_CHANGE_ADD_PORT 0x00100000
+#define PRINTER_CHANGE_CONFIGURE_PORT 0x00200000
+#define PRINTER_CHANGE_DELETE_PORT 0x00400000
+#define PRINTER_CHANGE_PORT (PRINTER_CHANGE_ADD_PORT | \
+ PRINTER_CHANGE_CONFIGURE_PORT | \
+ PRINTER_CHANGE_DELETE_PORT )
+
+#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR 0x01000000
+#define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR 0x04000000
+#define PRINTER_CHANGE_PRINT_PROCESSOR (PRINTER_CHANGE_ADD_PRINT_PROCESSOR | \
+ PRINTER_CHANGE_DELETE_PRINT_PROCESSOR )
+
+#define PRINTER_CHANGE_ADD_PRINTER_DRIVER 0x10000000
+#define PRINTER_CHANGE_SET_PRINTER_DRIVER 0x20000000
+#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER 0x40000000
+#define PRINTER_CHANGE_PRINTER_DRIVER (PRINTER_CHANGE_ADD_PRINTER_DRIVER | \
+ PRINTER_CHANGE_SET_PRINTER_DRIVER | \
+ PRINTER_CHANGE_DELETE_PRINTER_DRIVER )
+
+#define PRINTER_CHANGE_TIMEOUT 0x80000000
+#define PRINTER_CHANGE_ALL (PRINTER_CHANGE_JOB | \
+ PRINTER_CHANGE_FORM | \
+ PRINTER_CHANGE_PORT | \
+ PRINTER_CHANGE_PRINT_PROCESSOR | \
+ PRINTER_CHANGE_PRINTER_DRIVER )
+
+#define PRINTER_NOTIFY_INFO_DISCARDED 0x1
+
/*
* The printer attributes.
* I #defined all of them (grabbed form MSDN)
* ( SHARED | NETWORK | RAW_ONLY )
* RAW_ONLY _MUST_ be present otherwise NT will send an EMF file
*/
-
+
#define PRINTER_ATTRIBUTE_QUEUED 0x00000001
#define PRINTER_ATTRIBUTE_DIRECT 0x00000002
#define PRINTER_ATTRIBUTE_DEFAULT 0x00000004
#define MIN_PRIORITY 1
#define DEF_PRIORITY 1
+/* the flags of the query */
#define PRINTER_ENUM_DEFAULT 0x00000001
#define PRINTER_ENUM_LOCAL 0x00000002
#define PRINTER_ENUM_CONNECTIONS 0x00000004
#define PRINTER_ENUM_SHARED 0x00000020
#define PRINTER_ENUM_NETWORK 0x00000040
+/* the flags of each printers */
+#define PRINTER_ENUM_UNKNOWN_8 0x00000008
#define PRINTER_ENUM_EXPAND 0x00004000
#define PRINTER_ENUM_CONTAINER 0x00008000
-
#define PRINTER_ENUM_ICONMASK 0x00ff0000
#define PRINTER_ENUM_ICON1 0x00010000
#define PRINTER_ENUM_ICON2 0x00020000
#define PRINTER_ENUM_ICON7 0x00400000
#define PRINTER_ENUM_ICON8 0x00800000
-typedef struct
+/* this struct is undocumented */
+/* thanks to the ddk ... */
+typedef struct spool_user_1
{
- char name[100];
- uint32 flag;
- uint32 width;
- uint32 length;
- uint32 left;
- uint32 top;
- uint32 right;
- uint32 bottom;
-} nt_forms_struct;
+ uint32 size; /* length of user_name & client_name + 2? */
+ uint32 client_name_ptr;
+ uint32 user_name_ptr;
+ uint32 build;
+ uint32 major;
+ uint32 minor;
+ uint32 processor;
+ UNISTR2 client_name;
+ UNISTR2 user_name;
+}
+SPOOL_USER_1;
-typedef struct
+typedef struct spool_user_ctr_info
{
- char name[100];
- char architecture[100];
- uint32 version;
- char default_form[30];
- uint32 color_flag;
- char driver[100];
- char datafile[100];
- char configfile[100];
- char helpfile[100];
- char monitor[100];
- char monitor_name[100];
- char **dependant;
-} nt_drivers_struct;
+ uint32 level;
+ uint32 ptr;
+ SPOOL_USER_1 user1;
+}
+SPOOL_USER_CTR;
typedef struct devicemode
{
- UNISTR 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;
- UNISTR 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;
-} DEVICEMODE;
-
-typedef struct devicemode_container
-{
- DEVICEMODE *dm;
- uint8 *buffer;
- uint32 size_of_buffer;
-} DEVICEMODE_CONTAINER;
-
-#define ORIENTATION 0x00000001L
-#define PAPERSIZE 0x00000002L
-#define PAPERLENGTH 0x00000004L
-#define PAPERWIDTH 0x00000008L
-#define SCALE 0x00000010L
-#define COPIES 0x00000100L
-#define DEFAULTSOURCE 0x00000200L
-#define PRINTQUALITY 0x00000400L
-#define COLOR 0x00000800L
-#define DUPLEX 0x00001000L
-#define YRESOLUTION 0x00002000L
-#define TTOPTION 0x00004000L
-#define COLLATE 0x00008000L
-#define FORMNAME 0x00010000L
-#define LOGPIXELS 0x00020000L
-#define BITSPERPEL 0x00040000L
-#define PELSWIDTH 0x00080000L
-#define PELSHEIGHT 0x00100000L
-#define DISPLAYFLAGS 0x00200000L
-#define DISPLAYFREQUENCY 0x00400000L
-#define PANNINGWIDTH 0x00800000L
-#define PANNINGHEIGHT 0x01000000L
-
-#define ORIENT_PORTRAIT 1
-#define ORIENT_LANDSCAPE 2
-
-#define PAPER_FIRST PAPER_LETTER
-#define PAPER_LETTER 1 /* Letter 8 1/2 x 11 in */
-#define PAPER_LETTERSMALL 2 /* Letter Small 8 1/2 x 11 in */
-#define PAPER_TABLOID 3 /* Tabloid 11 x 17 in */
-#define PAPER_LEDGER 4 /* Ledger 17 x 11 in */
-#define PAPER_LEGAL 5 /* Legal 8 1/2 x 14 in */
-#define PAPER_STATEMENT 6 /* Statement 5 1/2 x 8 1/2 in */
-#define PAPER_EXECUTIVE 7 /* Executive 7 1/4 x 10 1/2 in */
-#define PAPER_A3 8 /* A3 297 x 420 mm */
-#define PAPER_A4 9 /* A4 210 x 297 mm */
-#define PAPER_A4SMALL 10 /* A4 Small 210 x 297 mm */
-#define PAPER_A5 11 /* A5 148 x 210 mm */
-#define PAPER_B4 12 /* B4 (JIS) 250 x 354 */
-#define PAPER_B5 13 /* B5 (JIS) 182 x 257 mm */
-#define PAPER_FOLIO 14 /* Folio 8 1/2 x 13 in */
-#define PAPER_QUARTO 15 /* Quarto 215 x 275 mm */
-#define PAPER_10X14 16 /* 10x14 in */
-#define PAPER_11X17 17 /* 11x17 in */
-#define PAPER_NOTE 18 /* Note 8 1/2 x 11 in */
-#define PAPER_ENV_9 19 /* Envelope #9 3 7/8 x 8 7/8 */
-#define PAPER_ENV_10 20 /* Envelope #10 4 1/8 x 9 1/2 */
-#define PAPER_ENV_11 21 /* Envelope #11 4 1/2 x 10 3/8 */
-#define PAPER_ENV_12 22 /* Envelope #12 4 \276 x 11 */
-#define PAPER_ENV_14 23 /* Envelope #14 5 x 11 1/2 */
-#define PAPER_CSHEET 24 /* C size sheet */
-#define PAPER_DSHEET 25 /* D size sheet */
-#define PAPER_ESHEET 26 /* E size sheet */
-#define PAPER_ENV_DL 27 /* Envelope DL 110 x 220mm */
-#define PAPER_ENV_C5 28 /* Envelope C5 162 x 229 mm */
-#define PAPER_ENV_C3 29 /* Envelope C3 324 x 458 mm */
-#define PAPER_ENV_C4 30 /* Envelope C4 229 x 324 mm */
-#define PAPER_ENV_C6 31 /* Envelope C6 114 x 162 mm */
-#define PAPER_ENV_C65 32 /* Envelope C65 114 x 229 mm */
-#define PAPER_ENV_B4 33 /* Envelope B4 250 x 353 mm */
-#define PAPER_ENV_B5 34 /* Envelope B5 176 x 250 mm */
-#define PAPER_ENV_B6 35 /* Envelope B6 176 x 125 mm */
-#define PAPER_ENV_ITALY 36 /* Envelope 110 x 230 mm */
-#define PAPER_ENV_MONARCH 37 /* Envelope Monarch 3.875 x 7.5 in */
-#define PAPER_ENV_PERSONAL 38 /* 6 3/4 Envelope 3 5/8 x 6 1/2 in */
-#define PAPER_FANFOLD_US 39 /* US Std Fanfold 14 7/8 x 11 in */
-#define PAPER_FANFOLD_STD_GERMAN 40 /* German Std Fanfold 8 1/2 x 12 in */
-#define PAPER_FANFOLD_LGL_GERMAN 41 /* German Legal Fanfold 8 1/2 x 13 in */
-
-#define PAPER_LAST PAPER_FANFOLD_LGL_GERMAN
-#define PAPER_USER 256
-
-#define BIN_FIRST BIN_UPPER
-#define BIN_UPPER 1
-#define BIN_ONLYONE 1
-#define BIN_LOWER 2
-#define BIN_MIDDLE 3
-#define BIN_MANUAL 4
-#define BIN_ENVELOPE 5
-#define BIN_ENVMANUAL 6
-#define BIN_AUTO 7
-#define BIN_TRACTOR 8
-#define BIN_SMALLFMT 9
-#define BIN_LARGEFMT 10
-#define BIN_LARGECAPACITY 11
-#define BIN_CASSETTE 14
-#define BIN_FORMSOURCE 15
-#define BIN_LAST BIN_FORMSOURCE
-
-#define BIN_USER 256 /* device specific bins start here */
-
-#define RES_DRAFT (-1)
-#define RES_LOW (-2)
-#define RES_MEDIUM (-3)
-#define RES_HIGH (-4)
-
-#define COLOR_MONOCHROME 1
-#define COLOR_COLOR 2
-
-#define DUP_SIMPLEX 1
-#define DUP_VERTICAL 2
-#define DUP_HORIZONTAL 3
-
-#define TT_BITMAP 1 /* print TT fonts as graphics */
-#define TT_DOWNLOAD 2 /* download TT fonts as soft fonts */
-#define TT_SUBDEV 3 /* substitute device fonts for TT fonts */
-
-#define COLLATE_FALSE 0
-#define COLLATE_TRUE 1
-
-#define ERROR_INVALID_HANDLE 6
-#define ERROR_INVALID_PARAMETER 87
-#define ERROR_INSUFFICIENT_BUFFER 122
+ UNISTR 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;
+ UNISTR 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;
+}
+DEVICEMODE;
+
+typedef struct _devmode_cont
+{
+ uint32 size;
+ uint32 devmode_ptr;
+ DEVICEMODE *devmode;
+}
+DEVMODE_CTR;
+
+typedef struct _printer_default
+{
+ uint32 datatype_ptr;
+ UNISTR2 datatype;
+ DEVMODE_CTR devmode_cont;
+ uint32 access_required;
+}
+PRINTER_DEFAULT;
+
+/* SPOOL_Q_OPEN_PRINTER_EX request to open a printer */
+typedef struct spool_q_open_printer_ex
+{
+ uint32 printername_ptr;
+ UNISTR2 printername;
+ PRINTER_DEFAULT printer_default;
+ uint32 user_switch;
+ SPOOL_USER_CTR user_ctr;
+}
+SPOOL_Q_OPEN_PRINTER_EX;
+
+/* SPOOL_R_OPEN_PRINTER_EX reply to an open printer */
+typedef struct spool_r_open_printer_ex
+{
+ POLICY_HND handle; /* handle used along all transactions (20*uint8) */
+ WERROR status;
+}
+SPOOL_R_OPEN_PRINTER_EX;
+
+typedef struct spool_notify_option_type
+{
+ uint16 type;
+ uint16 reserved0;
+ uint32 reserved1;
+ uint32 reserved2;
+ uint32 count;
+ uint32 fields_ptr;
+ uint32 count2;
+ uint16 fields[MAX_NOTIFY_TYPE_FOR_NOW];
+}
+SPOOL_NOTIFY_OPTION_TYPE;
+
+typedef struct spool_notify_option_type_ctr
+{
+ uint32 count;
+ SPOOL_NOTIFY_OPTION_TYPE *type;
+}
+SPOOL_NOTIFY_OPTION_TYPE_CTR;
+
+
typedef struct s_header_type
{
{
uint32 value;
UNISTR string;
- } data;
-} HEADER_TYPE;
+ }
+ data;
+}
+HEADER_TYPE;
-typedef struct s_buffer
+typedef struct new_buffer
{
uint32 ptr;
uint32 size;
- uint32 count;
- uint8 *data;
- HEADER_TYPE *header;
-} BUFFER;
-
-
-/* PRINTER_HND */
-typedef struct printer_policy_info
-{
- uint8 data[PRINTER_HND_SIZE]; /* printer handle */
-} PRINTER_HND;
-
-/* SPOOL_Q_OPEN_PRINTER request to open a printer */
-typedef struct spool_q_open_printer
-{
- uint32 unknown0;
- UNISTR2 printername;
- uint32 unknown1;
- uint32 cbbuf;
- uint32 devmod;
- uint32 access_required;
- uint32 unknown2; /* 0x0000 0001 */
- uint32 unknown3; /* 0x0000 0001 */
- uint32 unknown4; /* ??? */
- uint32 unknown5; /* 0x0000 001c */
- uint32 unknown6; /* ??? */
- uint32 unknown7; /* ??? */
- uint32 unknown8; /* 0x0000 0565 */
- uint32 unknown9; /* 0x0000 0002 */
- uint32 unknown10; /* 0x0000 0000 */
- uint32 unknown11; /* ??? */
- UNISTR2 station;
- UNISTR2 username;
-} SPOOL_Q_OPEN_PRINTER;
-
-/* SPOOL_Q_OPEN_PRINTER reply to an open printer */
-typedef struct spool_r_open_printer
-{
- PRINTER_HND handle; /* handle used along all transactions (20*uint8) */
- uint32 status;
-} SPOOL_R_OPEN_PRINTER;
+ prs_struct prs;
+ uint32 struct_start;
+ uint32 string_at_end;
+}
+NEW_BUFFER;
typedef struct spool_q_getprinterdata
{
- PRINTER_HND handle;
- UNISTR2 valuename;
- uint32 size;
-} SPOOL_Q_GETPRINTERDATA;
+ POLICY_HND handle;
+ UNISTR2 valuename;
+ uint32 size;
+}
+SPOOL_Q_GETPRINTERDATA;
typedef struct spool_r_getprinterdata
{
uint32 type;
uint32 size;
uint8 *data;
- uint32 numeric_data;
uint32 needed;
- uint32 status;
-} SPOOL_R_GETPRINTERDATA;
+ WERROR status;
+}
+SPOOL_R_GETPRINTERDATA;
+
+typedef struct spool_q_deleteprinterdata
+{
+ POLICY_HND handle;
+ UNISTR2 valuename;
+}
+SPOOL_Q_DELETEPRINTERDATA;
+
+typedef struct spool_r_deleteprinterdata
+{
+ WERROR status;
+}
+SPOOL_R_DELETEPRINTERDATA;
typedef struct spool_q_closeprinter
{
- PRINTER_HND handle;
-} SPOOL_Q_CLOSEPRINTER;
+ POLICY_HND handle;
+}
+SPOOL_Q_CLOSEPRINTER;
typedef struct spool_r_closeprinter
{
- PRINTER_HND handle;
- uint32 status;
-} SPOOL_R_CLOSEPRINTER;
+ POLICY_HND handle;
+ WERROR status;
+}
+SPOOL_R_CLOSEPRINTER;
typedef struct spool_q_startpageprinter
{
- PRINTER_HND handle;
-} SPOOL_Q_STARTPAGEPRINTER;
+ POLICY_HND handle;
+}
+SPOOL_Q_STARTPAGEPRINTER;
typedef struct spool_r_startpageprinter
{
- uint32 status;
-} SPOOL_R_STARTPAGEPRINTER;
+ WERROR status;
+}
+SPOOL_R_STARTPAGEPRINTER;
typedef struct spool_q_endpageprinter
{
- PRINTER_HND handle;
-} SPOOL_Q_ENDPAGEPRINTER;
+ POLICY_HND handle;
+}
+SPOOL_Q_ENDPAGEPRINTER;
typedef struct spool_r_endpageprinter
{
- uint32 status;
-} SPOOL_R_ENDPAGEPRINTER;
+ WERROR status;
+}
+SPOOL_R_ENDPAGEPRINTER;
+
+
+typedef struct spool_q_deleteprinterdriver
+{
+ uint32 server_ptr;
+ UNISTR2 server;
+ UNISTR2 arch;
+ UNISTR2 driver;
+}
+SPOOL_Q_DELETEPRINTERDRIVER;
+
+typedef struct spool_r_deleteprinterdriver
+{
+ WERROR status;
+}
+SPOOL_R_DELETEPRINTERDRIVER;
+
typedef struct spool_doc_info_1
{
UNISTR2 docname;
UNISTR2 outputfile;
UNISTR2 datatype;
-} DOC_INFO_1;
+}
+DOC_INFO_1;
typedef struct spool_doc_info
{
uint32 switch_value;
DOC_INFO_1 doc_info_1;
-} DOC_INFO;
+}
+DOC_INFO;
typedef struct spool_doc_info_container
{
uint32 level;
DOC_INFO docinfo;
-} DOC_INFO_CONTAINER;
+}
+DOC_INFO_CONTAINER;
typedef struct spool_q_startdocprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
DOC_INFO_CONTAINER doc_info_container;
-} SPOOL_Q_STARTDOCPRINTER;
+}
+SPOOL_Q_STARTDOCPRINTER;
typedef struct spool_r_startdocprinter
{
uint32 jobid;
- uint32 status;
-} SPOOL_R_STARTDOCPRINTER;
+ WERROR status;
+}
+SPOOL_R_STARTDOCPRINTER;
typedef struct spool_q_enddocprinter
{
- PRINTER_HND handle;
-} SPOOL_Q_ENDDOCPRINTER;
+ POLICY_HND handle;
+}
+SPOOL_Q_ENDDOCPRINTER;
typedef struct spool_r_enddocprinter
{
- uint32 status;
-} SPOOL_R_ENDDOCPRINTER;
+ WERROR status;
+}
+SPOOL_R_ENDDOCPRINTER;
typedef struct spool_q_writeprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 buffer_size;
uint8 *buffer;
uint32 buffer_size2;
-} SPOOL_Q_WRITEPRINTER;
+}
+SPOOL_Q_WRITEPRINTER;
typedef struct spool_r_writeprinter
{
uint32 buffer_written;
- uint32 status;
-} SPOOL_R_WRITEPRINTER;
-
-typedef struct spool_notify_option_type
-{
- uint16 type;
- uint16 reserved0;
- uint32 reserved1;
- uint32 reserved2;
- uint32 count;
- uint16 fields[16];
-} SPOOL_NOTIFY_OPTION_TYPE;
+ WERROR status;
+}
+SPOOL_R_WRITEPRINTER;
typedef struct spool_notify_option
{
uint32 version;
- uint32 reserved;
+ uint32 flags;
uint32 count;
- SPOOL_NOTIFY_OPTION_TYPE type[16]; /* totally arbitrary !!! */
-} SPOOL_NOTIFY_OPTION;
+ uint32 option_type_ptr;
+ SPOOL_NOTIFY_OPTION_TYPE_CTR ctr;
+}
+SPOOL_NOTIFY_OPTION;
typedef struct spool_notify_info_data
{
uint16 field;
uint32 reserved;
uint32 id;
- union
+ union
{
uint32 value[2];
struct
{
uint32 length;
- uint16 string[1024];
- } data;
- } notify_data;
+ uint16 *string;
+ }
+ data;
+ }
+ notify_data;
uint32 size;
- BOOL enc_type;
+ BOOL enc_type;
} SPOOL_NOTIFY_INFO_DATA;
typedef struct spool_notify_info
uint32 version;
uint32 flags;
uint32 count;
- SPOOL_NOTIFY_INFO_DATA data[26*16];
- /* 26 differents data types */
- /* so size it for 16 printers at max */
- /* jfmxxxx: Have to make it dynamic !!!*/
-} SPOOL_NOTIFY_INFO;
+ SPOOL_NOTIFY_INFO_DATA *data;
+}
+SPOOL_NOTIFY_INFO;
/* If the struct name looks obscure, yes it is ! */
/* RemoteFindFirstPrinterChangeNotificationEx query struct */
typedef struct spoolss_q_rffpcnex
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 flags;
uint32 options;
+ uint32 localmachine_ptr;
UNISTR2 localmachine;
- uint32 printerlocal;
- SPOOL_NOTIFY_OPTION option;
-} SPOOL_Q_RFFPCNEX;
+ uint32 printerlocal;
+ uint32 option_ptr;
+ SPOOL_NOTIFY_OPTION *option;
+}
+SPOOL_Q_RFFPCNEX;
typedef struct spool_r_rffpcnex
{
- uint32 status;
-} SPOOL_R_RFFPCNEX;
+ WERROR status;
+}
+SPOOL_R_RFFPCNEX;
/* Remote Find Next Printer Change Notify Ex */
typedef struct spool_q_rfnpcnex
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 change;
- SPOOL_NOTIFY_OPTION option;
-} SPOOL_Q_RFNPCNEX;
+ uint32 option_ptr;
+ SPOOL_NOTIFY_OPTION *option;
+}
+SPOOL_Q_RFNPCNEX;
typedef struct spool_r_rfnpcnex
{
- uint32 count;
+ uint32 info_ptr;
SPOOL_NOTIFY_INFO info;
-} SPOOL_R_RFNPCNEX;
+ WERROR status;
+}
+SPOOL_R_RFNPCNEX;
/* Find Close Printer Notify */
typedef struct spool_q_fcpn
{
- PRINTER_HND handle;
-} SPOOL_Q_FCPN;
+ POLICY_HND handle;
+}
+SPOOL_Q_FCPN;
typedef struct spool_r_fcpn
{
- uint32 status;
-} SPOOL_R_FCPN;
+ WERROR status;
+}
+SPOOL_R_FCPN;
typedef struct printer_info_0
UNISTR printername;
UNISTR servername;
uint32 cjobs;
- uint32 attributes;
- uint32 unknown0;
- uint32 unknown1;
- uint32 unknown2;
- uint32 unknown3;
- uint32 unknown4;
- uint32 unknown5;
- uint32 unknown6;
- uint16 majorversion;
- uint16 buildversion;
+ uint32 total_jobs;
+ uint32 total_bytes;
+
+ uint16 year;
+ uint16 month;
+ uint16 dayofweek;
+ uint16 day;
+ uint16 hour;
+ uint16 minute;
+ uint16 second;
+ uint16 milliseconds;
+
+ uint32 global_counter;
+ uint32 total_pages;
+
+ uint16 major_version;
+ uint16 build_version;
+
uint32 unknown7;
uint32 unknown8;
uint32 unknown9;
- uint32 unknown10;
+ uint32 session_counter;
uint32 unknown11;
- uint32 unknown12;
+ uint32 printer_errors;
uint32 unknown13;
uint32 unknown14;
uint32 unknown15;
uint32 unknown16;
- uint32 unknown17;
+ uint32 change_id;
uint32 unknown18;
uint32 status;
uint32 unknown20;
- uint32 unknown21;
+ uint32 c_setprinter;
+
uint16 unknown22;
- uint32 unknown23;
+ uint16 unknown23;
+ uint16 unknown24;
+ uint16 unknown25;
+ uint16 unknown26;
+ uint16 unknown27;
+ uint16 unknown28;
+ uint16 unknown29;
} PRINTER_INFO_0;
typedef struct printer_info_1
{
- uint32 flags;
- UNISTR description;
- UNISTR name;
- UNISTR comment;
-} PRINTER_INFO_1;
+ uint32 flags;
+ UNISTR description;
+ UNISTR name;
+ UNISTR comment;
+}
+PRINTER_INFO_1;
typedef struct printer_info_2
{
- UNISTR servername;
- UNISTR printername;
- UNISTR sharename;
- UNISTR portname;
- UNISTR drivername;
- UNISTR comment;
- UNISTR location;
- DEVICEMODE *devmode;
- UNISTR sepfile;
- UNISTR printprocessor;
- UNISTR datatype;
- UNISTR parameters;
- /*SECURITY_DESCRIPTOR securitydescriptor;*/
- uint32 attributes;
- uint32 priority;
- uint32 defaultpriority;
- uint32 starttime;
- uint32 untiltime;
- uint32 status;
- uint32 cjobs;
- uint32 averageppm;
-} PRINTER_INFO_2;
+ UNISTR servername;
+ UNISTR printername;
+ UNISTR sharename;
+ UNISTR portname;
+ UNISTR drivername;
+ UNISTR comment;
+ UNISTR location;
+ DEVICEMODE *devmode;
+ UNISTR sepfile;
+ UNISTR printprocessor;
+ UNISTR datatype;
+ UNISTR parameters;
+ SEC_DESC *secdesc;
+ uint32 attributes;
+ uint32 priority;
+ uint32 defaultpriority;
+ uint32 starttime;
+ uint32 untiltime;
+ uint32 status;
+ uint32 cjobs;
+ uint32 averageppm;
+}
+PRINTER_INFO_2;
+
+typedef struct printer_info_3
+{
+ uint32 flags;
+ SEC_DESC *secdesc;
+}
+PRINTER_INFO_3;
typedef struct spool_q_enumprinters
{
uint32 flags;
+ uint32 servername_ptr;
UNISTR2 servername;
uint32 level;
- BUFFER buffer;
-/* uint32 buf_size;*/
-} SPOOL_Q_ENUMPRINTERS;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_ENUMPRINTERS;
+
+typedef struct printer_info_ctr_info
+{
+ PRINTER_INFO_0 *printers_0;
+ PRINTER_INFO_1 *printers_1;
+ PRINTER_INFO_2 *printers_2;
+ PRINTER_INFO_3 *printers_3;
+}
+PRINTER_INFO_CTR;
typedef struct spool_r_enumprinters
{
- uint32 offered; /* number of bytes offered */
- uint32 needed; /* bytes needed */
- uint32 returned; /* number of printers */
- uint32 status;
- uint32 level;
- UNISTR servername;
- union {
- PRINTER_INFO_1 **printers_1;
- PRINTER_INFO_2 **printers_2;
- } printer;
-} SPOOL_R_ENUMPRINTERS;
+ NEW_BUFFER *buffer;
+ uint32 needed; /* bytes needed */
+ uint32 returned; /* number of printers */
+ WERROR status;
+}
+SPOOL_R_ENUMPRINTERS;
typedef struct spool_q_getprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
+ NEW_BUFFER *buffer;
uint32 offered;
-} SPOOL_Q_GETPRINTER;
+}
+SPOOL_Q_GETPRINTER;
-typedef struct spool_r_getprinter
+typedef struct printer_info_info
{
- PRINTER_HND handle;
- uint32 level;
-
- uint32 offered;
- uint32 needed;
- uint32 status;
- union {
+ union
+ {
PRINTER_INFO_0 *info0;
PRINTER_INFO_1 *info1;
PRINTER_INFO_2 *info2;
+ void *info;
} printer;
-} SPOOL_R_GETPRINTER;
-
-struct s_notify_info_data_table
-{
- uint16 type;
- uint16 field;
- char *name;
- uint32 size;
- void (*fn) (connection_struct *conn, int snum, SPOOL_NOTIFY_INFO_DATA *data, print_queue_struct *queue, NT_PRINTER_INFO_LEVEL *printer);
-};
+} PRINTER_INFO;
-typedef struct spool_q_getprinterdriver2
+typedef struct spool_r_getprinter
{
- PRINTER_HND handle;
- UNISTR2 architecture;
- uint32 level;
- BUFFER buffer;
- uint32 buf_size;
- uint32 status;
-} SPOOL_Q_GETPRINTERDRIVER2;
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ WERROR status;
+} SPOOL_R_GETPRINTER;
typedef struct driver_info_1
{
UNISTR datafile;
UNISTR configfile;
UNISTR helpfile;
- UNISTR dependentfiles;
+ uint16 *dependentfiles;
+ UNISTR monitorname;
+ UNISTR defaultdatatype;
+}
+DRIVER_INFO_3;
+
+typedef struct driver_info_6
+{
+ uint32 version;
+ UNISTR name;
+ UNISTR architecture;
+ UNISTR driverpath;
+ UNISTR datafile;
+ UNISTR configfile;
+ UNISTR helpfile;
+ uint16 *dependentfiles;
UNISTR monitorname;
UNISTR defaultdatatype;
-} DRIVER_INFO_3;
+ uint16* previousdrivernames;
+ NTTIME driver_date;
+ uint32 padding;
+ uint32 driver_version_low;
+ uint32 driver_version_high;
+ UNISTR mfgname;
+ UNISTR oem_url;
+ UNISTR hardware_id;
+ UNISTR provider;
+}
+DRIVER_INFO_6;
+
+typedef struct driver_info_info
+{
+ DRIVER_INFO_1 *info1;
+ DRIVER_INFO_2 *info2;
+ DRIVER_INFO_3 *info3;
+ DRIVER_INFO_6 *info6;
+}
+PRINTER_DRIVER_CTR;
+
+typedef struct spool_q_getprinterdriver2
+{
+ POLICY_HND handle;
+ uint32 architecture_ptr;
+ UNISTR2 architecture;
+ uint32 level;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+ uint32 clientmajorversion;
+ uint32 clientminorversion;
+}
+SPOOL_Q_GETPRINTERDRIVER2;
typedef struct spool_r_getprinterdriver2
{
+ NEW_BUFFER *buffer;
uint32 needed;
- uint32 offered;
- uint32 returned;
- uint32 status;
- uint32 level;
- union {
- DRIVER_INFO_1 *info1;
- DRIVER_INFO_2 *info2;
- DRIVER_INFO_3 *info3;
- } printer;
-} SPOOL_R_GETPRINTERDRIVER2;
+ uint32 servermajorversion;
+ uint32 serverminorversion;
+ WERROR status;
+}
+SPOOL_R_GETPRINTERDRIVER2;
+
typedef struct add_jobinfo_1
{
UNISTR path;
uint32 job_number;
-} ADD_JOBINFO_1;
+}
+ADD_JOBINFO_1;
typedef struct spool_q_addjob
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
- BUFFER buffer;
- uint32 buf_size;
-} SPOOL_Q_ADDJOB;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_ADDJOB;
typedef struct spool_r_addjob
{
- uint32 status;
-} SPOOL_R_ADDJOB;
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ WERROR status;
+}
+SPOOL_R_ADDJOB;
/*
* I'm really wondering how many different time formats
*/
typedef struct systemtime
{
- uint16 year;
- uint16 month;
- uint16 dayofweek;
- uint16 day;
- uint16 hour;
- uint16 minute;
- uint16 second;
- uint16 milliseconds;
-} SYSTEMTIME;
+ uint16 year;
+ uint16 month;
+ uint16 dayofweek;
+ uint16 day;
+ uint16 hour;
+ uint16 minute;
+ uint16 second;
+ uint16 milliseconds;
+}
+SYSTEMTIME;
typedef struct s_job_info_1
{
uint32 totalpages;
uint32 pagesprinted;
SYSTEMTIME submitted;
-} JOB_INFO_1;
+}
+JOB_INFO_1;
typedef struct s_job_info_2
{
UNISTR printprocessor;
UNISTR parameters;
UNISTR drivername;
- DEVICEMODE devmode;
+ DEVICEMODE *devmode;
UNISTR text_status;
/* SEC_DESC sec_desc;*/
uint32 status;
SYSTEMTIME submitted;
uint32 timeelapsed;
uint32 pagesprinted;
-} JOB_INFO_2;
+}
+JOB_INFO_2;
typedef struct spool_q_enumjobs
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 firstjob;
uint32 numofjobs;
uint32 level;
- BUFFER buffer;
- uint32 buf_size;
-} SPOOL_Q_ENUMJOBS;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_ENUMJOBS;
-typedef struct spool_r_enumjobs
+typedef struct job_info_ctr_info
{
- uint32 level;
- union {
- JOB_INFO_1 *job_info_1;
- JOB_INFO_2 *job_info_2;
+ union
+ {
+ JOB_INFO_1 **job_info_1;
+ JOB_INFO_2 **job_info_2;
+ void *info;
} job;
- uint32 offered;
- uint32 numofjobs;
- uint32 status;
-} SPOOL_R_ENUMJOBS;
+
+} JOB_INFO_CTR;
+
+typedef struct spool_r_enumjobs
+{
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ uint32 returned;
+ WERROR status;
+}
+SPOOL_R_ENUMJOBS;
typedef struct spool_q_schedulejob
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 jobid;
-} SPOOL_Q_SCHEDULEJOB;
+}
+SPOOL_Q_SCHEDULEJOB;
typedef struct spool_r_schedulejob
{
- uint32 status;
-} SPOOL_R_SCHEDULEJOB;
+ WERROR status;
+}
+SPOOL_R_SCHEDULEJOB;
typedef struct s_port_info_1
{
UNISTR port_name;
-} PORT_INFO_1;
+}
+PORT_INFO_1;
typedef struct s_port_info_2
{
UNISTR description;
uint32 port_type;
uint32 reserved;
-} PORT_INFO_2;
+}
+PORT_INFO_2;
typedef struct spool_q_enumports
{
+ uint32 name_ptr;
UNISTR2 name;
uint32 level;
- BUFFER buffer;
- uint32 buf_size;
-} SPOOL_Q_ENUMPORTS;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_ENUMPORTS;
+
+typedef struct port_info_ctr_info
+{
+ union
+ {
+ PORT_INFO_1 *info_1;
+ PORT_INFO_2 *info_2;
+ }
+ port;
+
+}
+PORT_INFO_CTR;
typedef struct spool_r_enumports
{
- uint32 level;
- union {
- PORT_INFO_1 *port_info_1;
- PORT_INFO_2 *port_info_2;
- } port;
- uint32 offered;
- uint32 numofports;
- uint32 status;
-} SPOOL_R_ENUMPORTS;
+ NEW_BUFFER *buffer;
+ uint32 needed; /* bytes needed */
+ uint32 returned; /* number of printers */
+ WERROR status;
+}
+SPOOL_R_ENUMPORTS;
#define JOB_CONTROL_PAUSE 1
#define JOB_CONTROL_RESUME 2
#define JOB_CONTROL_RESTART 4
#define JOB_CONTROL_DELETE 5
+typedef struct job_info_info
+{
+ union
+ {
+ JOB_INFO_1 job_info_1;
+ JOB_INFO_2 job_info_2;
+ }
+ job;
+
+}
+JOB_INFO;
+
typedef struct spool_q_setjob
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 jobid;
uint32 level;
- union {
- JOB_INFO_1 job_info_1;
- JOB_INFO_2 job_info_2;
- } job;
+ JOB_INFO ctr;
uint32 command;
-} SPOOL_Q_SETJOB;
+
+}
+SPOOL_Q_SETJOB;
typedef struct spool_r_setjob
{
- uint32 status;
-} SPOOL_R_SETJOB;
+ WERROR status;
+
+}
+SPOOL_R_SETJOB;
typedef struct spool_q_enumprinterdrivers
{
+ uint32 name_ptr;
UNISTR2 name;
+ uint32 environment_ptr;
UNISTR2 environment;
uint32 level;
- BUFFER buffer;
- uint32 buf_size;
-} SPOOL_Q_ENUMPRINTERDRIVERS;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_ENUMPRINTERDRIVERS;
typedef struct spool_r_enumprinterdrivers
{
- uint32 level;
- union {
- DRIVER_INFO_1 *driver_info_1;
- DRIVER_INFO_2 *driver_info_2;
- DRIVER_INFO_3 *driver_info_3;
- } driver;
- uint32 offered;
- uint32 numofdrivers;
- uint32 status;
-} SPOOL_R_ENUMPRINTERDRIVERS;
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ uint32 returned;
+ WERROR status;
+}
+SPOOL_R_ENUMPRINTERDRIVERS;
typedef struct spool_form_1
{
uint32 top;
uint32 right;
uint32 bottom;
-} FORM_1;
+}
+FORM_1;
typedef struct spool_q_enumforms
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
- BUFFER buffer;
- uint32 buf_size;
-} SPOOL_Q_ENUMFORMS;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_ENUMFORMS;
typedef struct spool_r_enumforms
{
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ uint32 numofforms;
+ WERROR status;
+}
+SPOOL_R_ENUMFORMS;
+
+typedef struct spool_q_getform
+{
+ POLICY_HND handle;
+ UNISTR2 formname;
uint32 level;
- FORM_1 *forms_1;
+ NEW_BUFFER *buffer;
uint32 offered;
- uint32 numofforms;
- uint32 status;
-} SPOOL_R_ENUMFORMS;
+}
+SPOOL_Q_GETFORM;
+typedef struct spool_r_getform
+{
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ WERROR status;
+}
+SPOOL_R_GETFORM;
+
+typedef struct spool_printer_info_level_1
+{
+ uint32 flags;
+ uint32 description_ptr;
+ uint32 name_ptr;
+ uint32 comment_ptr;
+ UNISTR2 description;
+ UNISTR2 name;
+ UNISTR2 comment;
+} SPOOL_PRINTER_INFO_LEVEL_1;
typedef struct spool_printer_info_level_2
{
uint32 default_priority;
uint32 starttime;
uint32 untiltime;
- uint32 status;
+ WERROR status;
uint32 cjobs;
uint32 averageppm;
UNISTR2 servername;
UNISTR2 datatype;
UNISTR2 parameters;
SEC_DESC_BUF *secdesc;
-} SPOOL_PRINTER_INFO_LEVEL_2;
+}
+SPOOL_PRINTER_INFO_LEVEL_2;
+
+typedef struct spool_printer_info_level_3
+{
+ uint32 secdesc_ptr;
+}
+SPOOL_PRINTER_INFO_LEVEL_3;
typedef struct spool_printer_info_level
{
+ uint32 level;
+ uint32 info_ptr;
+ SPOOL_PRINTER_INFO_LEVEL_1 *info_1;
SPOOL_PRINTER_INFO_LEVEL_2 *info_2;
-} SPOOL_PRINTER_INFO_LEVEL;
+ SPOOL_PRINTER_INFO_LEVEL_3 *info_3;
+}
+SPOOL_PRINTER_INFO_LEVEL;
typedef struct spool_printer_driver_info_level_3
{
UNISTR2 defaultdatatype;
BUFFER5 dependentfiles;
-} SPOOL_PRINTER_DRIVER_INFO_LEVEL_3;
+}
+SPOOL_PRINTER_DRIVER_INFO_LEVEL_3;
+
+/* SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 structure */
+typedef struct {
+ uint32 version;
+ uint32 name_ptr;
+ uint32 environment_ptr;
+ uint32 driverpath_ptr;
+ uint32 datafile_ptr;
+ uint32 configfile_ptr;
+ uint32 helpfile_ptr;
+ uint32 monitorname_ptr;
+ uint32 defaultdatatype_ptr;
+ uint32 dependentfiles_len;
+ uint32 dependentfiles_ptr;
+ uint32 previousnames_len;
+ uint32 previousnames_ptr;
+ NTTIME driverdate;
+ UINT64_S driverversion;
+ uint32 dummy4;
+ uint32 mfgname_ptr;
+ uint32 oemurl_ptr;
+ uint32 hardwareid_ptr;
+ uint32 provider_ptr;
+ UNISTR2 name;
+ UNISTR2 environment;
+ UNISTR2 driverpath;
+ UNISTR2 datafile;
+ UNISTR2 configfile;
+ UNISTR2 helpfile;
+ UNISTR2 monitorname;
+ UNISTR2 defaultdatatype;
+ BUFFER5 dependentfiles;
+ BUFFER5 previousnames;
+ UNISTR2 mfgname;
+ UNISTR2 oemurl;
+ UNISTR2 hardwareid;
+ UNISTR2 provider;
+} SPOOL_PRINTER_DRIVER_INFO_LEVEL_6;
+
typedef struct spool_printer_driver_info_level
{
+ uint32 level;
+ uint32 ptr;
SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *info_3;
-} SPOOL_PRINTER_DRIVER_INFO_LEVEL;
+ SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *info_6;
+}
+SPOOL_PRINTER_DRIVER_INFO_LEVEL;
/* this struct is undocumented */
uint32 processor;
UNISTR2 client_name;
UNISTR2 user_name;
-} SPOOL_USER_LEVEL_1;
+}
+SPOOL_USER_LEVEL_1;
typedef struct spool_user_level
{
SPOOL_USER_LEVEL_1 *user_level_1;
-} SPOOL_USER_LEVEL;
+}
+SPOOL_USER_LEVEL;
typedef struct spool_q_setprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
SPOOL_PRINTER_INFO_LEVEL info;
-
- DEVICEMODE *devmode;
- struct
- {
- uint32 size_of_buffer;
- uint32 data;
- } security;
+ SEC_DESC_BUF *secdesc_ctr;
+ DEVMODE_CTR devmode_ctr;
uint32 command;
-} SPOOL_Q_SETPRINTER;
+
+}
+SPOOL_Q_SETPRINTER;
typedef struct spool_r_setprinter
{
- uint32 status;
-} SPOOL_R_SETPRINTER;
+ WERROR status;
+}
+SPOOL_R_SETPRINTER;
typedef struct spool_q_addprinter
{
uint32 unk3;
uint32 user_level;
SPOOL_USER_LEVEL user;
-} SPOOL_Q_ADDPRINTER;
+}
+SPOOL_Q_ADDPRINTER;
typedef struct spool_r_addprinter
{
- uint32 status;
-} SPOOL_R_ADDPRINTER;
+ WERROR status;
+}
+SPOOL_R_ADDPRINTER;
+
+typedef struct spool_q_deleteprinter
+{
+ POLICY_HND handle;
+}
+SPOOL_Q_DELETEPRINTER;
+
+typedef struct spool_r_deleteprinter
+{
+ POLICY_HND handle;
+ WERROR status;
+}
+SPOOL_R_DELETEPRINTER;
+
+typedef struct spool_q_abortprinter
+{
+ POLICY_HND handle;
+}
+SPOOL_Q_ABORTPRINTER;
+
+typedef struct spool_r_abortprinter
+{
+ WERROR status;
+}
+SPOOL_R_ABORTPRINTER;
+
typedef struct spool_q_addprinterex
{
+ uint32 server_name_ptr;
UNISTR2 server_name;
uint32 level;
SPOOL_PRINTER_INFO_LEVEL info;
uint32 unk1;
uint32 unk2;
uint32 unk3;
- uint32 user_level;
- SPOOL_USER_LEVEL user;
-} SPOOL_Q_ADDPRINTEREX;
-
+ uint32 user_switch;
+ SPOOL_USER_CTR user_ctr;
+}
+SPOOL_Q_ADDPRINTEREX;
typedef struct spool_r_addprinterex
{
- PRINTER_HND handle;
- uint32 status;
-} SPOOL_R_ADDPRINTEREX;
+ POLICY_HND handle;
+ WERROR status;
+}
+SPOOL_R_ADDPRINTEREX;
+
typedef struct spool_q_addprinterdriver
{
+ uint32 server_name_ptr;
UNISTR2 server_name;
uint32 level;
SPOOL_PRINTER_DRIVER_INFO_LEVEL info;
-} SPOOL_Q_ADDPRINTERDRIVER;
+}
+SPOOL_Q_ADDPRINTERDRIVER;
typedef struct spool_r_addprinterdriver
{
- uint32 status;
-} SPOOL_R_ADDPRINTERDRIVER;
+ WERROR status;
+}
+SPOOL_R_ADDPRINTERDRIVER;
+
+
+typedef struct driver_directory_1
+{
+ UNISTR name;
+}
+DRIVER_DIRECTORY_1;
+
+typedef struct driver_info_ctr_info
+{
+ DRIVER_DIRECTORY_1 *info1;
+}
+DRIVER_DIRECTORY_CTR;
typedef struct spool_q_getprinterdriverdirectory
{
+ uint32 name_ptr;
UNISTR2 name;
+ uint32 environment_ptr;
UNISTR2 environment;
uint32 level;
- BUFFER buffer;
- uint32 buf_size;
-} SPOOL_Q_GETPRINTERDRIVERDIR;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_GETPRINTERDRIVERDIR;
-typedef struct driver_directory_1
+typedef struct spool_r_getprinterdriverdirectory
{
- UNISTR name;
-} DRIVER_DIRECTORY_1 ;
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ WERROR status;
+}
+SPOOL_R_GETPRINTERDRIVERDIR;
-typedef struct spool_r_getprinterdriverdirectory
+typedef struct spool_q_addprintprocessor
{
- uint32 level;
- union {
- DRIVER_DIRECTORY_1 driver_info_1;
- } driver;
- uint32 offered;
- uint32 status;
-} SPOOL_R_GETPRINTERDRIVERDIR;
+ uint32 server_ptr;
+ UNISTR2 server;
+ UNISTR2 environment;
+ UNISTR2 path;
+ UNISTR2 name;
+}
+SPOOL_Q_ADDPRINTPROCESSOR;
+
+typedef struct spool_r_addprintprocessor
+{
+ WERROR status;
+}
+SPOOL_R_ADDPRINTPROCESSOR;
+
typedef struct spool_q_enumprintprocessors
{
+ uint32 name_ptr;
UNISTR2 name;
+ uint32 environment_ptr;
UNISTR2 environment;
uint32 level;
- BUFFER buffer;
- uint32 buf_size;
-} SPOOL_Q_ENUMPRINTPROCESSORS;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_ENUMPRINTPROCESSORS;
typedef struct printprocessor_1
{
UNISTR name;
-} PRINTPROCESSOR_1;
+}
+PRINTPROCESSOR_1;
typedef struct spool_r_enumprintprocessors
{
- uint32 level;
- PRINTPROCESSOR_1 *info_1;
- uint32 offered;
- uint32 numofprintprocessors;
- uint32 status;
-} SPOOL_R_ENUMPRINTPROCESSORS;
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ uint32 returned;
+ WERROR status;
+}
+SPOOL_R_ENUMPRINTPROCESSORS;
-typedef struct spool_q_enumprintprocessordatatypes
+typedef struct spool_q_enumprintprocdatatypes
{
+ uint32 name_ptr;
UNISTR2 name;
- UNISTR2 printprocessor;
+ uint32 processor_ptr;
+ UNISTR2 processor;
uint32 level;
- BUFFER buffer;
- uint32 buf_size;
-} SPOOL_Q_ENUMPRINTPROCESSORDATATYPES;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_ENUMPRINTPROCDATATYPES;
typedef struct ppdatatype_1
{
UNISTR name;
-} PPDATATYPE_1;
+}
+PRINTPROCDATATYPE_1;
-typedef struct spool_r_enumprintprocessordatatypes
+typedef struct spool_r_enumprintprocdatatypes
{
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ uint32 returned;
+ WERROR status;
+}
+SPOOL_R_ENUMPRINTPROCDATATYPES;
+
+typedef struct printmonitor_1
+{
+ UNISTR name;
+}
+PRINTMONITOR_1;
+
+typedef struct printmonitor_2
+{
+ UNISTR name;
+ UNISTR environment;
+ UNISTR dll_name;
+}
+PRINTMONITOR_2;
+
+typedef struct spool_q_enumprintmonitors
+{
+ uint32 name_ptr;
+ UNISTR2 name;
uint32 level;
- PPDATATYPE_1 *info_1;
+ NEW_BUFFER *buffer;
uint32 offered;
- uint32 numofppdatatypes;
- uint32 status;
-} SPOOL_R_ENUMPRINTPROCESSORDATATYPES;
+}
+SPOOL_Q_ENUMPRINTMONITORS;
+
+typedef struct spool_r_enumprintmonitors
+{
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ uint32 returned;
+ WERROR status;
+}
+SPOOL_R_ENUMPRINTMONITORS;
+
typedef struct spool_q_enumprinterdata
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 index;
uint32 valuesize;
uint32 datasize;
-} SPOOL_Q_ENUMPRINTERDATA;
+}
+SPOOL_Q_ENUMPRINTERDATA;
typedef struct spool_r_enumprinterdata
{
uint32 valuesize;
- UNISTR value;
+ uint16 *value;
uint32 realvaluesize;
uint32 type;
uint32 datasize;
- uint8 *data;
+ uint8 *data;
uint32 realdatasize;
- uint32 status;
-} SPOOL_R_ENUMPRINTERDATA;
+ WERROR status;
+}
+SPOOL_R_ENUMPRINTERDATA;
typedef struct spool_q_setprinterdata
{
- PRINTER_HND handle;
+ POLICY_HND handle;
UNISTR2 value;
uint32 type;
uint32 max_len;
uint8 *data;
uint32 real_len;
uint32 numeric_data;
-} SPOOL_Q_SETPRINTERDATA;
+}
+SPOOL_Q_SETPRINTERDATA;
typedef struct spool_r_setprinterdata
{
- uint32 status;
-} SPOOL_R_SETPRINTERDATA;
+ WERROR status;
+}
+SPOOL_R_SETPRINTERDATA;
typedef struct _form
{
- uint32 flags;
- uint32 name_ptr;
- uint32 size_x;
- uint32 size_y;
- uint32 left;
- uint32 top;
- uint32 right;
- uint32 bottom;
- UNISTR2 name;
-} FORM;
+ uint32 flags;
+ uint32 name_ptr;
+ uint32 size_x;
+ uint32 size_y;
+ uint32 left;
+ uint32 top;
+ uint32 right;
+ uint32 bottom;
+ UNISTR2 name;
+}
+FORM;
typedef struct spool_q_addform
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
uint32 level2;
FORM form;
-} SPOOL_Q_ADDFORM;
+}
+SPOOL_Q_ADDFORM;
typedef struct spool_r_addform
{
- uint32 status;
-} SPOOL_R_ADDFORM;
+ WERROR status;
+}
+SPOOL_R_ADDFORM;
typedef struct spool_q_setform
{
- PRINTER_HND handle;
+ POLICY_HND handle;
UNISTR2 name;
uint32 level;
uint32 level2;
FORM form;
-} SPOOL_Q_SETFORM;
+}
+SPOOL_Q_SETFORM;
typedef struct spool_r_setform
{
- uint32 status;
-} SPOOL_R_SETFORM;
+ WERROR status;
+}
+SPOOL_R_SETFORM;
+
+typedef struct spool_q_deleteform
+{
+ POLICY_HND handle;
+ UNISTR2 name;
+}
+SPOOL_Q_DELETEFORM;
+
+typedef struct spool_r_deleteform
+{
+ WERROR status;
+}
+SPOOL_R_DELETEFORM;
+
+typedef struct spool_q_getjob
+{
+ POLICY_HND handle;
+ uint32 jobid;
+ uint32 level;
+ NEW_BUFFER *buffer;
+ uint32 offered;
+}
+SPOOL_Q_GETJOB;
+
+typedef struct pjob_info_info
+{
+ union
+ {
+ JOB_INFO_1 *job_info_1;
+ JOB_INFO_2 *job_info_2;
+ void *info;
+ }
+ job;
+
+}
+PJOB_INFO;
+
+typedef struct spool_r_getjob
+{
+ NEW_BUFFER *buffer;
+ uint32 needed;
+ WERROR status;
+}
+SPOOL_R_GETJOB;
+
+typedef struct spool_q_replyopenprinter
+{
+ UNISTR2 string;
+ uint32 printer;
+ uint32 type;
+ uint32 unknown0;
+ uint32 unknown1;
+}
+SPOOL_Q_REPLYOPENPRINTER;
+
+typedef struct spool_r_replyopenprinter
+{
+ POLICY_HND handle;
+ WERROR status;
+}
+SPOOL_R_REPLYOPENPRINTER;
+
+typedef struct spool_q_replycloseprinter
+{
+ POLICY_HND handle;
+}
+SPOOL_Q_REPLYCLOSEPRINTER;
+
+typedef struct spool_r_replycloseprinter
+{
+ POLICY_HND handle;
+ WERROR status;
+}
+SPOOL_R_REPLYCLOSEPRINTER;
+
+typedef struct spool_q_rrpcn
+{
+ POLICY_HND handle;
+ uint32 change_low;
+ uint32 change_high;
+ uint32 unknown0;
+ uint32 unknown1;
+ uint32 info_ptr;
+ SPOOL_NOTIFY_INFO info;
+}
+SPOOL_Q_REPLY_RRPCN;
+
+typedef struct spool_r_rrpcn
+{
+ uint32 unknown0;
+ WERROR status;
+}
+SPOOL_R_REPLY_RRPCN;
+
+typedef struct spool_q_getprinterdataex
+{
+ POLICY_HND handle;
+ UNISTR2 keyname;
+ UNISTR2 valuename;
+ uint32 size;
+}
+SPOOL_Q_GETPRINTERDATAEX;
+
+typedef struct spool_r_getprinterdataex
+{
+ uint32 type;
+ uint32 size;
+ uint8 *data;
+ uint32 needed;
+ WERROR status;
+}
+SPOOL_R_GETPRINTERDATAEX;
+
+typedef struct spool_q_setprinterdataex
+{
+ POLICY_HND handle;
+ UNISTR2 key;
+ UNISTR2 value;
+ uint32 type;
+ uint32 max_len;
+ uint8 *data;
+ uint32 real_len;
+ uint32 numeric_data;
+}
+SPOOL_Q_SETPRINTERDATAEX;
+
+typedef struct spool_r_setprinterdataex
+{
+ WERROR status;
+}
+SPOOL_R_SETPRINTERDATAEX;
#define PRINTER_DRIVER_VERSION 2
#define PRINTER_DRIVER_ARCHITECTURE "Windows NT x86"
-
#endif /* _RPC_SPOOLSS_H */
-