rewrote enumprinterdata. still a bug in it but reproducing it hard and
[ira/wip.git] / source3 / include / rpc_spoolss.h
1 /* 
2    Unix SMB/Netbios implementation.
3    Version 1.9.
4    SMB parameters and setup
5    Copyright (C) Andrew Tridgell              1992-2000,
6    Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
7    Copyright (C) Jean Francois Micouleau      1998-2000.
8    
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13    
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18    
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #ifndef _RPC_SPOOLSS_H /* _RPC_SPOOLSS_H */
25 #define _RPC_SPOOLSS_H 
26
27 #define INTEGER 1
28 #define STRING 2
29
30 /* spoolss pipe: this are the calls which are not implemented ...
31 #define SPOOLSS_OPENPRINTER                             0x01
32 #define SPOOLSS_DELETEPRINTER                           0x06
33 #define SPOOLSS_GETPRINTERDRIVER                        0x0b
34 #define SPOOLSS_DELETEPRINTERDRIVER                     0x0d
35 #define SPOOLSS_ADDPRINTPROCESSOR                       0x0e
36 #define SPOOLSS_GETPRINTPROCESSORDIRECTORY              0x10
37 #define SPOOLSS_ABORTPRINTER                            0x15
38 #define SPOOLSS_READPRINTER                             0x16
39 #define SPOOLSS_WAITFORPRINTERCHANGE                    0x1c
40 #define SPOOLSS_DELETEFORM                              0x1f
41 #define SPOOLSS_GETFORM                                 0x20
42 #define SPOOLSS_ADDPORT                                 0x25
43 #define SPOOLSS_CONFIGUREPORT                           0x26
44 #define SPOOLSS_DELETEPORT                              0x27
45 #define SPOOLSS_CREATEPRINTERIC                         0x28
46 #define SPOOLSS_PLAYGDISCRIPTONPRINTERIC                0x29
47 #define SPOOLSS_DELETEPRINTERIC                         0x2a
48 #define SPOOLSS_ADDPRINTERCONNECTION                    0x2b
49 #define SPOOLSS_DELETEPRINTERCONNECTION                 0x2c
50 #define SPOOLSS_PRINTERMESSAGEBOX                       0x2d
51 #define SPOOLSS_ADDMONITOR                              0x2e
52 #define SPOOLSS_DELETEMONITOR                           0x2f
53 #define SPOOLSS_DELETEPRINTPROCESSOR                    0x30
54 #define SPOOLSS_ADDPRINTPROVIDOR                        0x31
55 #define SPOOLSS_DELETEPRINTPROVIDOR                     0x32
56 #define SPOOLSS_RESETPRINTER                            0x34
57 #define SPOOLSS_FINDFIRSTPRINTERCHANGENOTIFICATION      0x36
58 #define SPOOLSS_FINDNEXTPRINTERCHANGENOTIFICATION       0x37
59 #define SPOOLSS_ROUTERFINDFIRSTPRINTERNOTIFICATIONOLD   0x39
60 #define SPOOLSS_REPLYOPENPRINTER                        0x3a
61 #define SPOOLSS_ROUTERREPLYPRINTER                      0x3b
62 #define SPOOLSS_REPLYCLOSEPRINTER                       0x3c
63 #define SPOOLSS_ADDPORTEX                               0x3d
64 #define SPOOLSS_REMOTEFINDFIRSTPRINTERCHANGENOTIFICATION0x3e
65 #define SPOOLSS_SPOOLERINIT                             0x3f
66 #define SPOOLSS_RESETPRINTEREX                          0x40
67 #define SPOOLSS_ROUTERREFRESHPRINTERCHANGENOTIFICATION  0x42
68 */
69
70 /* those are implemented */
71 #define SPOOLSS_ENUMPRINTERS                            0x00
72 #define SPOOLSS_SETJOB                                  0x02
73 #define SPOOLSS_GETJOB                                  0x03
74 #define SPOOLSS_ENUMJOBS                                0x04
75 #define SPOOLSS_ADDPRINTER                              0x05
76 #define SPOOLSS_SETPRINTER                              0x07
77 #define SPOOLSS_GETPRINTER                              0x08
78 #define SPOOLSS_ADDPRINTERDRIVER                        0x09
79 #define SPOOLSS_ENUMPRINTERDRIVERS                      0x0a
80 #define SPOOLSS_GETPRINTERDRIVERDIRECTORY               0x0c
81 #define SPOOLSS_ENUMPRINTPROCESSORS                     0x0f
82 #define SPOOLSS_STARTDOCPRINTER                         0x11
83 #define SPOOLSS_STARTPAGEPRINTER                        0x12
84 #define SPOOLSS_WRITEPRINTER                            0x13
85 #define SPOOLSS_ENDPAGEPRINTER                          0x14
86 #define SPOOLSS_ENDDOCPRINTER                           0x17
87 #define SPOOLSS_ADDJOB                                  0x18
88 #define SPOOLSS_SCHEDULEJOB                             0x19
89 #define SPOOLSS_GETPRINTERDATA                          0x1a
90 #define SPOOLSS_SETPRINTERDATA                          0x1b
91 #define SPOOLSS_CLOSEPRINTER                            0x1d
92 #define SPOOLSS_ADDFORM                                 0x1e
93 #define SPOOLSS_SETFORM                                 0x21
94 #define SPOOLSS_ENUMFORMS                               0x22
95 #define SPOOLSS_ENUMPORTS                               0x23
96 #define SPOOLSS_ENUMMONITORS                            0x24
97 #define SPOOLSS_ENUMPRINTPROCESSORDATATYPES             0x33
98 #define SPOOLSS_GETPRINTERDRIVER2                       0x35
99 /* find close printer notification */
100 #define SPOOLSS_FCPN                                    0x38
101 /* remote find first printer change notifyEx */
102 #define SPOOLSS_RFFPCNEX                                0x41
103 /* remote find next printer change notifyEx */
104 #define SPOOLSS_RFNPCNEX                                0x43
105 #define SPOOLSS_OPENPRINTEREX                           0x45
106 #define SPOOLSS_ADDPRINTEREX                            0x46
107 #define SPOOLSS_ENUMPRINTERDATA                         0x48
108
109 #define SERVER_ACCESS_ADMINISTER        0x00000001
110 #define SERVER_ACCESS_ENUMERATE         0x00000002
111
112 #define PRINTER_ACCESS_ADMINISTER       0x00000004
113 #define PRINTER_ACCESS_USE              0x00000008
114
115 #define PRINTER_CONTROL_UNPAUSE         0x00000000
116 #define PRINTER_CONTROL_PAUSE           0x00000001
117 #define PRINTER_CONTROL_RESUME          0x00000002
118 #define PRINTER_CONTROL_PURGE           0x00000003
119 #define PRINTER_CONTROL_SET_STATUS      0x00000004
120
121 #define PRINTER_STATUS_PAUSED           0x00000001
122 #define PRINTER_STATUS_ERROR            0x00000002
123 #define PRINTER_STATUS_PENDING_DELETION 0x00000004
124 #define PRINTER_STATUS_PAPER_JAM        0x00000008
125
126 #define PRINTER_STATUS_PAPER_OUT        0x00000010
127 #define PRINTER_STATUS_MANUAL_FEED      0x00000020
128 #define PRINTER_STATUS_PAPER_PROBLEM    0x00000040
129 #define PRINTER_STATUS_OFFLINE          0x00000080
130
131 #define PRINTER_STATUS_IO_ACTIVE        0x00000100
132 #define PRINTER_STATUS_BUSY             0x00000200
133 #define PRINTER_STATUS_PRINTING         0x00000400
134 #define PRINTER_STATUS_OUTPUT_BIN_FULL  0x00000800
135
136 #define PRINTER_STATUS_NOT_AVAILABLE    0x00001000
137 #define PRINTER_STATUS_WAITING          0x00002000
138 #define PRINTER_STATUS_PROCESSING       0x00004000
139 #define PRINTER_STATUS_INITIALIZING     0x00008000
140
141 #define PRINTER_STATUS_WARMING_UP       0x00010000
142 #define PRINTER_STATUS_TONER_LOW        0x00020000
143 #define PRINTER_STATUS_NO_TONER         0x00040000
144 #define PRINTER_STATUS_PAGE_PUNT        0x00080000
145
146 #define PRINTER_STATUS_USER_INTERVENTION        0x00100000
147 #define PRINTER_STATUS_OUT_OF_MEMORY    0x00200000
148 #define PRINTER_STATUS_DOOR_OPEN        0x00400000
149 #define PRINTER_STATUS_SERVER_UNKNOWN   0x00800000
150
151 #define PRINTER_STATUS_POWER_SAVE       0x01000000
152
153 #define JOB_ACCESS_ADMINISTER           0x00000010
154
155 #define STANDARD_RIGHTS_READ            0x00020000
156 #define STANDARD_RIGHTS_WRITE           STANDARD_RIGHTS_READ
157 #define STANDARD_RIGHTS_EXECUTE         STANDARD_RIGHTS_READ
158 #define STANDARD_RIGHTS_REQUIRED        0x000F0000
159
160 /* Access rights for print servers */
161 #define SERVER_ALL_ACCESS       STANDARD_RIGHTS_REQUIRED|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE
162 #define SERVER_READ             STANDARD_RIGHTS_READ|SERVER_ACCESS_ENUMERATE
163 #define SERVER_WRITE            STANDARD_RIGHTS_WRITE|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE
164 #define SERVER_EXECUTE          STANDARD_RIGHTS_EXECUTE|SERVER_ACCESS_ENUMERATE
165
166 /* Access rights for printers */
167 #define PRINTER_ALL_ACCESS      STANDARD_RIGHTS_REQUIRED|PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE
168 #define PRINTER_READ          STANDARD_RIGHTS_READ|PRINTER_ACCESS_USE
169 #define PRINTER_WRITE         STANDARD_RIGHTS_WRITE|PRINTER_ACCESS_USE
170 #define PRINTER_EXECUTE       STANDARD_RIGHTS_EXECUTE|PRINTER_ACCESS_USE
171
172 /* Access rights for jobs */
173 #define JOB_ALL_ACCESS  STANDARD_RIGHTS_REQUIRED|JOB_ACCESS_ADMINISTER
174 #define JOB_READ        STANDARD_RIGHTS_READ|JOB_ACCESS_ADMINISTER
175 #define JOB_WRITE       STANDARD_RIGHTS_WRITE|JOB_ACCESS_ADMINISTER
176 #define JOB_EXECUTE     STANDARD_RIGHTS_EXECUTE|JOB_ACCESS_ADMINISTER
177
178 #define POLICY_HND_SIZE 20
179
180 #define ONE_VALUE 01
181 #define TWO_VALUE 02
182 #define POINTER   03
183
184 #define PRINTER_NOTIFY_TYPE 0x00
185 #define JOB_NOTIFY_TYPE     0x01
186
187 #define MAX_PRINTER_NOTIFY 26
188 #define MAX_JOB_NOTIFY 24
189
190 #define MAX_NOTIFY_TYPE_FOR_NOW 26
191
192 #define PRINTER_NOTIFY_SERVER_NAME              0x00
193 #define PRINTER_NOTIFY_PRINTER_NAME             0x01
194 #define PRINTER_NOTIFY_SHARE_NAME               0x02
195 #define PRINTER_NOTIFY_PORT_NAME                0x03
196 #define PRINTER_NOTIFY_DRIVER_NAME              0x04
197 #define PRINTER_NOTIFY_COMMENT                  0x05
198 #define PRINTER_NOTIFY_LOCATION                 0x06
199 #define PRINTER_NOTIFY_DEVMODE                  0x07
200 #define PRINTER_NOTIFY_SEPFILE                  0x08
201 #define PRINTER_NOTIFY_PRINT_PROCESSOR          0x09
202 #define PRINTER_NOTIFY_PARAMETERS               0x0A
203 #define PRINTER_NOTIFY_DATATYPE                 0x0B
204 #define PRINTER_NOTIFY_SECURITY_DESCRIPTOR      0x0C
205 #define PRINTER_NOTIFY_ATTRIBUTES               0x0D
206 #define PRINTER_NOTIFY_PRIORITY                 0x0E
207 #define PRINTER_NOTIFY_DEFAULT_PRIORITY         0x0F
208 #define PRINTER_NOTIFY_START_TIME               0x10
209 #define PRINTER_NOTIFY_UNTIL_TIME               0x11
210 #define PRINTER_NOTIFY_STATUS                   0x12
211 #define PRINTER_NOTIFY_STATUS_STRING            0x13
212 #define PRINTER_NOTIFY_CJOBS                    0x14
213 #define PRINTER_NOTIFY_AVERAGE_PPM              0x15
214 #define PRINTER_NOTIFY_TOTAL_PAGES              0x16
215 #define PRINTER_NOTIFY_PAGES_PRINTED            0x17
216 #define PRINTER_NOTIFY_TOTAL_BYTES              0x18
217 #define PRINTER_NOTIFY_BYTES_PRINTED            0x19
218
219 #define JOB_NOTIFY_PRINTER_NAME                 0x00
220 #define JOB_NOTIFY_MACHINE_NAME                 0x01
221 #define JOB_NOTIFY_PORT_NAME                    0x02
222 #define JOB_NOTIFY_USER_NAME                    0x03
223 #define JOB_NOTIFY_NOTIFY_NAME                  0x04
224 #define JOB_NOTIFY_DATATYPE                     0x05
225 #define JOB_NOTIFY_PRINT_PROCESSOR              0x06
226 #define JOB_NOTIFY_PARAMETERS                   0x07
227 #define JOB_NOTIFY_DRIVER_NAME                  0x08
228 #define JOB_NOTIFY_DEVMODE                      0x09
229 #define JOB_NOTIFY_STATUS                       0x0A
230 #define JOB_NOTIFY_STATUS_STRING                0x0B
231 #define JOB_NOTIFY_SECURITY_DESCRIPTOR          0x0C
232 #define JOB_NOTIFY_DOCUMENT                     0x0D
233 #define JOB_NOTIFY_PRIORITY                     0x0E
234 #define JOB_NOTIFY_POSITION                     0x0F
235 #define JOB_NOTIFY_SUBMITTED                    0x10
236 #define JOB_NOTIFY_START_TIME                   0x11
237 #define JOB_NOTIFY_UNTIL_TIME                   0x12
238 #define JOB_NOTIFY_TIME                         0x13
239 #define JOB_NOTIFY_TOTAL_PAGES                  0x14
240 #define JOB_NOTIFY_PAGES_PRINTED                0x15
241 #define JOB_NOTIFY_TOTAL_BYTES                  0x16
242 #define JOB_NOTIFY_BYTES_PRINTED                0x17
243
244 #define PRINTER_CHANGE_ADD_PRINTER                      0x00000001
245 #define PRINTER_CHANGE_SET_PRINTER                      0x00000002
246 #define PRINTER_CHANGE_DELETE_PRINTER                   0x00000004
247 #define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER        0x00000008
248 #define PRINTER_CHANGE_PRINTER  (PRINTER_CHANGE_ADD_PRINTER | \
249                                  PRINTER_CHANGE_SET_PRINTER | \
250                                  PRINTER_CHANGE_DELETE_PRINTER | \
251                                  PRINTER_CHANGE_FAILED_CONNECTION_PRINTER )
252
253 #define PRINTER_CHANGE_ADD_JOB                          0x00000100
254 #define PRINTER_CHANGE_SET_JOB                          0x00000200
255 #define PRINTER_CHANGE_DELETE_JOB                       0x00000400
256 #define PRINTER_CHANGE_WRITE_JOB                        0x00000800
257 #define PRINTER_CHANGE_JOB      (PRINTER_CHANGE_ADD_JOB | \
258                                  PRINTER_CHANGE_SET_JOB | \
259                                  PRINTER_CHANGE_DELETE_JOB | \
260                                  PRINTER_CHANGE_WRITE_JOB )
261
262 #define PRINTER_CHANGE_ADD_FORM                         0x00010000
263 #define PRINTER_CHANGE_SET_FORM                         0x00020000
264 #define PRINTER_CHANGE_DELETE_FORM                      0x00040000
265 #define PRINTER_CHANGE_FORM     (PRINTER_CHANGE_ADD_FORM | \
266                                  PRINTER_CHANGE_SET_FORM | \
267                                  PRINTER_CHANGE_DELETE_FORM )
268
269 #define PRINTER_CHANGE_ADD_PORT                         0x00100000
270 #define PRINTER_CHANGE_CONFIGURE_PORT                   0x00200000
271 #define PRINTER_CHANGE_DELETE_PORT                      0x00400000
272 #define PRINTER_CHANGE_PORT     (PRINTER_CHANGE_ADD_PORT | \
273                                  PRINTER_CHANGE_CONFIGURE_PORT | \
274                                  PRINTER_CHANGE_DELETE_PORT )
275
276 #define PRINTER_CHANGE_ADD_PRINT_PROCESSOR              0x01000000
277 #define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR           0x04000000
278 #define PRINTER_CHANGE_PRINT_PROCESSOR  (PRINTER_CHANGE_ADD_PRINT_PROCESSOR | \
279                                          PRINTER_CHANGE_DELETE_PRINT_PROCESSOR )
280
281 #define PRINTER_CHANGE_ADD_PRINTER_DRIVER               0x10000000
282 #define PRINTER_CHANGE_SET_PRINTER_DRIVER               0x20000000
283 #define PRINTER_CHANGE_DELETE_PRINTER_DRIVER            0x40000000
284 #define PRINTER_CHANGE_PRINTER_DRIVER   (PRINTER_CHANGE_ADD_PRINTER_DRIVER | \
285                                          PRINTER_CHANGE_SET_PRINTER_DRIVER | \
286                                          PRINTER_CHANGE_DELETE_PRINTER_DRIVER )
287
288 #define PRINTER_CHANGE_TIMEOUT                          0x80000000
289 #define PRINTER_CHANGE_ALL      (PRINTER_CHANGE_JOB | \
290                                  PRINTER_CHANGE_FORM | \
291                                  PRINTER_CHANGE_PORT | \
292                                  PRINTER_CHANGE_PRINT_PROCESSOR | \
293                                  PRINTER_CHANGE_PRINTER_DRIVER )
294
295 /*
296  * The printer attributes.
297  * I #defined all of them (grabbed form MSDN)
298  * I'm only using:
299  * ( SHARED | NETWORK | RAW_ONLY )
300  * RAW_ONLY _MUST_ be present otherwise NT will send an EMF file
301  */
302  
303 #define PRINTER_ATTRIBUTE_QUEUED                0x00000001
304 #define PRINTER_ATTRIBUTE_DIRECT                0x00000002
305 #define PRINTER_ATTRIBUTE_DEFAULT               0x00000004
306 #define PRINTER_ATTRIBUTE_SHARED                0x00000008
307
308 #define PRINTER_ATTRIBUTE_NETWORK               0x00000010
309 #define PRINTER_ATTRIBUTE_HIDDEN                0x00000020
310 #define PRINTER_ATTRIBUTE_LOCAL                 0x00000040
311 #define PRINTER_ATTRIBUTE_ENABLE_DEVQ           0x00000080
312
313 #define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS       0x00000100
314 #define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST     0x00000200
315 #define PRINTER_ATTRIBUTE_WORK_OFFLINE          0x00000400
316 #define PRINTER_ATTRIBUTE_ENABLE_BIDI           0x00000800
317
318 #define PRINTER_ATTRIBUTE_RAW_ONLY              0x00001000
319
320 #define NO_PRIORITY      0
321 #define MAX_PRIORITY    99
322 #define MIN_PRIORITY     1
323 #define DEF_PRIORITY     1
324
325 /* the flags of the query */
326 #define PRINTER_ENUM_DEFAULT            0x00000001
327 #define PRINTER_ENUM_LOCAL              0x00000002
328 #define PRINTER_ENUM_CONNECTIONS        0x00000004
329 #define PRINTER_ENUM_FAVORITE           0x00000004
330 #define PRINTER_ENUM_NAME               0x00000008
331 #define PRINTER_ENUM_REMOTE             0x00000010
332 #define PRINTER_ENUM_SHARED             0x00000020
333 #define PRINTER_ENUM_NETWORK            0x00000040
334
335 /* the flags of each printers */
336 #define PRINTER_ENUM_EXPAND             0x00004000
337 #define PRINTER_ENUM_CONTAINER          0x00008000
338 #define PRINTER_ENUM_ICONMASK           0x00ff0000
339 #define PRINTER_ENUM_ICON1              0x00010000
340 #define PRINTER_ENUM_ICON2              0x00020000
341 #define PRINTER_ENUM_ICON3              0x00040000
342 #define PRINTER_ENUM_ICON4              0x00080000
343 #define PRINTER_ENUM_ICON5              0x00100000
344 #define PRINTER_ENUM_ICON6              0x00200000
345 #define PRINTER_ENUM_ICON7              0x00400000
346 #define PRINTER_ENUM_ICON8              0x00800000
347
348 #define POLICY_HND_SIZE 20
349
350 /* this struct is undocumented */
351 /* thanks to the ddk ... */
352 typedef struct spool_user_1
353 {
354         uint32 size;
355         uint32 client_name_ptr;
356         uint32 user_name_ptr;
357         uint32 build;
358         uint32 major;
359         uint32 minor;
360         uint32 processor;
361         UNISTR2 client_name;
362         UNISTR2 user_name;
363 } SPOOL_USER_1;
364
365 typedef struct spool_user_ctr_info
366 {
367         uint32 level;
368         uint32 ptr;
369         SPOOL_USER_1 user1;
370 } SPOOL_USER_CTR;
371
372 typedef struct devicemode
373 {
374         UNISTR  devicename;
375         uint16  specversion;
376         uint16  driverversion;
377         uint16  size;
378         uint16  driverextra;
379         uint32  fields;
380         uint16  orientation;
381         uint16  papersize;
382         uint16  paperlength;
383         uint16  paperwidth;
384         uint16  scale;
385         uint16  copies;
386         uint16  defaultsource;
387         uint16  printquality;
388         uint16  color;
389         uint16  duplex;
390         uint16  yresolution;
391         uint16  ttoption;
392         uint16  collate;
393         UNISTR  formname;
394         uint16  logpixels;
395         uint32  bitsperpel;
396         uint32  pelswidth;
397         uint32  pelsheight;
398         uint32  displayflags;
399         uint32  displayfrequency;
400         uint32  icmmethod;
401         uint32  icmintent;
402         uint32  mediatype;
403         uint32  dithertype;
404         uint32  reserved1;
405         uint32  reserved2;
406         uint32  panningwidth;
407         uint32  panningheight;
408         uint8   *private;
409 } DEVICEMODE;
410
411 typedef struct _devmode_cont
412 {
413         uint32 size;
414         uint32 devmode_ptr;
415         DEVICEMODE *devmode;
416 } DEVMODE_CTR;
417
418 typedef struct _printer_default
419 {
420         uint32 datatype_ptr;
421         UNISTR2 datatype;
422         DEVMODE_CTR devmode_cont;
423         uint32 access_required;
424 } PRINTER_DEFAULT;
425
426 /* SPOOL_Q_OPEN_PRINTER_EX request to open a printer */
427 typedef struct spool_q_open_printer_ex
428 {
429         uint32 printername_ptr;
430         UNISTR2 printername;
431         PRINTER_DEFAULT printer_default;
432         uint32 user_switch;
433         SPOOL_USER_CTR user_ctr;
434 } SPOOL_Q_OPEN_PRINTER_EX;
435
436 /* SPOOL_R_OPEN_PRINTER_EX reply to an open printer */ 
437 typedef struct spool_r_open_printer_ex
438 {       
439         POLICY_HND handle; /* handle used along all transactions (20*uint8) */
440         uint32 status;
441
442 } SPOOL_R_OPEN_PRINTER_EX;
443
444 typedef struct spool_notify_option_type
445 {
446         uint16 type;
447         uint16 reserved0;
448         uint32 reserved1;
449         uint32 reserved2;
450         uint32 count;
451         uint32 fields_ptr;
452         uint32 count2;
453         uint16 fields[MAX_NOTIFY_TYPE_FOR_NOW];
454 } SPOOL_NOTIFY_OPTION_TYPE;
455
456 typedef struct spool_notify_option_type_ctr
457 {
458         uint32 count;
459         SPOOL_NOTIFY_OPTION_TYPE *type;
460 } SPOOL_NOTIFY_OPTION_TYPE_CTR;
461
462
463
464 typedef struct s_header_type
465 {
466         uint32 type;
467         union
468         {
469                 uint32 value;
470                 UNISTR string;
471         } data;
472 } HEADER_TYPE;
473
474 typedef struct new_buffer
475 {
476         uint32 ptr;
477         uint32 size;
478         prs_struct prs;
479         uint32 struct_start;
480         uint32 string_at_end;
481 } NEW_BUFFER;
482
483 typedef struct spool_q_getprinterdata
484 {
485         POLICY_HND handle;
486         UNISTR2    valuename;
487         uint32     size;
488 } SPOOL_Q_GETPRINTERDATA;
489
490 typedef struct spool_r_getprinterdata
491 {
492         uint32 type;
493         uint32 size;
494         uint8 *data;
495         uint32 needed;
496         uint32 status;
497 } SPOOL_R_GETPRINTERDATA;
498
499 typedef struct spool_q_closeprinter
500 {
501         POLICY_HND handle;
502 } SPOOL_Q_CLOSEPRINTER;
503
504 typedef struct spool_r_closeprinter
505 {
506         POLICY_HND handle;
507         uint32 status;
508 } SPOOL_R_CLOSEPRINTER;
509
510 typedef struct spool_q_startpageprinter
511 {
512         POLICY_HND handle;
513 } SPOOL_Q_STARTPAGEPRINTER;
514
515 typedef struct spool_r_startpageprinter
516 {
517         uint32 status;
518 } SPOOL_R_STARTPAGEPRINTER;
519
520 typedef struct spool_q_endpageprinter
521 {
522         POLICY_HND handle;
523 } SPOOL_Q_ENDPAGEPRINTER;
524
525 typedef struct spool_r_endpageprinter
526 {
527         uint32 status;
528 } SPOOL_R_ENDPAGEPRINTER;
529
530 typedef struct spool_doc_info_1
531 {
532         uint32 p_docname;
533         uint32 p_outputfile;
534         uint32 p_datatype;
535         UNISTR2 docname;
536         UNISTR2 outputfile;
537         UNISTR2 datatype;
538 } DOC_INFO_1;
539
540 typedef struct spool_doc_info
541 {
542         uint32 switch_value;
543         DOC_INFO_1 doc_info_1;
544 } DOC_INFO;
545
546 typedef struct spool_doc_info_container
547 {
548         uint32 level;
549         DOC_INFO docinfo;
550 } DOC_INFO_CONTAINER;
551
552 typedef struct spool_q_startdocprinter
553 {
554         POLICY_HND handle;
555         DOC_INFO_CONTAINER doc_info_container;
556 } SPOOL_Q_STARTDOCPRINTER;
557
558 typedef struct spool_r_startdocprinter
559 {
560         uint32 jobid;
561         uint32 status;
562 } SPOOL_R_STARTDOCPRINTER;
563
564 typedef struct spool_q_enddocprinter
565 {
566         POLICY_HND handle;
567 } SPOOL_Q_ENDDOCPRINTER;
568
569 typedef struct spool_r_enddocprinter
570 {
571         uint32 status;
572 } SPOOL_R_ENDDOCPRINTER;
573
574 typedef struct spool_q_writeprinter
575 {
576         POLICY_HND handle;
577         uint32 buffer_size;
578         uint8 *buffer;
579         uint32 buffer_size2;
580 } SPOOL_Q_WRITEPRINTER;
581
582 typedef struct spool_r_writeprinter
583 {
584         uint32 buffer_written;
585         uint32 status;
586 } SPOOL_R_WRITEPRINTER;
587
588 typedef struct spool_notify_option
589 {
590         uint32 version;
591         uint32 flags;
592         uint32 count;
593         uint32 option_type_ptr;
594         SPOOL_NOTIFY_OPTION_TYPE_CTR ctr;
595 } SPOOL_NOTIFY_OPTION;
596
597 typedef struct spool_notify_info_data
598 {
599         uint16 type;
600         uint16 field;
601         uint32 reserved;
602         uint32 id;
603         union 
604         {
605                 uint32 value[2];
606                 struct
607                 {
608                         uint32 length;
609                         uint16 string[1024];
610                 } data;
611         } notify_data;
612         uint32 size;
613         BOOL   enc_type;
614 } SPOOL_NOTIFY_INFO_DATA;
615
616 typedef struct spool_notify_info
617 {
618         uint32 version;
619         uint32 flags;
620         uint32 count;
621         SPOOL_NOTIFY_INFO_DATA *data;
622 } SPOOL_NOTIFY_INFO;
623
624 /* If the struct name looks obscure, yes it is ! */
625 /* RemoteFindFirstPrinterChangeNotificationEx query struct */
626 typedef struct spoolss_q_rffpcnex
627 {
628         POLICY_HND handle;
629         uint32 flags;
630         uint32 options;
631         uint32 localmachine_ptr;
632         UNISTR2 localmachine;
633         uint32  printerlocal;
634         uint32 option_ptr;
635         SPOOL_NOTIFY_OPTION *option;
636 } SPOOL_Q_RFFPCNEX;
637
638 typedef struct spool_r_rffpcnex
639 {
640         uint32 status;
641 } SPOOL_R_RFFPCNEX;
642
643 /* Remote Find Next Printer Change Notify Ex */
644 typedef struct spool_q_rfnpcnex
645 {
646         POLICY_HND handle;
647         uint32 change;
648         uint32 option_ptr;
649         SPOOL_NOTIFY_OPTION *option;
650 } SPOOL_Q_RFNPCNEX;
651
652 typedef struct spool_r_rfnpcnex
653 {
654         uint32 info_ptr;
655         SPOOL_NOTIFY_INFO info;
656         uint32 status;
657 } SPOOL_R_RFNPCNEX;
658
659 /* Find Close Printer Notify */
660 typedef struct spool_q_fcpn
661 {
662         POLICY_HND handle;
663 } SPOOL_Q_FCPN;
664
665 typedef struct spool_r_fcpn
666 {
667         uint32 status;
668 } SPOOL_R_FCPN;
669
670
671 typedef struct printer_info_0
672 {
673         UNISTR printername;
674         UNISTR servername;
675         uint32 cjobs;
676         uint32 attributes;
677         uint32 unknown0;
678         uint32 unknown1;
679         uint32 unknown2;
680         uint32 unknown3;
681         uint32 unknown4;
682         uint32 unknown5;
683         uint32 unknown6;
684         uint16 majorversion;
685         uint16 buildversion;
686         uint32 unknown7;
687         uint32 unknown8;
688         uint32 unknown9;
689         uint32 unknown10;
690         uint32 unknown11;
691         uint32 unknown12;
692         uint32 unknown13;
693         uint32 unknown14;
694         uint32 unknown15;
695         uint32 unknown16;
696         uint32 unknown17;
697         uint32 unknown18;
698         uint32 status;
699         uint32 unknown20;
700         uint32 unknown21;
701         uint16 unknown22;
702         uint32 unknown23;       
703 } PRINTER_INFO_0;
704
705 typedef struct printer_info_1
706 {
707     uint32 flags;
708     UNISTR description;
709     UNISTR name;
710     UNISTR comment;
711 } PRINTER_INFO_1;
712
713 typedef struct printer_info_2
714 {
715     UNISTR     servername;
716     UNISTR     printername;
717     UNISTR     sharename;
718     UNISTR     portname;
719     UNISTR     drivername;
720     UNISTR     comment;
721     UNISTR     location;
722     DEVICEMODE *devmode;
723     UNISTR     sepfile;
724     UNISTR     printprocessor;
725     UNISTR     datatype;
726     UNISTR     parameters;
727     /*SECURITY_DESCRIPTOR securitydescriptor;*/
728     uint32   attributes;
729     uint32   priority;
730     uint32   defaultpriority;
731     uint32   starttime;
732     uint32   untiltime;
733     uint32   status;
734     uint32   cjobs;
735     uint32   averageppm;
736 } PRINTER_INFO_2;
737
738 typedef struct spool_q_enumprinters
739 {
740         uint32 flags;
741         uint32 servername_ptr;
742         UNISTR2 servername;
743         uint32 level;
744         NEW_BUFFER *buffer;
745         uint32 offered;
746 } SPOOL_Q_ENUMPRINTERS;
747
748 typedef struct printer_info_ctr_info
749 {
750         union {
751                 PRINTER_INFO_1 **printers_1;
752                 PRINTER_INFO_2 **printers_2;
753                 void *info;
754         } printer;
755
756 } PRINTER_INFO_CTR;
757
758 typedef struct spool_r_enumprinters
759 {
760         NEW_BUFFER *buffer;
761         uint32 needed;   /* bytes needed */
762         uint32 returned; /* number of printers */
763         uint32 status;
764 } SPOOL_R_ENUMPRINTERS;
765
766
767 typedef struct spool_q_getprinter
768 {
769         POLICY_HND handle;
770         uint32 level;
771         NEW_BUFFER *buffer;
772         uint32 offered;
773 } SPOOL_Q_GETPRINTER;
774
775 typedef struct printer_info_info
776 {
777         union {
778                 PRINTER_INFO_0 *info0;
779                 PRINTER_INFO_1 *info1;
780                 PRINTER_INFO_2 *info2;
781                 void *info;
782         } printer;
783 } PRINTER_INFO;
784
785 typedef struct spool_r_getprinter
786 {
787         NEW_BUFFER *buffer;
788         uint32 needed;
789         uint32 status;
790
791 } SPOOL_R_GETPRINTER;
792
793 struct s_notify_info_data_table
794 {
795         uint16 type;
796         uint16 field;
797         char   *name;
798         uint32 size;
799         void   (*fn) (int snum, SPOOL_NOTIFY_INFO_DATA *data, print_queue_struct *queue, NT_PRINTER_INFO_LEVEL *printer);
800 };
801
802 typedef struct driver_info_1
803 {
804         UNISTR name;
805 } DRIVER_INFO_1;
806
807 typedef struct driver_info_2
808 {
809         uint32 version;
810         UNISTR name;
811         UNISTR architecture;
812         UNISTR driverpath;
813         UNISTR datafile;
814         UNISTR configfile;
815 } DRIVER_INFO_2;
816
817 typedef struct driver_info_3
818 {
819         uint32 version;
820         UNISTR name;
821         UNISTR architecture;
822         UNISTR driverpath;
823         UNISTR datafile;
824         UNISTR configfile;
825         UNISTR helpfile;
826         UNISTR **dependentfiles;
827         UNISTR monitorname;
828         UNISTR defaultdatatype;
829 } DRIVER_INFO_3;
830
831 typedef struct driver_info_info
832 {
833         union {
834                 DRIVER_INFO_1 *info1;
835                 DRIVER_INFO_2 *info2;
836                 DRIVER_INFO_3 *info3;
837         } driver;
838
839 } DRIVER_INFO;
840
841 typedef struct spool_q_getprinterdriver2
842 {
843         POLICY_HND handle;
844         uint32 architecture_ptr;
845         UNISTR2 architecture;
846         uint32 level;
847         NEW_BUFFER *buffer;
848         uint32 offered;
849         uint32 unknown;
850 } SPOOL_Q_GETPRINTERDRIVER2;
851
852 typedef struct spool_r_getprinterdriver2
853 {
854         NEW_BUFFER *buffer;
855         uint32 needed;
856         uint32 unknown0;
857         uint32 unknown1;
858         uint32 status;
859 } SPOOL_R_GETPRINTERDRIVER2;
860
861
862 typedef struct add_jobinfo_1
863 {
864         UNISTR path;
865         uint32 job_number;
866 } ADD_JOBINFO_1;
867
868
869 typedef struct spool_q_addjob
870 {
871         POLICY_HND handle;
872         uint32 level;
873         NEW_BUFFER *buffer;
874         uint32 offered;
875 } SPOOL_Q_ADDJOB;
876
877 typedef struct spool_r_addjob
878 {
879         uint32 status;
880 } SPOOL_R_ADDJOB;
881
882 /*
883  * I'm really wondering how many different time formats
884  * I will have to cope with
885  *
886  * JFM, 09/13/98 In a mad mood ;-(
887 */
888 typedef struct systemtime
889 {
890     uint16 year;
891     uint16 month;
892     uint16 dayofweek;
893     uint16 day;
894     uint16 hour;
895     uint16 minute;
896     uint16 second;
897     uint16 milliseconds;
898 } SYSTEMTIME;
899
900 typedef struct s_job_info_1
901 {
902         uint32 jobid;
903         UNISTR printername;
904         UNISTR machinename;
905         UNISTR username;
906         UNISTR document;
907         UNISTR datatype;
908         UNISTR text_status;
909         uint32 status;
910         uint32 priority;
911         uint32 position;
912         uint32 totalpages;
913         uint32 pagesprinted;
914         SYSTEMTIME submitted;
915 } JOB_INFO_1;
916
917 typedef struct s_job_info_2
918 {
919         uint32 jobid;
920         UNISTR printername;
921         UNISTR machinename;
922         UNISTR username;
923         UNISTR document;
924         UNISTR notifyname;
925         UNISTR datatype;
926         UNISTR printprocessor;
927         UNISTR parameters;
928         UNISTR drivername;
929         DEVICEMODE *devmode;
930         UNISTR text_status;
931 /*      SEC_DESC sec_desc;*/
932         uint32 status;
933         uint32 priority;
934         uint32 position;
935         uint32 starttime;
936         uint32 untiltime;
937         uint32 totalpages;
938         uint32 size;
939         SYSTEMTIME submitted;
940         uint32 timeelapsed;
941         uint32 pagesprinted;
942 } JOB_INFO_2;
943
944 typedef struct spool_q_enumjobs
945 {
946         POLICY_HND handle;
947         uint32 firstjob;
948         uint32 numofjobs;
949         uint32 level;
950         NEW_BUFFER *buffer;
951         uint32 offered;
952 } SPOOL_Q_ENUMJOBS;
953
954 typedef struct job_info_ctr_info
955 {
956         union {
957                 JOB_INFO_1 **job_info_1;
958                 JOB_INFO_2 **job_info_2;
959                 void *info;
960         } job;
961
962 } JOB_INFO_CTR;
963
964 typedef struct spool_r_enumjobs
965 {
966         NEW_BUFFER *buffer;
967         uint32 needed;
968         uint32 returned;
969         uint32 status;
970 } SPOOL_R_ENUMJOBS;
971
972 typedef struct spool_q_schedulejob
973 {
974         POLICY_HND handle;
975         uint32 jobid;
976 } SPOOL_Q_SCHEDULEJOB;
977
978 typedef struct spool_r_schedulejob
979 {
980         uint32 status;
981 } SPOOL_R_SCHEDULEJOB;
982
983 typedef struct s_port_info_1
984 {
985         UNISTR port_name;
986 } PORT_INFO_1;
987
988 typedef struct s_port_info_2
989 {
990         UNISTR port_name;
991         UNISTR monitor_name;
992         UNISTR description;
993         uint32 port_type;
994         uint32 reserved;
995 } PORT_INFO_2;
996
997 typedef struct spool_q_enumports
998 {
999         uint32 name_ptr;
1000         UNISTR2 name;
1001         uint32 level;
1002         NEW_BUFFER *buffer;
1003         uint32 offered;
1004 } SPOOL_Q_ENUMPORTS;
1005
1006 typedef struct port_info_ctr_info
1007 {
1008         union {
1009                 PORT_INFO_1 *info_1;
1010                 PORT_INFO_2 *info_2;
1011         } port;
1012
1013 } PORT_INFO_CTR;
1014
1015 typedef struct spool_r_enumports
1016 {
1017         NEW_BUFFER *buffer;
1018         uint32 needed;   /* bytes needed */
1019         uint32 returned; /* number of printers */
1020         uint32 status;
1021 } SPOOL_R_ENUMPORTS;
1022
1023 #define JOB_CONTROL_PAUSE              1
1024 #define JOB_CONTROL_RESUME             2
1025 #define JOB_CONTROL_CANCEL             3
1026 #define JOB_CONTROL_RESTART            4
1027 #define JOB_CONTROL_DELETE             5
1028
1029 typedef struct job_info_info
1030 {
1031         union {
1032                 JOB_INFO_1 job_info_1;
1033                 JOB_INFO_2 job_info_2;
1034         } job;
1035
1036 } JOB_INFO;
1037
1038 typedef struct spool_q_setjob
1039 {
1040         POLICY_HND handle;
1041         uint32 jobid;
1042         uint32 level;
1043         JOB_INFO ctr;
1044         uint32 command;
1045
1046 } SPOOL_Q_SETJOB;
1047
1048 typedef struct spool_r_setjob
1049 {
1050         uint32 status;
1051
1052 } SPOOL_R_SETJOB;
1053
1054 typedef struct spool_q_enumprinterdrivers
1055 {
1056         uint32 name_ptr;
1057         UNISTR2 name;
1058         uint32 environment_ptr;
1059         UNISTR2 environment;
1060         uint32 level;
1061         NEW_BUFFER *buffer;
1062         uint32 offered;
1063 } SPOOL_Q_ENUMPRINTERDRIVERS;
1064
1065 typedef struct spool_r_enumprinterdrivers
1066 {
1067         NEW_BUFFER *buffer;
1068         uint32 needed;
1069         uint32 returned;
1070         uint32 status;
1071 } SPOOL_R_ENUMPRINTERDRIVERS;
1072
1073 typedef struct spool_form_1
1074 {
1075         uint32 flag;
1076         UNISTR name;
1077         uint32 width;
1078         uint32 length;
1079         uint32 left;
1080         uint32 top;
1081         uint32 right;
1082         uint32 bottom;
1083 } FORM_1;
1084
1085 typedef struct spool_q_enumforms
1086 {
1087         POLICY_HND handle;
1088         uint32     level;
1089         NEW_BUFFER *buffer;
1090         uint32     offered;
1091 } SPOOL_Q_ENUMFORMS;
1092
1093 typedef struct spool_r_enumforms
1094 {
1095         NEW_BUFFER *buffer;
1096         uint32 needed;
1097         uint32 numofforms;
1098         uint32 status;
1099 } SPOOL_R_ENUMFORMS;
1100
1101
1102 typedef struct spool_printer_info_level_2
1103 {
1104         uint32 servername_ptr;
1105         uint32 printername_ptr;
1106         uint32 sharename_ptr;
1107         uint32 portname_ptr;
1108         uint32 drivername_ptr;
1109         uint32 comment_ptr;
1110         uint32 location_ptr;
1111         uint32 devmode_ptr;
1112         uint32 sepfile_ptr;
1113         uint32 printprocessor_ptr;
1114         uint32 datatype_ptr;
1115         uint32 parameters_ptr;
1116         uint32 secdesc_ptr;
1117         uint32 attributes;
1118         uint32 priority;
1119         uint32 default_priority;
1120         uint32 starttime;
1121         uint32 untiltime;
1122         uint32 status;
1123         uint32 cjobs;
1124         uint32 averageppm;
1125         UNISTR2 servername;
1126         UNISTR2 printername;
1127         UNISTR2 sharename;
1128         UNISTR2 portname;
1129         UNISTR2 drivername;
1130         UNISTR2 comment;
1131         UNISTR2 location;
1132         UNISTR2 sepfile;
1133         UNISTR2 printprocessor;
1134         UNISTR2 datatype;
1135         UNISTR2 parameters;
1136         SEC_DESC_BUF *secdesc;
1137 } SPOOL_PRINTER_INFO_LEVEL_2;
1138
1139 typedef struct spool_printer_info_level
1140 {
1141         uint32 level;
1142         uint32 info_ptr;
1143         SPOOL_PRINTER_INFO_LEVEL_2 *info_2;
1144 } SPOOL_PRINTER_INFO_LEVEL;
1145
1146 typedef struct spool_printer_driver_info_level_3
1147 {
1148         uint32 cversion;
1149         uint32 name_ptr;
1150         uint32 environment_ptr;
1151         uint32 driverpath_ptr;
1152         uint32 datafile_ptr;
1153         uint32 configfile_ptr;
1154         uint32 helpfile_ptr;
1155         uint32 monitorname_ptr;
1156         uint32 defaultdatatype_ptr;
1157         uint32 dependentfilessize;
1158         uint32 dependentfiles_ptr;
1159
1160         UNISTR2 name;
1161         UNISTR2 environment;
1162         UNISTR2 driverpath;
1163         UNISTR2 datafile;
1164         UNISTR2 configfile;
1165         UNISTR2 helpfile;
1166         UNISTR2 monitorname;
1167         UNISTR2 defaultdatatype;
1168         BUFFER5 dependentfiles;
1169
1170 } SPOOL_PRINTER_DRIVER_INFO_LEVEL_3;
1171
1172 typedef struct spool_printer_driver_info_level
1173 {
1174         uint32 level;
1175         uint32 ptr;
1176         SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *info_3;
1177 } SPOOL_PRINTER_DRIVER_INFO_LEVEL;
1178
1179
1180 /* this struct is undocumented */
1181 /* thanks to the ddk ... */
1182 typedef struct spool_user_level_1
1183 {
1184         uint32 size;
1185         uint32 client_name_ptr;
1186         uint32 user_name_ptr;
1187         uint32 build;
1188         uint32 major;
1189         uint32 minor;
1190         uint32 processor;
1191         UNISTR2 client_name;
1192         UNISTR2 user_name;
1193 } SPOOL_USER_LEVEL_1;
1194
1195 typedef struct spool_user_level
1196 {
1197         SPOOL_USER_LEVEL_1 *user_level_1;
1198 } SPOOL_USER_LEVEL;
1199
1200 typedef struct spool_q_setprinter
1201 {
1202         POLICY_HND handle;
1203         uint32 level;
1204         SPOOL_PRINTER_INFO_LEVEL info;
1205         DEVMODE_CTR devmode_ctr;
1206
1207         /* lkclXXXX jean-francois, see SEC_DESC_BUF code */
1208         struct
1209         {
1210                 uint32 size_of_buffer;
1211                 uint32 data;
1212         } security;
1213
1214         uint32 command;
1215
1216 } SPOOL_Q_SETPRINTER;
1217
1218 typedef struct spool_r_setprinter
1219 {
1220         uint32 status;
1221 } SPOOL_R_SETPRINTER;
1222
1223 typedef struct spool_q_addprinter
1224 {
1225         UNISTR2 server_name;
1226         uint32 level;
1227         SPOOL_PRINTER_INFO_LEVEL info;
1228         uint32 unk0;
1229         uint32 unk1;
1230         uint32 unk2;
1231         uint32 unk3;
1232         uint32 user_level;
1233         SPOOL_USER_LEVEL user;
1234 } SPOOL_Q_ADDPRINTER;
1235
1236 typedef struct spool_r_addprinter
1237 {
1238         uint32 status;
1239 } SPOOL_R_ADDPRINTER;
1240
1241
1242 typedef struct spool_q_addprinterex
1243 {
1244         uint32 server_name_ptr;
1245         UNISTR2 server_name;
1246         uint32 level;
1247         SPOOL_PRINTER_INFO_LEVEL info;
1248         uint32 unk0;
1249         uint32 unk1;
1250         uint32 unk2;
1251         uint32 unk3;
1252         uint32 user_switch;
1253         SPOOL_USER_CTR user_ctr;
1254 } SPOOL_Q_ADDPRINTEREX;
1255
1256 typedef struct spool_r_addprinterex
1257 {
1258         POLICY_HND handle;
1259         uint32 status;
1260 } SPOOL_R_ADDPRINTEREX;
1261
1262
1263 typedef struct spool_q_addprinterdriver
1264 {
1265         uint32 server_name_ptr;
1266         UNISTR2 server_name;
1267         uint32 level;
1268         SPOOL_PRINTER_DRIVER_INFO_LEVEL info;
1269 } SPOOL_Q_ADDPRINTERDRIVER;
1270
1271 typedef struct spool_r_addprinterdriver
1272 {
1273         uint32 status;
1274 } SPOOL_R_ADDPRINTERDRIVER;
1275
1276
1277 typedef struct driver_directory_1
1278 {
1279         UNISTR name;
1280 } DRIVER_DIRECTORY_1 ;
1281
1282 typedef struct driver_info_ctr_info
1283 {
1284         union {
1285                 DRIVER_DIRECTORY_1 info_1;
1286         } driver;
1287 } DRIVER_DIRECTORY_CTR;
1288
1289 typedef struct spool_q_getprinterdriverdirectory
1290 {
1291         uint32 name_ptr;
1292         UNISTR2 name;
1293         uint32 environment_ptr;
1294         UNISTR2 environment;
1295         uint32 level;
1296         NEW_BUFFER *buffer;
1297         uint32 offered;
1298 } SPOOL_Q_GETPRINTERDRIVERDIR;
1299
1300 typedef struct spool_r_getprinterdriverdirectory
1301 {
1302         NEW_BUFFER *buffer;
1303         uint32 needed;
1304         uint32 status;
1305 } SPOOL_R_GETPRINTERDRIVERDIR;
1306
1307 typedef struct spool_q_enumprintprocessors
1308 {
1309         uint32 name_ptr;
1310         UNISTR2 name;
1311         uint32 environment_ptr;
1312         UNISTR2 environment;
1313         uint32 level;
1314         NEW_BUFFER *buffer;
1315         uint32 offered;
1316 } SPOOL_Q_ENUMPRINTPROCESSORS;
1317
1318 typedef struct printprocessor_1
1319 {
1320         UNISTR name;
1321 } PRINTPROCESSOR_1;
1322
1323 typedef struct spool_r_enumprintprocessors
1324 {
1325         NEW_BUFFER *buffer;
1326         uint32 needed;
1327         uint32 returned;
1328         uint32 status;
1329 } SPOOL_R_ENUMPRINTPROCESSORS;
1330
1331 typedef struct spool_q_enumprintprocessordatatypes
1332 {
1333         UNISTR2 name;
1334         UNISTR2 printprocessor;
1335         uint32 level;
1336         NEW_BUFFER *buffer;
1337         uint32 buf_size;
1338 } SPOOL_Q_ENUMPRINTPROCESSORDATATYPES;
1339
1340 typedef struct ppdatatype_1
1341 {
1342         UNISTR name;
1343 } PPDATATYPE_1;
1344
1345 typedef struct spool_r_enumprintprocessordatatypes
1346 {
1347         uint32 level;
1348         PPDATATYPE_1 *info_1;
1349         uint32 offered;
1350         uint32 numofppdatatypes;
1351         uint32 status;
1352 } SPOOL_R_ENUMPRINTPROCESSORDATATYPES;
1353
1354 typedef struct printmonitor_1
1355 {
1356         UNISTR name;
1357 } PRINTMONITOR_1;
1358
1359 typedef struct printmonitor_2
1360 {
1361         UNISTR name;
1362         UNISTR environment;
1363         UNISTR dll_name;
1364 } PRINTMONITOR_2;
1365
1366 typedef struct spool_q_enumprintmonitors
1367 {
1368         uint32 name_ptr;
1369         UNISTR2 name;
1370         uint32 level;
1371         NEW_BUFFER *buffer;
1372         uint32 offered;
1373 } SPOOL_Q_ENUMPRINTMONITORS;
1374
1375 typedef struct spool_r_enumprintmonitors
1376 {
1377         NEW_BUFFER *buffer;
1378         uint32 needed;
1379         uint32 returned;
1380         uint32 status;
1381 } SPOOL_R_ENUMPRINTMONITORS;
1382
1383
1384 typedef struct spool_q_enumprinterdata
1385 {
1386         POLICY_HND handle;
1387         uint32 index;
1388         uint32 valuesize;
1389         uint32 datasize;
1390 } SPOOL_Q_ENUMPRINTERDATA;
1391
1392 typedef struct spool_r_enumprinterdata
1393 {
1394         uint32 valuesize;
1395         uint16 *value;
1396         uint32 realvaluesize;
1397         uint32 type;
1398         uint32 datasize;
1399         uint8  *data;
1400         uint32 realdatasize;
1401         uint32 status;
1402 } SPOOL_R_ENUMPRINTERDATA;
1403
1404 typedef struct spool_q_setprinterdata
1405 {
1406         POLICY_HND handle;
1407         UNISTR2 value;
1408         uint32 type;
1409         uint32 max_len;
1410         uint8 *data;
1411         uint32 real_len;
1412         uint32 numeric_data;
1413 } SPOOL_Q_SETPRINTERDATA;
1414
1415 typedef struct spool_r_setprinterdata
1416 {
1417         uint32 status;
1418 } SPOOL_R_SETPRINTERDATA;
1419
1420 typedef struct _form
1421 {
1422        uint32 flags;
1423        uint32 name_ptr;
1424        uint32 size_x;
1425        uint32 size_y;
1426        uint32 left;
1427        uint32 top;
1428        uint32 right;
1429        uint32 bottom;
1430        UNISTR2 name;
1431 } FORM;
1432
1433 typedef struct spool_q_addform
1434 {
1435         POLICY_HND handle;
1436         uint32 level;
1437         uint32 level2;
1438         FORM form;
1439 } SPOOL_Q_ADDFORM;
1440
1441 typedef struct spool_r_addform
1442 {
1443         uint32 status;
1444 } SPOOL_R_ADDFORM;
1445
1446 typedef struct spool_q_setform
1447 {
1448         POLICY_HND handle;
1449         UNISTR2 name;
1450         uint32 level;
1451         uint32 level2;
1452         FORM form;
1453 } SPOOL_Q_SETFORM;
1454
1455 typedef struct spool_r_setform
1456 {
1457         uint32 status;
1458 } SPOOL_R_SETFORM;
1459
1460 typedef struct spool_q_getjob
1461 {
1462         POLICY_HND handle;
1463         uint32 jobid;
1464         uint32 level;
1465         NEW_BUFFER *buffer;
1466         uint32 offered;
1467 } SPOOL_Q_GETJOB;
1468
1469 typedef struct pjob_info_info
1470 {
1471         union {
1472                 JOB_INFO_1 *job_info_1;
1473                 JOB_INFO_2 *job_info_2;
1474                 void *info;
1475         } job;
1476
1477 } PJOB_INFO;
1478
1479 typedef struct spool_r_getjob
1480 {
1481         NEW_BUFFER *buffer;
1482         uint32 needed;
1483         uint32 status;
1484 } SPOOL_R_GETJOB;
1485
1486 #define PRINTER_DRIVER_VERSION 2
1487 #define PRINTER_DRIVER_ARCHITECTURE "Windows NT x86"
1488
1489
1490 #endif /* _RPC_SPOOLSS_H */