[PRINTING]
[reactos.git] / reactos / sdk / include / reactos / idl / winspool.idl
1 /*
2 * PROJECT: ReactOS Spooler API
3 * LICENSE: This file is in the public domain
4 * PURPOSE: WIDL-compatible interface definition for the Spooler API
5 * AUTHORS: Colin Finck <colin@reactos.org>
6 */
7
8 #include <ms-dtyp.idl>
9
10 /*
11 * Handle definitions
12 */
13 typedef [context_handle] void* WINSPOOL_GDI_HANDLE;
14 typedef [context_handle] void* WINSPOOL_PRINTER_HANDLE;
15 typedef [handle, string] WCHAR* WINSPOOL_HANDLE;
16
17
18 /*
19 * Type definitions and enumerations
20 */
21 typedef WORD WINSPOOL_LANGID;
22
23 typedef enum
24 {
25 WINSPOOL_BIDI_NULL = 0,
26 WINSPOOL_BIDI_INT = 1,
27 WINSPOOL_BIDI_FLOAT = 2,
28 WINSPOOL_BIDI_BOOL = 3,
29 WINSPOOL_BIDI_STRING = 4,
30 WINSPOOL_BIDI_TEXT = 5,
31 WINSPOOL_BIDI_ENUM = 6,
32 WINSPOOL_BIDI_BLOB = 7
33 }
34 WINSPOOL_BIDI_TYPE;
35
36 typedef enum
37 {
38 WINSPOOL_TABLE_DWORD = 1,
39 WINSPOOL_TABLE_STRING = 2,
40 WINSPOOL_TABLE_DEVMODE = 3,
41 WINSPOOL_TABLE_TIME = 4,
42 WINSPOOL_TABLE_SECURITYDESCRIPTOR = 5
43 }
44 WINSPOOL_TABLE_TYPE;
45
46
47 /*
48 * Various definitions
49 */
50 typedef struct _WINSPOOL_RECTL
51 {
52 LONG left;
53 LONG top;
54 LONG right;
55 LONG bottom;
56 }
57 WINSPOOL_RECTL;
58
59 typedef struct _WINSPOOL_SIZEL
60 {
61 LONG cx;
62 LONG cy;
63 }
64 WINSPOOL_SIZEL;
65
66
67 /*
68 * INFO structures
69 */
70 typedef struct _WINSPOOL_DOC_INFO_1 {
71 [string] WCHAR* pDocName;
72 [string] WCHAR* pOutputFile;
73 [string] WCHAR* pDatatype;
74 }
75 WINSPOOL_DOC_INFO_1;
76
77 typedef struct _WINSPOOL_DRIVER_INFO_1
78 {
79 [string] WCHAR* pName;
80 }
81 WINSPOOL_DRIVER_INFO_1;
82
83 typedef struct _WINSPOOL_DRIVER_INFO_2
84 {
85 DWORD cVersion;
86 [string] WCHAR* pName;
87 [string] WCHAR* pEnvironment;
88 [string] WCHAR* pDriverPath;
89 [string] WCHAR* pDataFile;
90 [string] WCHAR* pConfigFile;
91 }
92 WINSPOOL_DRIVER_INFO_2;
93
94 typedef struct _WINSPOOL_DRIVER_INFO_3
95 {
96 DWORD cVersion;
97 [string] WCHAR* pName;
98 [string] WCHAR* pEnvironment;
99 [string] WCHAR* pDriverPath;
100 [string] WCHAR* pDataFile;
101 [string] WCHAR* pConfigFile;
102 [string] WCHAR* pHelpFile;
103 [string] WCHAR* pMonitorName;
104 [string] WCHAR* pDefaultDataType;
105 DWORD cchDependentFiles;
106 [size_is(cchDependentFiles), unique] WCHAR* pDependentFiles;
107 }
108 WINSPOOL_DRIVER_INFO_3;
109
110 typedef struct _WINSPOOL_DRIVER_INFO_4
111 {
112 DWORD cVersion;
113 [string] WCHAR* pName;
114 [string] WCHAR* pEnvironment;
115 [string] WCHAR* pDriverPath;
116 [string] WCHAR* pDataFile;
117 [string] WCHAR* pConfigFile;
118 [string] WCHAR* pHelpFile;
119 [string] WCHAR* pMonitorName;
120 [string] WCHAR* pDefaultDataType;
121 DWORD cchDependentFiles;
122 [size_is(cchDependentFiles), unique] WCHAR* pDependentFiles;
123 DWORD cchPreviousNames;
124 [size_is(cchPreviousNames), unique] WCHAR* pszzPreviousNames;
125 }
126 WINSPOOL_DRIVER_INFO_4;
127
128 typedef struct _WINSPOOL_DRIVER_INFO_6
129 {
130 DWORD cVersion;
131 [string] WCHAR* pName;
132 [string] WCHAR* pEnvironment;
133 [string] WCHAR* pDriverPath;
134 [string] WCHAR* pDataFile;
135 [string] WCHAR* pConfigFile;
136 [string] WCHAR* pHelpFile;
137 [string] WCHAR* pMonitorName;
138 [string] WCHAR* pDefaultDataType;
139 DWORD cchDependentFiles;
140 [size_is(cchDependentFiles), unique] WCHAR* pDependentFiles;
141 DWORD cchPreviousNames;
142 [size_is(cchPreviousNames), unique] WCHAR* pszzPreviousNames;
143 FILETIME ftDriverDate;
144 DWORDLONG dwlDriverVersion;
145 [string] WCHAR* pMfgName;
146 [string] WCHAR* pOEMUrl;
147 [string] WCHAR* pHardwareID;
148 [string] WCHAR* pProvider;
149 }
150 WINSPOOL_DRIVER_INFO_6;
151
152 typedef struct _WINSPOOL_DRIVER_INFO_8
153 {
154 DWORD cVersion;
155 [string] WCHAR* pName;
156 [string] WCHAR* pEnvironment;
157 [string] WCHAR* pDriverPath;
158 [string] WCHAR* pDataFile;
159 [string] WCHAR* pConfigFile;
160 [string] WCHAR* pHelpFile;
161 [string] WCHAR* pMonitorName;
162 [string] WCHAR* pDefaultDataType;
163 DWORD cchDependentFiles;
164 [size_is(cchDependentFiles), unique] WCHAR* pDependentFiles;
165 DWORD cchPreviousNames;
166 [size_is(cchPreviousNames), unique] WCHAR* pszzPreviousNames;
167 FILETIME ftDriverDate;
168 DWORDLONG dwlDriverVersion;
169 [string] WCHAR* pMfgName;
170 [string] WCHAR* pOEMUrl;
171 [string] WCHAR* pHardwareID;
172 [string] WCHAR* pProvider;
173 [string] WCHAR* pPrintProcessor;
174 [string] WCHAR* pVendorSetup;
175 DWORD cchColorProfiles;
176 [size_is(cchColorProfiles), unique] WCHAR* pszzColorProfiles;
177 [string] WCHAR* pInfPath;
178 DWORD dwPrinterDriverAttributes;
179 DWORD cchCoreDependencies;
180 [size_is(cchCoreDependencies), unique] WCHAR* pszzCoreDriverDependencies;
181 FILETIME ftMinInboxDriverVerDate;
182 DWORDLONG dwlMinInboxDriverVerVersion;
183 }
184 WINSPOOL_DRIVER_INFO_8;
185
186 typedef struct _WINSPOOL_FORM_INFO_1
187 {
188 DWORD Flags;
189 [string] WCHAR* pName;
190 WINSPOOL_SIZEL Size;
191 WINSPOOL_RECTL ImageableArea;
192 }
193 WINSPOOL_FORM_INFO_1;
194
195 typedef struct _WINSPOOL_FORM_INFO_2
196 {
197 DWORD Flags;
198 [string, unique] const WCHAR* pName;
199 WINSPOOL_SIZEL Size;
200 WINSPOOL_RECTL ImageableArea;
201 [string, unique] const WCHAR* pKeyword;
202 DWORD StringType;
203 [string, unique] const WCHAR* pMuiDll;
204 DWORD dwResourceId;
205 [string, unique] const WCHAR* pDisplayName;
206 WINSPOOL_LANGID wLangID;
207 }
208 WINSPOOL_FORM_INFO_2;
209
210 typedef struct _WINSPOOL_JOB_INFO_1
211 {
212 DWORD JobId;
213 [string] WCHAR* pPrinterName;
214 [string] WCHAR* pMachineName;
215 [string] WCHAR* pUserName;
216 [string] WCHAR* pDocument;
217 [string] WCHAR* pDatatype;
218 [string] WCHAR* pStatus;
219 DWORD Status;
220 DWORD Priority;
221 DWORD Position;
222 DWORD TotalPages;
223 DWORD PagesPrinted;
224 SYSTEMTIME Submitted;
225 }
226 WINSPOOL_JOB_INFO_1;
227
228 typedef struct _WINSPOOL_JOB_INFO_2
229 {
230 DWORD JobId;
231 [string] WCHAR* pPrinterName;
232 [string] WCHAR* pMachineName;
233 [string] WCHAR* pUserName;
234 [string] WCHAR* pDocument;
235 [string] WCHAR* pNotifyName;
236 [string] WCHAR* pDatatype;
237 [string] WCHAR* pPrintProcessor;
238 [string] WCHAR* pParameters;
239 [string] WCHAR* pDriverName;
240 ULONG_PTR pDevMode;
241 [string] WCHAR* pStatus;
242 ULONG_PTR pSecurityDescriptor;
243 DWORD Status;
244 DWORD Priority;
245 DWORD Position;
246 DWORD StartTime;
247 DWORD UntilTime;
248 DWORD TotalPages;
249 DWORD Size;
250 SYSTEMTIME Submitted;
251 DWORD Time;
252 DWORD PagesPrinted;
253 }
254 WINSPOOL_JOB_INFO_2;
255
256 typedef struct _WINSPOOL_JOB_INFO_3
257 {
258 DWORD JobId;
259 DWORD NextJobId;
260 DWORD Reserved;
261 }
262 WINSPOOL_JOB_INFO_3;
263
264 typedef struct _WINSPOOL_JOB_INFO_4
265 {
266 DWORD JobId;
267 [string] WCHAR* pPrinterName;
268 [string] WCHAR* pMachineName;
269 [string] WCHAR* pUserName;
270 [string] WCHAR* pDocument;
271 [string] WCHAR* pNotifyName;
272 [string] WCHAR* pDatatype;
273 [string] WCHAR* pPrintProcessor;
274 [string] WCHAR* pParameters;
275 [string] WCHAR* pDriverName;
276 ULONG_PTR pDevMode;
277 [string] WCHAR* pStatus;
278 ULONG_PTR pSecurityDescriptor;
279 DWORD Status;
280 DWORD Priority;
281 DWORD Position;
282 DWORD StartTime;
283 DWORD UntilTime;
284 DWORD TotalPages;
285 DWORD Size;
286 SYSTEMTIME Submitted;
287 DWORD Time;
288 DWORD PagesPrinted;
289 LONG SizeHigh;
290 }
291 WINSPOOL_JOB_INFO_4;
292
293 typedef struct _WINSPOOL_MONITOR_INFO_1
294 {
295 [string] WCHAR* pName;
296 }
297 WINSPOOL_MONITOR_INFO_1;
298
299 typedef struct _WINSPOOL_MONITOR_INFO_2
300 {
301 [string] WCHAR* pName;
302 [string] WCHAR* pEnvironment;
303 [string] WCHAR* pDLLName;
304 }
305 WINSPOOL_MONITOR_INFO_2;
306
307 typedef struct _WINSPOOL_PORT_INFO_1
308 {
309 [string] WCHAR* pPortName;
310 }
311 WINSPOOL_PORT_INFO_1;
312
313 typedef struct _WINSPOOL_PORT_INFO_2
314 {
315 [string] WCHAR* pPortName;
316 [string] WCHAR* pMonitorName;
317 [string] WCHAR* pDescription;
318 DWORD fPortType;
319 DWORD Reserved;
320 }
321 WINSPOOL_PORT_INFO_2;
322
323 typedef struct _WINSPOOL_PORT_INFO_3
324 {
325 DWORD dwStatus;
326 [string] WCHAR* pszStatus;
327 DWORD dwSeverity;
328 }
329 WINSPOOL_PORT_INFO_3;
330
331 typedef struct _WINSPOOL_PORT_INFO_FF
332 {
333 [string] WCHAR* pPortName;
334 DWORD cbMonitorData;
335 BYTE* pMonitorData;
336 }
337 WINSPOOL_PORT_INFO_FF;
338
339 typedef struct _WINSPOOL_PRINTER_INFO_STRESS {
340 [string] WCHAR* pPrinterName;
341 [string] WCHAR* pServerName;
342 DWORD cJobs;
343 DWORD cTotalJobs;
344 DWORD cTotalBytes;
345 SYSTEMTIME stUpTime;
346 DWORD MaxcRef;
347 DWORD cTotalPagesPrinted;
348 DWORD dwGetVersion;
349 DWORD fFreeBuild;
350 DWORD cSpooling;
351 DWORD cMaxSpooling;
352 DWORD cRef;
353 DWORD cErrorOutOfPaper;
354 DWORD cErrorNotReady;
355 DWORD cJobError;
356 DWORD dwNumberOfProcessors;
357 DWORD dwProcessorType;
358 DWORD dwHighPartTotalBytes;
359 DWORD cChangeID;
360 DWORD dwLastError;
361 DWORD Status;
362 DWORD cEnumerateNetworkPrinters;
363 DWORD cAddNetPrinters;
364 USHORT wProcessorArchitecture;
365 USHORT wProcessorLevel;
366 DWORD cRefIC;
367 DWORD dwReserved2;
368 DWORD dwReserved3;
369 }
370 WINSPOOL_PRINTER_INFO_STRESS;
371
372 typedef struct _WINSPOOL_PRINTER_INFO_1
373 {
374 DWORD Flags;
375 [string] WCHAR* pDescription;
376 [string] WCHAR* pName;
377 [string] WCHAR* pComment;
378 }
379 WINSPOOL_PRINTER_INFO_1;
380
381 typedef struct _WINSPOOL_PRINTER_INFO_2
382 {
383 [string] WCHAR* pServerName;
384 [string] WCHAR* pPrinterName;
385 [string] WCHAR* pShareName;
386 [string] WCHAR* pPortName;
387 [string] WCHAR* pDriverName;
388 [string] WCHAR* pComment;
389 [string] WCHAR* pLocation;
390 ULONG_PTR pDevMode;
391 [string] WCHAR* pSepFile;
392 [string] WCHAR* pPrintProcessor;
393 [string] WCHAR* pDatatype;
394 [string] WCHAR* pParameters;
395 ULONG_PTR pSecurityDescriptor;
396 DWORD Attributes;
397 DWORD Priority;
398 DWORD DefaultPriority;
399 DWORD StartTime;
400 DWORD UntilTime;
401 DWORD Status;
402 DWORD cJobs;
403 DWORD AveragePPM;
404 }
405 WINSPOOL_PRINTER_INFO_2;
406
407 typedef struct _WINSPOOL_PRINTER_INFO_3
408 {
409 ULONG_PTR pSecurityDescriptor;
410 }
411 WINSPOOL_PRINTER_INFO_3;
412
413 typedef struct _WINSPOOL_PRINTER_INFO_4
414 {
415 [string] WCHAR* pPrinterName;
416 [string] WCHAR* pServerName;
417 DWORD Attributes;
418 }
419 WINSPOOL_PRINTER_INFO_4;
420
421 typedef struct _WINSPOOL_PRINTER_INFO_5
422 {
423 [string] WCHAR* pPrinterName;
424 [string] WCHAR* pPortName;
425 DWORD Attributes;
426 DWORD DeviceNotSelectedTimeout;
427 DWORD TransmissionRetryTimeout;
428 }
429 WINSPOOL_PRINTER_INFO_5;
430
431 typedef struct _WINSPOOL_PRINTER_INFO_6
432 {
433 DWORD dwStatus;
434 }
435 WINSPOOL_PRINTER_INFO_6;
436
437 typedef struct _WINSPOOL_PRINTER_INFO_7
438 {
439 [string] WCHAR* pszObjectGUID;
440 DWORD dwAction;
441 }
442 WINSPOOL_PRINTER_INFO_7;
443
444 typedef struct _WINSPOOL_PRINTER_INFO_8
445 {
446 ULONG_PTR pDevMode;
447 }
448 WINSPOOL_PRINTER_INFO_8;
449
450 typedef struct _WINSPOOL_PRINTER_INFO_9
451 {
452 ULONG_PTR pDevMode;
453 }
454 WINSPOOL_PRINTER_INFO_9;
455
456 typedef struct _WINSPOOL_PROVIDOR_INFO_1
457 {
458 WCHAR* pName;
459 WCHAR* pEnvironment;
460 WCHAR* pDLLName;
461 }
462 WINSPOOL_PROVIDOR_INFO_1;
463
464 typedef struct _WINSPOOL_PROVIDOR_INFO_2
465 {
466 WCHAR* pOrder;
467 }
468 WINSPOOL_PROVIDOR_INFO_2;
469
470 typedef struct _WINSPOOL_SPLCLIENT_INFO_1
471 {
472 DWORD dwSize;
473 [string] WCHAR* pMachineName;
474 [string] WCHAR* pUserName;
475 DWORD dwBuildNum;
476 DWORD dwMajorVersion;
477 DWORD dwMinorVersion;
478 USHORT wProcessorArchitecture;
479 }
480 WINSPOOL_SPLCLIENT_INFO_1;
481
482 typedef struct _WINSPOOL_SPLCLIENT_INFO_2
483 {
484 LONG_PTR notUsed;
485 }
486 WINSPOOL_SPLCLIENT_INFO_2;
487
488 typedef struct _WINSPOOL_SPLCLIENT_INFO_3
489 {
490 UINT cbSize;
491 DWORD dwFlags;
492 DWORD dwSize;
493 [string] WCHAR* pMachineName;
494 [string] WCHAR* pUserName;
495 DWORD dwBuildNum;
496 DWORD dwMajorVersion;
497 DWORD dwMinorVersion;
498 USHORT wProcessorArchitecture;
499 UINT64 hSplPrinter;
500 }
501 WINSPOOL_SPLCLIENT_INFO_3;
502
503
504 /*
505 * CONTAINER structures
506 */
507 typedef struct _WINSPOOL_BINARY_CONTAINER
508 {
509 DWORD cbBuf;
510 [size_is(cbBuf), unique] BYTE* pszString;
511 }
512 WINSPOOL_BINARY_CONTAINER;
513
514 typedef struct _WINSPOOL_BIDI_DATA
515 {
516 DWORD dwBidiType;
517
518 [switch_is(dwBidiType)] union
519 {
520 [case(WINSPOOL_BIDI_NULL, WINSPOOL_BIDI_BOOL)]
521 INT bData;
522 [case(WINSPOOL_BIDI_INT)]
523 LONG iData;
524 [case(WINSPOOL_BIDI_STRING, WINSPOOL_BIDI_TEXT, WINSPOOL_BIDI_ENUM)]
525 [string, unique] WCHAR* sData;
526 [case(WINSPOOL_BIDI_FLOAT)]
527 FLOAT fData;
528 [case(WINSPOOL_BIDI_BLOB)]
529 WINSPOOL_BINARY_CONTAINER biData;
530 }
531 u;
532 }
533 WINSPOOL_BIDI_DATA;
534
535 typedef struct _WINSPOOL_BIDI_REQUEST_DATA
536 {
537 DWORD dwReqNumber;
538 [string, unique] WCHAR* pSchema;
539 WINSPOOL_BIDI_DATA data;
540 }
541 WINSPOOL_BIDI_REQUEST_DATA;
542
543 typedef struct _WINSPOOL_BIDI_RESPONSE_DATA
544 {
545 DWORD dwResult;
546 DWORD dwReqNumber;
547 [string, unique] WCHAR* pSchema;
548 WINSPOOL_BIDI_DATA data;
549 }
550 WINSPOOL_BIDI_RESPONSE_DATA;
551
552 typedef struct _WINSPOOL_BIDI_REQUEST_CONTAINER
553 {
554 DWORD Version;
555 DWORD Flags;
556 DWORD Count;
557 [size_is(Count), unique] WINSPOOL_BIDI_REQUEST_DATA aData[];
558 }
559 WINSPOOL_BIDI_REQUEST_CONTAINER;
560
561 typedef struct _WINSPOOL_BIDI_RESPONSE_CONTAINER
562 {
563 DWORD Version;
564 DWORD Flags;
565 DWORD Count;
566 [size_is(Count), unique] WINSPOOL_BIDI_RESPONSE_DATA aData[];
567 }
568 WINSPOOL_BIDI_RESPONSE_CONTAINER;
569
570 typedef struct _WINSPOOL_DOC_INFO_CONTAINER
571 {
572 DWORD Level;
573
574 [switch_is(Level)] union
575 {
576 [case(1)]
577 WINSPOOL_DOC_INFO_1* pDocInfo1;
578 }
579 DocInfo;
580 }
581 WINSPOOL_DOC_INFO_CONTAINER;
582
583 typedef struct _WINSPOOL_DEVMODE_CONTAINER
584 {
585 DWORD cbBuf;
586 [size_is(cbBuf), unique] BYTE* pDevMode;
587 }
588 WINSPOOL_DEVMODE_CONTAINER;
589
590 typedef struct _WINSPOOL_DRIVER_CONTAINER
591 {
592 DWORD Level;
593
594 [switch_is(Level)] union
595 {
596 [case(1)]
597 WINSPOOL_DRIVER_INFO_1* pNotUsed;
598 [case(2)]
599 WINSPOOL_DRIVER_INFO_2* Level2;
600 [case(3)]
601 WINSPOOL_DRIVER_INFO_3* Level3;
602 [case(4)]
603 WINSPOOL_DRIVER_INFO_4* Level4;
604 [case(6)]
605 WINSPOOL_DRIVER_INFO_6* Level6;
606 [case(8)]
607 WINSPOOL_DRIVER_INFO_8* Level8;
608 }
609 DriverInfo;
610 }
611 WINSPOOL_DRIVER_CONTAINER;
612
613 typedef struct _WINSPOOL_FORM_CONTAINER
614 {
615 DWORD Level;
616
617 [switch_is(Level)] union
618 {
619 [case(1)]
620 WINSPOOL_FORM_INFO_1* pFormInfo1;
621 [case(2)]
622 WINSPOOL_FORM_INFO_2* pFormInfo2;
623 }
624 FormInfo;
625 }
626 WINSPOOL_FORM_CONTAINER;
627
628 typedef struct _WINSPOOL_JOB_CONTAINER
629 {
630 DWORD Level;
631
632 [switch_is(Level)] union
633 {
634 [case(1)]
635 WINSPOOL_JOB_INFO_1* Level1;
636 [case(2)]
637 WINSPOOL_JOB_INFO_2* Level2;
638 [case(3)]
639 WINSPOOL_JOB_INFO_3* Level3;
640 [case(4)]
641 WINSPOOL_JOB_INFO_4* Level4;
642 }
643 JobInfo;
644 }
645 WINSPOOL_JOB_CONTAINER;
646
647 typedef struct _WINSPOOL_MONITOR_CONTAINER
648 {
649 DWORD Level;
650
651 [switch_is(Level)] union
652 {
653 [case(1)]
654 WINSPOOL_MONITOR_INFO_1* pMonitorInfo1;
655 [case(2)]
656 WINSPOOL_MONITOR_INFO_2* pMonitorInfo2;
657 }
658 MonitorInfo;
659 }
660 WINSPOOL_MONITOR_CONTAINER;
661
662 typedef struct _WINSPOOL_PORT_CONTAINER
663 {
664 DWORD Level;
665
666 [switch_is(0x00FFFFFF & Level)]
667 union
668 {
669 [case(1)]
670 WINSPOOL_PORT_INFO_1* pPortInfo1;
671 [case(2)]
672 WINSPOOL_PORT_INFO_2* pPortInfo2;
673 [case(3)]
674 WINSPOOL_PORT_INFO_3* pPortInfo3;
675 [case(0x00FFFFFF)]
676 WINSPOOL_PORT_INFO_FF* pPortInfoFF;
677 }
678 PortInfo;
679 }
680 WINSPOOL_PORT_CONTAINER;
681
682 typedef struct _WINSPOOL_PORT_VAR_CONTAINER
683 {
684 DWORD cbMonitorData;
685 [size_is(cbMonitorData), unique] BYTE* pMonitorData;
686 }
687 WINSPOOL_PORT_VAR_CONTAINER;
688
689 typedef struct _WINSPOOL_PRINTER_CONTAINER
690 {
691 DWORD Level;
692
693 [switch_is(Level)] union
694 {
695 [case(0)]
696 WINSPOOL_PRINTER_INFO_STRESS* pPrinterInfoStress;
697 [case(1)]
698 WINSPOOL_PRINTER_INFO_1* pPrinterInfo1;
699 [case(2)]
700 WINSPOOL_PRINTER_INFO_2* pPrinterInfo2;
701 [case(3)]
702 WINSPOOL_PRINTER_INFO_3* pPrinterInfo3;
703 [case(4)]
704 WINSPOOL_PRINTER_INFO_4* pPrinterInfo4;
705 [case(5)]
706 WINSPOOL_PRINTER_INFO_5* pPrinterInfo5;
707 [case(6)]
708 WINSPOOL_PRINTER_INFO_6* pPrinterInfo6;
709 [case(7)]
710 WINSPOOL_PRINTER_INFO_7* pPrinterInfo7;
711 [case(8)]
712 WINSPOOL_PRINTER_INFO_8* pPrinterInfo8;
713 [case(9)]
714 WINSPOOL_PRINTER_INFO_9* pPrinterInfo9;
715 }
716 PrinterInfo;
717 }
718 WINSPOOL_PRINTER_CONTAINER;
719
720 typedef struct _WINSPOOL_PROVIDOR_CONTAINER
721 {
722 DWORD Level;
723
724 [switch_is(Level)] union
725 {
726 [case(1)]
727 WINSPOOL_PROVIDOR_INFO_1* pProvidorInfo1;
728 [case(2)]
729 WINSPOOL_PROVIDOR_INFO_2* pProvidorInfo2;
730 }
731 ProvidorInfo;
732 }
733 WINSPOOL_PROVIDOR_CONTAINER;
734
735 typedef struct _WINSPOOL_SECURITY_CONTAINER
736 {
737 DWORD cbBuf;
738 [size_is(cbBuf), unique] BYTE* pSecurity;
739 }
740 WINSPOOL_SECURITY_CONTAINER;
741
742 typedef struct _WINSPOOL_SPLCLIENT_CONTAINER
743 {
744 DWORD Level;
745
746 [switch_is(Level)] union
747 {
748 [case(1)]
749 WINSPOOL_SPLCLIENT_INFO_1* pClientInfo1;
750 [case(2)]
751 WINSPOOL_SPLCLIENT_INFO_2* pNotUsed1;
752 [case(3)]
753 WINSPOOL_SPLCLIENT_INFO_3* pNotUsed2;
754 }
755 ClientInfo;
756 }
757 WINSPOOL_SPLCLIENT_CONTAINER;
758
759 typedef struct _WINSPOOL_STRING_CONTAINER
760 {
761 DWORD cbBuf;
762 [size_is(cbBuf / 2), unique] WCHAR* pszString;
763 }
764 WINSPOOL_STRING_CONTAINER;
765
766 typedef struct _WINSPOOL_SYSTEMTIME_CONTAINER {
767 DWORD cbBuf;
768 SYSTEMTIME* pSystemTime;
769 }
770 WINSPOOL_SYSTEMTIME_CONTAINER;
771
772
773 /*
774 * Various definitions
775 */
776 typedef struct _WINSPOOL_V2_NOTIFY_OPTIONS_TYPE
777 {
778 USHORT Type;
779 USHORT Reserved0;
780 DWORD Reserved1;
781 DWORD Reserved2;
782 DWORD Count;
783 [size_is(Count), unique] USHORT* pFields;
784 }
785 WINSPOOL_V2_NOTIFY_OPTIONS_TYPE;
786
787 typedef struct _WINSPOOL_V2_NOTIFY_OPTIONS
788 {
789 DWORD Version;
790 DWORD Reserved;
791 DWORD Count;
792 [size_is(Count), unique] WINSPOOL_V2_NOTIFY_OPTIONS_TYPE* pTypes;
793 }
794 WINSPOOL_V2_NOTIFY_OPTIONS;
795
796 typedef [switch_type(DWORD)] union _WINSPOOL_V2_NOTIFY_INFO_DATA_DATA
797 {
798 [case(WINSPOOL_TABLE_STRING)]
799 WINSPOOL_STRING_CONTAINER String;
800 [case(WINSPOOL_TABLE_DWORD)]
801 DWORD dwData[2];
802 [case(WINSPOOL_TABLE_TIME)]
803 WINSPOOL_SYSTEMTIME_CONTAINER SystemTime;
804 [case(WINSPOOL_TABLE_DEVMODE)]
805 WINSPOOL_DEVMODE_CONTAINER DevMode;
806 [case(WINSPOOL_TABLE_SECURITYDESCRIPTOR)]
807 WINSPOOL_SECURITY_CONTAINER SecurityDescriptor;
808 }
809 WINSPOOL_V2_NOTIFY_INFO_DATA_DATA;
810
811 typedef struct _WINSPOOL_V2_NOTIFY_INFO_DATA
812 {
813 USHORT Type;
814 USHORT Field;
815 DWORD Reserved;
816 DWORD Id;
817 [switch_is(Reserved & 0xffff)] WINSPOOL_V2_NOTIFY_INFO_DATA_DATA Data;
818 }
819 WINSPOOL_V2_NOTIFY_INFO_DATA;
820
821 typedef struct _WINSPOOL_V2_NOTIFY_INFO
822 {
823 DWORD Version;
824 DWORD Flags;
825 DWORD Count;
826 [size_is(Count), unique] WINSPOOL_V2_NOTIFY_INFO_DATA aData[];
827 }
828 WINSPOOL_V2_NOTIFY_INFO;
829
830 typedef [switch_type(DWORD)] union _WINSPOOL_V2_UREPLY_PRINTER
831 {
832 [case(0)]
833 WINSPOOL_V2_NOTIFY_INFO* pInfo;
834 }
835 WINSPOOL_V2_UREPLY_PRINTER;
836
837
838 /*
839 * The actual interface
840 */
841 [
842 uuid(12345678-1234-ABCD-EF00-0123456789AB),
843 version(1.0),
844 endpoint("ncalrpc:[spoolss]", "ncacn_np:[\\pipe\\spoolss]"),
845 pointer_default(unique)
846 ]
847
848 interface winspool {
849 /* Function 0x00 */
850 DWORD _RpcEnumPrinters(
851 [in] DWORD Flags,
852 [in, unique] WINSPOOL_HANDLE Name,
853 [in] DWORD Level,
854 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrinterEnum,
855 [in] DWORD cbBuf,
856 [out] DWORD* pcbNeeded,
857 [out] DWORD* pcReturned
858 );
859
860 /* Function 0x01 */
861 DWORD _RpcOpenPrinter(
862 [in, unique] WINSPOOL_HANDLE pPrinterName,
863 [out] WINSPOOL_PRINTER_HANDLE* phPrinter,
864 [in, string, unique] WCHAR* pDatatype,
865 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
866 [in] DWORD AccessRequired
867 );
868
869 /* Function 0x02 */
870 DWORD _RpcSetJob(
871 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
872 [in] DWORD JobId,
873 [in, unique] WINSPOOL_JOB_CONTAINER* pJobContainer,
874 [in] DWORD Command
875 );
876
877 /* Function 0x03 */
878 DWORD _RpcGetJob(
879 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
880 [in] DWORD JobId,
881 [in] DWORD Level,
882 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pJob,
883 [in] DWORD cbBuf,
884 [out] DWORD* pcbNeeded
885 );
886
887 /* Function 0x04 */
888 DWORD _RpcEnumJobs(
889 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
890 [in] DWORD FirstJob,
891 [in] DWORD NoJobs,
892 [in] DWORD Level,
893 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pJob,
894 [in] DWORD cbBuf,
895 [out] DWORD* pcbNeeded,
896 [out] DWORD* pcReturned
897 );
898
899 /* Function 0x05 */
900 DWORD _RpcAddPrinter(
901 [in, unique] WINSPOOL_HANDLE pName,
902 [in] WINSPOOL_PRINTER_CONTAINER* pPrinterContainer,
903 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
904 [in] WINSPOOL_SECURITY_CONTAINER* pSecurityContainer,
905 [out] WINSPOOL_PRINTER_HANDLE* pHandle
906 );
907
908 /* Function 0x06 */
909 DWORD _RpcDeletePrinter(
910 [in] WINSPOOL_PRINTER_HANDLE hPrinter
911 );
912
913 /* Function 0x07 */
914 DWORD _RpcSetPrinter(
915 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
916 [in] WINSPOOL_PRINTER_CONTAINER* pPrinterContainer,
917 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
918 [in] WINSPOOL_SECURITY_CONTAINER* pSecurityContainer,
919 [in] DWORD Command
920 );
921
922 /* Function 0x08 */
923 DWORD _RpcGetPrinter(
924 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
925 [in] DWORD Level,
926 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrinter,
927 [in] DWORD cbBuf,
928 [out] DWORD* pcbNeeded
929 );
930
931 /* Function 0x09 */
932 DWORD _RpcAddPrinterDriver(
933 [in, unique] WINSPOOL_HANDLE pName,
934 [in] WINSPOOL_DRIVER_CONTAINER* pDriverContainer
935 );
936
937 /* Function 0x0A */
938 DWORD _RpcEnumPrinterDrivers(
939 [in, unique] WINSPOOL_HANDLE pName,
940 [in, string, unique] WCHAR* pEnvironment,
941 [in] DWORD Level,
942 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDrivers,
943 [in] DWORD cbBuf,
944 [out] DWORD* pcbNeeded,
945 [out] DWORD* pcReturned
946 );
947
948 /* Function 0x0B */
949 DWORD _RpcGetPrinterDriver(
950 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
951 [in, string, unique] WCHAR* pEnvironment,
952 [in] DWORD Level,
953 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDriver,
954 [in] DWORD cbBuf,
955 [out] DWORD* pcbNeeded
956 );
957
958 /* Function 0x0C */
959 DWORD _RpcGetPrinterDriverDirectory(
960 [in, unique] WINSPOOL_HANDLE pName,
961 [in, string, unique] WCHAR* pEnvironment,
962 [in] DWORD Level,
963 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDriverDirectory,
964 [in] DWORD cbBuf,
965 [out] DWORD* pcbNeeded
966 );
967
968 /* Function 0x0D */
969 DWORD _RpcDeletePrinterDriver(
970 [in, unique] WINSPOOL_HANDLE pName,
971 [in, string] WCHAR* pEnvironment,
972 [in, string] WCHAR* pDriverName
973 );
974
975 /* Function 0x0E */
976 DWORD _RpcAddPrintProcessor(
977 [in, unique] WINSPOOL_HANDLE pName,
978 [in, string] WCHAR* pEnvironment,
979 [in, string] WCHAR* pPathName,
980 [in, string] WCHAR* pPrintProcessorName
981 );
982
983 /* Function 0x0F */
984 DWORD _RpcEnumPrintProcessors(
985 [in, unique] WINSPOOL_HANDLE pName,
986 [in, string, unique] WCHAR* pEnvironment,
987 [in] DWORD Level,
988 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrintProcessorInfo,
989 [in] DWORD cbBuf,
990 [out] DWORD* pcbNeeded,
991 [out] DWORD* pcReturned
992 );
993
994 /* Function 0x10 */
995 DWORD _RpcGetPrintProcessorDirectory(
996 [in, unique] WINSPOOL_HANDLE pName,
997 [in, string, unique] WCHAR* pEnvironment,
998 [in] DWORD Level,
999 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrintProcessorDirectory,
1000 [in] DWORD cbBuf,
1001 [out] DWORD* pcbNeeded
1002 );
1003
1004 /* Function 0x11 */
1005 DWORD _RpcStartDocPrinter(
1006 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1007 [in] WINSPOOL_DOC_INFO_CONTAINER* pDocInfoContainer,
1008 [out] DWORD* pJobId
1009 );
1010
1011 /* Function 0x12 */
1012 DWORD _RpcStartPagePrinter(
1013 [in] WINSPOOL_PRINTER_HANDLE hPrinter
1014 );
1015
1016 /* Function 0x13 */
1017 DWORD _RpcWritePrinter(
1018 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1019 [in, size_is(cbBuf)] BYTE* pBuf,
1020 [in] DWORD cbBuf,
1021 [out] DWORD* pcWritten
1022 );
1023
1024 /* Function 0x14 */
1025 DWORD _RpcEndPagePrinter(
1026 [in] WINSPOOL_PRINTER_HANDLE hPrinter
1027 );
1028
1029 /* Function 0x15 */
1030 DWORD _RpcAbortPrinter(
1031 [in] WINSPOOL_PRINTER_HANDLE hPrinter
1032 );
1033
1034 /* Function 0x16 */
1035 DWORD _RpcReadPrinter(
1036 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1037 [out, size_is(cbBuf)] BYTE* pBuf,
1038 [in] DWORD cbBuf,
1039 [out] DWORD* pcNoBytesRead
1040 );
1041
1042 /* Function 0x17 */
1043 DWORD _RpcEndDocPrinter(
1044 [in] WINSPOOL_PRINTER_HANDLE hPrinter
1045 );
1046
1047 /* Function 0x18 */
1048 DWORD _RpcAddJob(
1049 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1050 [in] DWORD Level,
1051 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pAddJob,
1052 [in] DWORD cbBuf,
1053 [out] DWORD* pcbNeeded
1054 );
1055
1056 /* Function 0x19 */
1057 DWORD _RpcScheduleJob(
1058 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1059 [in] DWORD JobId
1060 );
1061
1062 /* Function 0x1A */
1063 DWORD _RpcGetPrinterData(
1064 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1065 [in, string] WCHAR* pValueName,
1066 [out] DWORD* pType,
1067 [out, size_is(nSize)] BYTE* pData,
1068 [in] DWORD nSize,
1069 [out] DWORD* pcbNeeded
1070 );
1071
1072 /* Function 0x1B */
1073 DWORD _RpcSetPrinterData(
1074 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1075 [in, string] WCHAR* pValueName,
1076 [in] DWORD Type,
1077 [in, size_is(cbData)] BYTE* pData,
1078 [in] DWORD cbData
1079 );
1080
1081 /* Function 0x1C */
1082 DWORD _RpcWaitForPrinterChange(
1083 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1084 [in] DWORD Flags,
1085 [out] DWORD* pFlags
1086 );
1087
1088 /* Function 0x1D */
1089 DWORD _RpcClosePrinter(
1090 [in, out] WINSPOOL_PRINTER_HANDLE* phPrinter
1091 );
1092
1093 /* Function 0x1E */
1094 DWORD _RpcAddForm(
1095 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1096 [in] WINSPOOL_FORM_CONTAINER* pFormInfoContainer
1097 );
1098
1099 /* Function 0x1F */
1100 DWORD _RpcDeleteForm(
1101 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1102 [in, string] WCHAR* pFormName
1103 );
1104
1105 /* Function 0x20 */
1106 DWORD _RpcGetForm(
1107 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1108 [in, string] WCHAR* pFormName,
1109 [in] DWORD Level,
1110 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pForm,
1111 [in] DWORD cbBuf,
1112 [out] DWORD* pcbNeeded
1113 );
1114
1115 /* Function 0x21 */
1116 DWORD _RpcSetForm(
1117 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1118 [in, string] WCHAR* pFormName,
1119 [in] WINSPOOL_FORM_CONTAINER* pFormInfoContainer
1120 );
1121
1122 /* Function 0x22 */
1123 DWORD _RpcEnumForms(
1124 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1125 [in] DWORD Level,
1126 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pForm,
1127 [in] DWORD cbBuf,
1128 [out] DWORD* pcbNeeded,
1129 [out] DWORD* pcReturned
1130 );
1131
1132 /* Function 0x23 */
1133 DWORD _RpcEnumPorts(
1134 [in, unique] WINSPOOL_HANDLE pName,
1135 [in] DWORD Level,
1136 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPort,
1137 [in] DWORD cbBuf,
1138 [out] DWORD* pcbNeeded,
1139 [out] DWORD* pcReturned
1140 );
1141
1142 /* Function 0x24 */
1143 DWORD _RpcEnumMonitors(
1144 [in, unique] WINSPOOL_HANDLE pName,
1145 [in] DWORD Level,
1146 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pMonitor,
1147 [in] DWORD cbBuf,
1148 [out] DWORD* pcbNeeded,
1149 [out] DWORD* pcReturned
1150 );
1151
1152 /* Function 0x25 */
1153 DWORD _RpcAddPort(
1154 [in, unique] WINSPOOL_HANDLE pName,
1155 [in] ULONG_PTR hWnd,
1156 [in] WCHAR* pMonitorName
1157 );
1158
1159 /* Function 0x26 */
1160 DWORD _RpcConfigurePort(
1161 [in, unique] WINSPOOL_HANDLE pName,
1162 [in] ULONG_PTR hWnd,
1163 [in] WCHAR* pPortName
1164 );
1165
1166 /* Function 0x27 */
1167 DWORD _RpcDeletePort(
1168 [in, unique] WINSPOOL_HANDLE pName,
1169 [in] ULONG_PTR hWnd,
1170 [in, string] WCHAR* pPortName
1171 );
1172
1173 /* Function 0x28 */
1174 DWORD _RpcCreatePrinterIC(
1175 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1176 [out] WINSPOOL_GDI_HANDLE* pHandle,
1177 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer
1178 );
1179
1180 /* Function 0x29 */
1181 DWORD _RpcPlayGdiScriptOnPrinterIC(
1182 [in] WINSPOOL_GDI_HANDLE hPrinterIC,
1183 [in, size_is(cIn)] BYTE* pIn,
1184 [in] DWORD cIn,
1185 [out, size_is(cOut)] BYTE* pOut,
1186 [in] DWORD cOut,
1187 [in] DWORD ul
1188 );
1189
1190 /* Function 0x2A */
1191 DWORD _RpcDeletePrinterIC(
1192 [in, out] WINSPOOL_GDI_HANDLE* phPrinterIC
1193 );
1194
1195 /* Function 0x2B */
1196 DWORD _RpcAddPrinterConnection(
1197 [in, unique] WINSPOOL_HANDLE pName
1198 );
1199
1200 /* Function 0x2C */
1201 DWORD _RpcDeletePrinterConnection(
1202 [in, unique] WINSPOOL_HANDLE pName
1203 );
1204
1205 /* Function 0x2D */
1206 DWORD _RpcPrinterMessageBox(
1207 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1208 [in] DWORD Error,
1209 [in] ULONG_PTR hWnd,
1210 [in, string] WCHAR* pText,
1211 [in, string] WCHAR* pCaption,
1212 [in] DWORD dwType
1213 );
1214
1215 /* Function 0x2E */
1216 DWORD _RpcAddMonitor(
1217 [in, unique] WINSPOOL_HANDLE pName,
1218 [in] WINSPOOL_MONITOR_CONTAINER* pMonitorContainer
1219 );
1220
1221 /* Function 0x2F */
1222 DWORD _RpcDeleteMonitor(
1223 [in, unique] WINSPOOL_HANDLE pName,
1224 [in, string, unique] WCHAR* pEnvironment,
1225 [in, string] WCHAR* pMonitorName
1226 );
1227
1228 /* Function 0x30 */
1229 DWORD _RpcDeletePrintProcessor(
1230 [in, unique] WINSPOOL_HANDLE pName,
1231 [in, string, unique] WCHAR* pEnvironment,
1232 [in, string] WCHAR* pPrintProcessorName
1233 );
1234
1235 /* Function 0x31 */
1236 DWORD _RpcAddPrintProvidor(
1237 [in, unique] WINSPOOL_HANDLE pName,
1238 [in] WINSPOOL_PROVIDOR_CONTAINER* pProvidorContainer
1239 );
1240
1241 /* Function 0x32 */
1242 DWORD _RpcDeletePrintProvidor(
1243 [in, unique] WINSPOOL_HANDLE pName,
1244 [in, string, unique] WCHAR* pEnvironment,
1245 [in, string] WCHAR* pPrintProviderName
1246 );
1247
1248 /* Function 0x33 */
1249 DWORD _RpcEnumPrintProcessorDatatypes(
1250 [in, unique] WINSPOOL_HANDLE pName,
1251 [in, string, unique] WCHAR* pPrintProcessorName,
1252 [in] DWORD Level,
1253 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDatatypes,
1254 [in] DWORD cbBuf,
1255 [out] DWORD* pcbNeeded,
1256 [out] DWORD* pcReturned
1257 );
1258
1259 /* Function 0x34 */
1260 DWORD _RpcResetPrinter(
1261 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1262 [in, string, unique] WCHAR* pDatatype,
1263 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer
1264 );
1265
1266 /* Function 0x35 */
1267 DWORD _RpcGetPrinterDriver2(
1268 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1269 [in, string, unique] WCHAR* pEnvironment,
1270 [in] DWORD Level,
1271 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDriver,
1272 [in] DWORD cbBuf,
1273 [out] DWORD* pcbNeeded,
1274 [in] DWORD dwClientMajorVersion,
1275 [in] DWORD dwClientMinorVersion,
1276 [out] DWORD* pdwServerMaxVersion,
1277 [out] DWORD* pdwServerMinVersion
1278 );
1279
1280 /* Function 0x36 (TODO) */
1281 DWORD _RpcClientFindFirstPrinterChangeNotification(
1282 /* TODO */
1283 );
1284
1285 /* Function 0x37 (TODO) */
1286 DWORD _RpcFindNextPrinterChangeNotification(
1287 /* TODO */
1288 );
1289
1290 /* Function 0x38 (TODO) */
1291 DWORD _RpcFindClosePrinterChangeNotification(
1292 /* TODO */
1293 );
1294
1295 /* Function 0x39 (TODO) */
1296 DWORD _RpcRouterFindFirstPrinterChangeNotificationOld(
1297 /* TODO */
1298 );
1299
1300 /* Function 0x3A */
1301 DWORD _RpcReplyOpenPrinter(
1302 [in] WINSPOOL_HANDLE pMachine,
1303 [out] WINSPOOL_PRINTER_HANDLE* phPrinterNotify,
1304 [in] DWORD dwPrinterRemote,
1305 [in] DWORD dwType,
1306 [in, range(0, 512)] DWORD cbBuffer,
1307 [in, unique, size_is(cbBuffer), disable_consistency_check] BYTE* pBuffer
1308 );
1309
1310 /* Function 0x3B */
1311 DWORD _RpcRouterReplyPrinter(
1312 [in] WINSPOOL_PRINTER_HANDLE hNotify,
1313 [in] DWORD fdwFlags,
1314 [in, range(0, 512)] DWORD cbBuffer,
1315 [in, unique, size_is(cbBuffer), disable_consistency_check] BYTE* pBuffer
1316 );
1317
1318 /* Function 0x3C */
1319 DWORD _RpcReplyClosePrinter(
1320 [in, out] WINSPOOL_PRINTER_HANDLE* phNotify
1321 );
1322
1323 /* Function 0x3D */
1324 DWORD _RpcAddPortEx(
1325 [in] WINSPOOL_HANDLE pName,
1326 [in] WINSPOOL_PORT_CONTAINER* pPortContainer,
1327 [in] WINSPOOL_PORT_VAR_CONTAINER* pPortVarContainer,
1328 [in, string] WCHAR* pMonitorName
1329 );
1330
1331 /* Function 0x3E */
1332 DWORD _RpcRemoteFindFirstPrinterChangeNotification(
1333 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1334 [in] DWORD fdwFlags,
1335 [in] DWORD fdwOptions,
1336 [in, string, unique] WCHAR* pszLocalMachine,
1337 [in] DWORD dwPrinterLocal,
1338 [in, range(0, 512)] DWORD cbBuffer,
1339 [in, out, unique, size_is(cbBuffer), disable_consistency_check] BYTE* pBuffer
1340 );
1341
1342 /* Function 0x3F */
1343 DWORD _RpcSpoolerInit();
1344
1345 /* Function 0x40 (TODO) */
1346 DWORD _RpcResetPrinterEx(
1347 /* TODO */
1348 );
1349
1350 /* Function 0x41 */
1351 DWORD _RpcRemoteFindFirstPrinterChangeNotificationEx(
1352 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1353 [in] DWORD fdwFlags,
1354 [in] DWORD fdwOptions,
1355 [in, string, unique] WCHAR* pszLocalMachine,
1356 [in] DWORD dwPrinterLocal,
1357 [in, unique] WINSPOOL_V2_NOTIFY_OPTIONS* pOptions
1358 );
1359
1360 /* Function 0x42 */
1361 DWORD _RpcRouterReplyPrinterEx(
1362 [in] WINSPOOL_PRINTER_HANDLE hNotify,
1363 [in] DWORD dwColor,
1364 [in] DWORD fdwFlags,
1365 [out] DWORD* pdwResult,
1366 [in] DWORD dwReplyType,
1367 [in, switch_is(dwReplyType)] WINSPOOL_V2_UREPLY_PRINTER Reply
1368 );
1369
1370 /* Function 0x43 */
1371 DWORD _RpcRouterRefreshPrinterChangeNotification(
1372 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1373 [in] DWORD dwColor,
1374 [in, unique] WINSPOOL_V2_NOTIFY_OPTIONS* pOptions,
1375 [out] WINSPOOL_V2_NOTIFY_INFO** ppInfo
1376 );
1377
1378 /* Function 0x44 (TODO) */
1379 DWORD _RpcSetAllocFailCount(
1380 /* TODO */
1381 );
1382
1383 /* Function 0x45 */
1384 DWORD _RpcOpenPrinterEx(
1385 [in, unique] WINSPOOL_HANDLE pPrinterName,
1386 [out] WINSPOOL_PRINTER_HANDLE* pHandle,
1387 [in, string, unique] WCHAR* pDatatype,
1388 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
1389 [in] DWORD AccessRequired,
1390 [in] WINSPOOL_SPLCLIENT_CONTAINER* pClientInfo
1391 );
1392
1393 /* Function 0x46 */
1394 DWORD _RpcAddPrinterEx(
1395 [in, unique] WINSPOOL_HANDLE pName,
1396 [in] WINSPOOL_PRINTER_CONTAINER* pPrinterContainer,
1397 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
1398 [in] WINSPOOL_SECURITY_CONTAINER* pSecurityContainer,
1399 [in] WINSPOOL_SPLCLIENT_CONTAINER* pClientInfo,
1400 [out] WINSPOOL_PRINTER_HANDLE* pHandle
1401 );
1402
1403 /* Function 0x47 */
1404 DWORD _RpcSetPort(
1405 [in, unique] WINSPOOL_HANDLE pName,
1406 [in, string, unique] WCHAR* pPortName,
1407 [in] WINSPOOL_PORT_CONTAINER* pPortContainer
1408 );
1409
1410 /* Function 0x48 */
1411 DWORD _RpcEnumPrinterData(
1412 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1413 [in] DWORD dwIndex,
1414 [out, size_is(cbValueName / sizeof(WCHAR))] WCHAR* pValueName,
1415 [in] DWORD cbValueName,
1416 [out] DWORD* pcbValueName,
1417 [out] DWORD* pType,
1418 [out, size_is(cbData)] BYTE* pData,
1419 [in] DWORD cbData,
1420 [out] DWORD* pcbData
1421 );
1422
1423 /* Function 0x49 */
1424 DWORD _RpcDeletePrinterData(
1425 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1426 [in, string] WCHAR* pValueName
1427 );
1428
1429 /* Function 0x4A (TODO) */
1430 DWORD _RpcClusterSplOpen(
1431 /* TODO */
1432 );
1433
1434 /* Function 0x4B (TODO) */
1435 DWORD _RpcClusterSplClose(
1436 /* TODO */
1437 );
1438
1439 /* Function 0x4C (TODO) */
1440 DWORD _RpcClusterSplIsAlive(
1441 /* TODO */
1442 );
1443
1444 /* Function 0x4D */
1445 DWORD _RpcSetPrinterDataEx(
1446 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1447 [in, string] const WCHAR* pKeyName,
1448 [in, string] const WCHAR* pValueName,
1449 [in] DWORD Type,
1450 [in, size_is(cbData)] BYTE* pData,
1451 [in] DWORD cbData
1452 );
1453
1454 /* Function 0x4E */
1455 DWORD _RpcGetPrinterDataEx(
1456 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1457 [in, string] const WCHAR* pKeyName,
1458 [in, string] const WCHAR* pValueName,
1459 [out] DWORD* pType,
1460 [out, size_is(nSize)] BYTE* pData,
1461 [in] DWORD nSize,
1462 [out] DWORD* pcbNeeded
1463 );
1464
1465 /* Function 0x4F */
1466 DWORD _RpcEnumPrinterDataEx(
1467 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1468 [in, string] const WCHAR* pKeyName,
1469 [out, size_is(cbEnumValues)] BYTE* pEnumValues,
1470 [in] DWORD cbEnumValues,
1471 [out] DWORD* pcbEnumValues,
1472 [out] DWORD* pnEnumValues
1473 );
1474
1475 /* Function 0x50 */
1476 DWORD _RpcEnumPrinterKey(
1477 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1478 [in, string] const WCHAR* pKeyName,
1479 [out, size_is(cbSubkey / sizeof(WCHAR))] WCHAR* pSubkey,
1480 [in] DWORD cbSubkey,
1481 [out] DWORD* pcbSubkey
1482 );
1483
1484 /* Function 0x51 */
1485 DWORD _RpcDeletePrinterDataEx(
1486 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1487 [in, string] const WCHAR* pKeyName,
1488 [in, string] const WCHAR* pValueName
1489 );
1490
1491 /* Function 0x52 */
1492 DWORD _RpcDeletePrinterKey(
1493 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1494 [in, string] const WCHAR* pKeyName
1495 );
1496
1497 /* Function 0x53 (TODO) */
1498 DWORD _RpcSeekPrinter(
1499 /* TODO */
1500 );
1501
1502 /* Function 0x54 */
1503 DWORD _RpcDeletePrinterDriverEx(
1504 [in, unique] WINSPOOL_HANDLE pName,
1505 [in, string] WCHAR* pEnvironment,
1506 [in, string] WCHAR* pDriverName,
1507 [in] DWORD dwDeleteFlag,
1508 [in] DWORD dwVersionNum
1509 );
1510
1511 /* Function 0x55 */
1512 DWORD _RpcAddPerMachineConnection(
1513 [in, unique] WINSPOOL_HANDLE pServer,
1514 [in, string] const WCHAR* pPrinterName,
1515 [in, string] const WCHAR* pPrintServer,
1516 [in, string] const WCHAR* pProvider
1517 );
1518
1519 /* Function 0x56 */
1520 DWORD _RpcDeletePerMachineConnection(
1521 [in, unique] WINSPOOL_HANDLE pServer,
1522 [in, string] const WCHAR* pPrinterName
1523 );
1524
1525 /* Function 0x57 */
1526 DWORD _RpcEnumPerMachineConnections(
1527 [in, unique] WINSPOOL_HANDLE pServer,
1528 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrinterEnum,
1529 [in] DWORD cbBuf,
1530 [out] DWORD* pcbNeeded,
1531 [out] DWORD* pcReturned
1532 );
1533
1534 /* Function 0x58 */
1535 DWORD _RpcXcvData(
1536 [in] WINSPOOL_PRINTER_HANDLE hXcv,
1537 [in, string] const WCHAR* pszDataName,
1538 [in, size_is(cbInputData)] BYTE* pInputData,
1539 [in] DWORD cbInputData,
1540 [out, size_is(cbOutputData)] BYTE* pOutputData,
1541 [in] DWORD cbOutputData,
1542 [out] DWORD* pcbOutputNeeded,
1543 [in, out] DWORD* pdwStatus
1544 );
1545
1546 /* Function 0x59 */
1547 DWORD _RpcAddPrinterDriverEx(
1548 [in, unique] WINSPOOL_HANDLE pName,
1549 [in] WINSPOOL_DRIVER_CONTAINER* pDriverContainer,
1550 [in] DWORD dwFileCopyFlags
1551 );
1552
1553 /* Function 0x5A (TODO) */
1554 DWORD _RpcSplOpenPrinter(
1555 /* TODO */
1556 );
1557
1558 /* Function 0x5B (TODO) */
1559 DWORD _RpcGetSpoolFileInfo(
1560 /* TODO */
1561 );
1562
1563 /* Function 0x5C (TODO) */
1564 DWORD _RpcCommitSpoolData(
1565 /* TODO */
1566 );
1567
1568 /* Function 0x5D (TODO) */
1569 DWORD _RpcCloseSpoolFileHandle(
1570 /* TODO */
1571 );
1572
1573 /* Function 0x5E */
1574 DWORD _RpcFlushPrinter(
1575 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1576 [in, size_is(cbBuf)] BYTE* pBuf,
1577 [in] DWORD cbBuf,
1578 [out] DWORD* pcWritten,
1579 [in] DWORD cSleep
1580 );
1581
1582 /* Function 0x5F */
1583 DWORD _RpcSendRecvBidiData(
1584 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1585 [in, string, unique] const WCHAR* pAction,
1586 [in] WINSPOOL_BIDI_REQUEST_CONTAINER* pReqData,
1587 [out] WINSPOOL_BIDI_RESPONSE_CONTAINER** ppRespData
1588 );
1589
1590 /* Function 0x60 (TODO) */
1591 DWORD _RpcAddDriverCatalog(
1592 /* TODO */
1593 );
1594 }