[Printing] Update and Add Functions
[reactos.git] / 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 typedef struct _WINSPOOL_FILE_INFO_1
838 {
839 BOOL bInheritHandle;
840 WINSPOOL_HANDLE hSpoolFileHandle;
841 DWORD dwOptions;
842 }
843 WINSPOOL_FILE_INFO_1;
844
845 typedef struct _WINSPOOL_FILE_INFO_CONTAINER
846 {
847 DWORD Level;
848
849 [switch_is(Level)] union
850 {
851 [case(1)]
852 WINSPOOL_FILE_INFO_1 *pFileInfo1;
853 }
854 FileInfo;
855 }
856 WINSPOOL_FILE_INFO_CONTAINER;
857
858 /*
859 * The actual interface
860 */
861 [
862 uuid(12345678-1234-ABCD-EF00-0123456789AB),
863 version(1.0),
864 endpoint("ncalrpc:[spoolss]", "ncacn_np:[\\pipe\\spoolss]"),
865 pointer_default(unique)
866 ]
867
868 interface winspool {
869 /* Function 0x00 */
870 DWORD _RpcEnumPrinters(
871 [in] DWORD Flags,
872 [in, unique] WINSPOOL_HANDLE Name,
873 [in] DWORD Level,
874 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrinterEnum,
875 [in] DWORD cbBuf,
876 [out] DWORD* pcbNeeded,
877 [out] DWORD* pcReturned
878 );
879
880 /* Function 0x01 */
881 DWORD _RpcOpenPrinter(
882 [in, unique] WINSPOOL_HANDLE pPrinterName,
883 [out] WINSPOOL_PRINTER_HANDLE* phPrinter,
884 [in, string, unique] WCHAR* pDatatype,
885 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
886 [in] DWORD AccessRequired
887 );
888
889 /* Function 0x02 */
890 DWORD _RpcSetJob(
891 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
892 [in] DWORD JobId,
893 [in, unique] WINSPOOL_JOB_CONTAINER* pJobContainer,
894 [in] DWORD Command
895 );
896
897 /* Function 0x03 */
898 DWORD _RpcGetJob(
899 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
900 [in] DWORD JobId,
901 [in] DWORD Level,
902 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pJob,
903 [in] DWORD cbBuf,
904 [out] DWORD* pcbNeeded
905 );
906
907 /* Function 0x04 */
908 DWORD _RpcEnumJobs(
909 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
910 [in] DWORD FirstJob,
911 [in] DWORD NoJobs,
912 [in] DWORD Level,
913 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pJob,
914 [in] DWORD cbBuf,
915 [out] DWORD* pcbNeeded,
916 [out] DWORD* pcReturned
917 );
918
919 /* Function 0x05 */
920 DWORD _RpcAddPrinter(
921 [in, unique] WINSPOOL_HANDLE pName,
922 [in] WINSPOOL_PRINTER_CONTAINER* pPrinterContainer,
923 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
924 [in] WINSPOOL_SECURITY_CONTAINER* pSecurityContainer,
925 [out] WINSPOOL_PRINTER_HANDLE* pHandle
926 );
927
928 /* Function 0x06 */
929 DWORD _RpcDeletePrinter(
930 [in] WINSPOOL_PRINTER_HANDLE hPrinter
931 );
932
933 /* Function 0x07 */
934 DWORD _RpcSetPrinter(
935 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
936 [in] WINSPOOL_PRINTER_CONTAINER* pPrinterContainer,
937 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
938 [in] WINSPOOL_SECURITY_CONTAINER* pSecurityContainer,
939 [in] DWORD Command
940 );
941
942 /* Function 0x08 */
943 DWORD _RpcGetPrinter(
944 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
945 [in] DWORD Level,
946 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrinter,
947 [in] DWORD cbBuf,
948 [out] DWORD* pcbNeeded
949 );
950
951 /* Function 0x09 */
952 DWORD _RpcAddPrinterDriver(
953 [in, unique] WINSPOOL_HANDLE pName,
954 [in] WINSPOOL_DRIVER_CONTAINER* pDriverContainer
955 );
956
957 /* Function 0x0A */
958 DWORD _RpcEnumPrinterDrivers(
959 [in, unique] WINSPOOL_HANDLE pName,
960 [in, string, unique] WCHAR* pEnvironment,
961 [in] DWORD Level,
962 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDrivers,
963 [in] DWORD cbBuf,
964 [out] DWORD* pcbNeeded,
965 [out] DWORD* pcReturned
966 );
967
968 /* Function 0x0B */
969 DWORD _RpcGetPrinterDriver(
970 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
971 [in, string, unique] WCHAR* pEnvironment,
972 [in] DWORD Level,
973 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDriver,
974 [in] DWORD cbBuf,
975 [out] DWORD* pcbNeeded
976 );
977
978 /* Function 0x0C */
979 DWORD _RpcGetPrinterDriverDirectory(
980 [in, unique] WINSPOOL_HANDLE pName,
981 [in, string, unique] WCHAR* pEnvironment,
982 [in] DWORD Level,
983 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDriverDirectory,
984 [in] DWORD cbBuf,
985 [out] DWORD* pcbNeeded
986 );
987
988 /* Function 0x0D */
989 DWORD _RpcDeletePrinterDriver(
990 [in, unique] WINSPOOL_HANDLE pName,
991 [in, string] WCHAR* pEnvironment,
992 [in, string] WCHAR* pDriverName
993 );
994
995 /* Function 0x0E */
996 DWORD _RpcAddPrintProcessor(
997 [in, unique] WINSPOOL_HANDLE pName,
998 [in, string] WCHAR* pEnvironment,
999 [in, string] WCHAR* pPathName,
1000 [in, string] WCHAR* pPrintProcessorName
1001 );
1002
1003 /* Function 0x0F */
1004 DWORD _RpcEnumPrintProcessors(
1005 [in, unique] WINSPOOL_HANDLE pName,
1006 [in, string, unique] WCHAR* pEnvironment,
1007 [in] DWORD Level,
1008 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrintProcessorInfo,
1009 [in] DWORD cbBuf,
1010 [out] DWORD* pcbNeeded,
1011 [out] DWORD* pcReturned
1012 );
1013
1014 /* Function 0x10 */
1015 DWORD _RpcGetPrintProcessorDirectory(
1016 [in, unique] WINSPOOL_HANDLE pName,
1017 [in, string, unique] WCHAR* pEnvironment,
1018 [in] DWORD Level,
1019 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrintProcessorDirectory,
1020 [in] DWORD cbBuf,
1021 [out] DWORD* pcbNeeded
1022 );
1023
1024 /* Function 0x11 */
1025 DWORD _RpcStartDocPrinter(
1026 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1027 [in] WINSPOOL_DOC_INFO_CONTAINER* pDocInfoContainer,
1028 [out] DWORD* pJobId
1029 );
1030
1031 /* Function 0x12 */
1032 DWORD _RpcStartPagePrinter(
1033 [in] WINSPOOL_PRINTER_HANDLE hPrinter
1034 );
1035
1036 /* Function 0x13 */
1037 DWORD _RpcWritePrinter(
1038 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1039 [in, size_is(cbBuf)] BYTE* pBuf,
1040 [in] DWORD cbBuf,
1041 [out] DWORD* pcWritten
1042 );
1043
1044 /* Function 0x14 */
1045 DWORD _RpcEndPagePrinter(
1046 [in] WINSPOOL_PRINTER_HANDLE hPrinter
1047 );
1048
1049 /* Function 0x15 */
1050 DWORD _RpcAbortPrinter(
1051 [in] WINSPOOL_PRINTER_HANDLE hPrinter
1052 );
1053
1054 /* Function 0x16 */
1055 DWORD _RpcReadPrinter(
1056 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1057 [out, size_is(cbBuf)] BYTE* pBuf,
1058 [in] DWORD cbBuf,
1059 [out] DWORD* pcNoBytesRead
1060 );
1061
1062 /* Function 0x17 */
1063 DWORD _RpcEndDocPrinter(
1064 [in] WINSPOOL_PRINTER_HANDLE hPrinter
1065 );
1066
1067 /* Function 0x18 */
1068 DWORD _RpcAddJob(
1069 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1070 [in] DWORD Level,
1071 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pAddJob,
1072 [in] DWORD cbBuf,
1073 [out] DWORD* pcbNeeded
1074 );
1075
1076 /* Function 0x19 */
1077 DWORD _RpcScheduleJob(
1078 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1079 [in] DWORD JobId
1080 );
1081
1082 /* Function 0x1A */
1083 DWORD _RpcGetPrinterData(
1084 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1085 [in, string] WCHAR* pValueName,
1086 [out] DWORD* pType,
1087 [out, size_is(nSize)] BYTE* pData,
1088 [in] DWORD nSize,
1089 [out] DWORD* pcbNeeded
1090 );
1091
1092 /* Function 0x1B */
1093 DWORD _RpcSetPrinterData(
1094 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1095 [in, string] WCHAR* pValueName,
1096 [in] DWORD Type,
1097 [in, size_is(cbData)] BYTE* pData,
1098 [in] DWORD cbData
1099 );
1100
1101 /* Function 0x1C */
1102 DWORD _RpcWaitForPrinterChange(
1103 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1104 [in] DWORD Flags,
1105 [out] DWORD* pFlags
1106 );
1107
1108 /* Function 0x1D */
1109 DWORD _RpcClosePrinter(
1110 [in, out] WINSPOOL_PRINTER_HANDLE* phPrinter
1111 );
1112
1113 /* Function 0x1E */
1114 DWORD _RpcAddForm(
1115 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1116 [in] WINSPOOL_FORM_CONTAINER* pFormInfoContainer
1117 );
1118
1119 /* Function 0x1F */
1120 DWORD _RpcDeleteForm(
1121 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1122 [in, string] WCHAR* pFormName
1123 );
1124
1125 /* Function 0x20 */
1126 DWORD _RpcGetForm(
1127 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1128 [in, string] WCHAR* pFormName,
1129 [in] DWORD Level,
1130 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pForm,
1131 [in] DWORD cbBuf,
1132 [out] DWORD* pcbNeeded
1133 );
1134
1135 /* Function 0x21 */
1136 DWORD _RpcSetForm(
1137 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1138 [in, string] WCHAR* pFormName,
1139 [in] WINSPOOL_FORM_CONTAINER* pFormInfoContainer
1140 );
1141
1142 /* Function 0x22 */
1143 DWORD _RpcEnumForms(
1144 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1145 [in] DWORD Level,
1146 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pForm,
1147 [in] DWORD cbBuf,
1148 [out] DWORD* pcbNeeded,
1149 [out] DWORD* pcReturned
1150 );
1151
1152 /* Function 0x23 */
1153 DWORD _RpcEnumPorts(
1154 [in, unique] WINSPOOL_HANDLE pName,
1155 [in] DWORD Level,
1156 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPort,
1157 [in] DWORD cbBuf,
1158 [out] DWORD* pcbNeeded,
1159 [out] DWORD* pcReturned
1160 );
1161
1162 /* Function 0x24 */
1163 DWORD _RpcEnumMonitors(
1164 [in, unique] WINSPOOL_HANDLE pName,
1165 [in] DWORD Level,
1166 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pMonitor,
1167 [in] DWORD cbBuf,
1168 [out] DWORD* pcbNeeded,
1169 [out] DWORD* pcReturned
1170 );
1171
1172 /* Function 0x25 */
1173 DWORD _RpcAddPort(
1174 [in, unique] WINSPOOL_HANDLE pName,
1175 [in] ULONG_PTR hWnd,
1176 [in, string] WCHAR* pMonitorName
1177 );
1178
1179 /* Function 0x26 */
1180 DWORD _RpcConfigurePort(
1181 [in, unique] WINSPOOL_HANDLE pName,
1182 [in] ULONG_PTR hWnd,
1183 [in, string] WCHAR* pPortName
1184 );
1185
1186 /* Function 0x27 */
1187 DWORD _RpcDeletePort(
1188 [in, unique] WINSPOOL_HANDLE pName,
1189 [in] ULONG_PTR hWnd,
1190 [in, string] WCHAR* pPortName
1191 );
1192
1193 /* Function 0x28 */
1194 DWORD _RpcCreatePrinterIC(
1195 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1196 [out] WINSPOOL_GDI_HANDLE* pHandle,
1197 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer
1198 );
1199
1200 /* Function 0x29 */
1201 DWORD _RpcPlayGdiScriptOnPrinterIC(
1202 [in] WINSPOOL_GDI_HANDLE hPrinterIC,
1203 [in, size_is(cIn)] BYTE* pIn,
1204 [in] DWORD cIn,
1205 [out, size_is(cOut)] BYTE* pOut,
1206 [in] DWORD cOut,
1207 [in] DWORD ul
1208 );
1209
1210 /* Function 0x2A */
1211 DWORD _RpcDeletePrinterIC(
1212 [in, out] WINSPOOL_GDI_HANDLE* phPrinterIC
1213 );
1214
1215 /* Function 0x2B */
1216 DWORD _RpcAddPrinterConnection(
1217 [in, unique] WINSPOOL_HANDLE pName
1218 );
1219
1220 /* Function 0x2C */
1221 DWORD _RpcDeletePrinterConnection(
1222 [in, unique] WINSPOOL_HANDLE pName
1223 );
1224
1225 /* Function 0x2D */
1226 DWORD _RpcPrinterMessageBox(
1227 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1228 [in] DWORD Error,
1229 [in] ULONG_PTR hWnd,
1230 [in, string] WCHAR* pText,
1231 [in, string] WCHAR* pCaption,
1232 [in] DWORD dwType
1233 );
1234
1235 /* Function 0x2E */
1236 DWORD _RpcAddMonitor(
1237 [in, unique] WINSPOOL_HANDLE pName,
1238 [in] WINSPOOL_MONITOR_CONTAINER* pMonitorContainer
1239 );
1240
1241 /* Function 0x2F */
1242 DWORD _RpcDeleteMonitor(
1243 [in, unique] WINSPOOL_HANDLE pName,
1244 [in, string, unique] WCHAR* pEnvironment,
1245 [in, string, unique] WCHAR* pMonitorName
1246 );
1247
1248 /* Function 0x30 */
1249 DWORD _RpcDeletePrintProcessor(
1250 [in, unique] WINSPOOL_HANDLE pName,
1251 [in, string, unique] WCHAR* pEnvironment,
1252 [in, string] WCHAR* pPrintProcessorName
1253 );
1254
1255 /* Function 0x31 */
1256 DWORD _RpcAddPrintProvidor(
1257 [in, unique] WINSPOOL_HANDLE pName,
1258 [in] WINSPOOL_PROVIDOR_CONTAINER* pProvidorContainer
1259 );
1260
1261 /* Function 0x32 */
1262 DWORD _RpcDeletePrintProvidor(
1263 [in, unique] WINSPOOL_HANDLE pName,
1264 [in, string, unique] WCHAR* pEnvironment,
1265 [in, string] WCHAR* pPrintProviderName
1266 );
1267
1268 /* Function 0x33 */
1269 DWORD _RpcEnumPrintProcessorDatatypes(
1270 [in, unique] WINSPOOL_HANDLE pName,
1271 [in, string, unique] WCHAR* pPrintProcessorName,
1272 [in] DWORD Level,
1273 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDatatypes,
1274 [in] DWORD cbBuf,
1275 [out] DWORD* pcbNeeded,
1276 [out] DWORD* pcReturned
1277 );
1278
1279 /* Function 0x34 */
1280 DWORD _RpcResetPrinter(
1281 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1282 [in, string, unique] WCHAR* pDatatype,
1283 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer
1284 );
1285
1286 /* Function 0x35 */
1287 DWORD _RpcGetPrinterDriver2(
1288 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1289 [in, string, unique] WCHAR* pEnvironment,
1290 [in] DWORD Level,
1291 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pDriver,
1292 [in] DWORD cbBuf,
1293 [out] DWORD* pcbNeeded,
1294 [in] DWORD dwClientMajorVersion,
1295 [in] DWORD dwClientMinorVersion,
1296 [out] DWORD* pdwServerMaxVersion,
1297 [out] DWORD* pdwServerMinVersion
1298 );
1299
1300 /* Function 0x36 (TODO) */
1301 DWORD _RpcClientFindFirstPrinterChangeNotification(
1302 /* TODO */
1303 );
1304
1305 /* Function 0x37 (TODO) */
1306 DWORD _RpcFindNextPrinterChangeNotification(
1307 /* TODO */
1308 );
1309
1310 /* Function 0x38 (TODO) */
1311 DWORD _RpcFindClosePrinterChangeNotification(
1312 /* TODO */
1313 );
1314
1315 /* Function 0x39 (TODO) */
1316 DWORD _RpcRouterFindFirstPrinterChangeNotificationOld(
1317 /* TODO */
1318 );
1319
1320 /* Function 0x3A */
1321 DWORD _RpcReplyOpenPrinter(
1322 [in] WINSPOOL_HANDLE pMachine,
1323 [out] WINSPOOL_PRINTER_HANDLE* phPrinterNotify,
1324 [in] DWORD dwPrinterRemote,
1325 [in] DWORD dwType,
1326 [in, range(0, 512)] DWORD cbBuffer,
1327 [in, unique, size_is(cbBuffer), disable_consistency_check] BYTE* pBuffer
1328 );
1329
1330 /* Function 0x3B */
1331 DWORD _RpcRouterReplyPrinter(
1332 [in] WINSPOOL_PRINTER_HANDLE hNotify,
1333 [in] DWORD fdwFlags,
1334 [in, range(0, 512)] DWORD cbBuffer,
1335 [in, unique, size_is(cbBuffer), disable_consistency_check] BYTE* pBuffer
1336 );
1337
1338 /* Function 0x3C */
1339 DWORD _RpcReplyClosePrinter(
1340 [in, out] WINSPOOL_PRINTER_HANDLE* phNotify
1341 );
1342
1343 /* Function 0x3D */
1344 DWORD _RpcAddPortEx(
1345 [in, unique] WINSPOOL_HANDLE pName,
1346 [in] WINSPOOL_PORT_CONTAINER* pPortContainer,
1347 [in] WINSPOOL_PORT_VAR_CONTAINER* pPortVarContainer,
1348 [in, string] WCHAR* pMonitorName
1349 );
1350
1351 /* Function 0x3E */
1352 DWORD _RpcRemoteFindFirstPrinterChangeNotification(
1353 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1354 [in] DWORD fdwFlags,
1355 [in] DWORD fdwOptions,
1356 [in, string, unique] WCHAR* pszLocalMachine,
1357 [in] DWORD dwPrinterLocal,
1358 [in, range(0, 512)] DWORD cbBuffer,
1359 [in, out, unique, size_is(cbBuffer), disable_consistency_check] BYTE* pBuffer
1360 );
1361
1362 /* Function 0x3F */
1363 DWORD _RpcSpoolerInit();
1364
1365 /* Function 0x40 */
1366 DWORD _RpcResetPrinterEx(
1367 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1368 [in, string, unique] WCHAR* pDatatype,
1369 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
1370 [in] DWORD dwFlags
1371 );
1372
1373 /* Function 0x41 */
1374 DWORD _RpcRemoteFindFirstPrinterChangeNotificationEx(
1375 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1376 [in] DWORD fdwFlags,
1377 [in] DWORD fdwOptions,
1378 [in, string, unique] WCHAR* pszLocalMachine,
1379 [in] DWORD dwPrinterLocal,
1380 [in, unique] WINSPOOL_V2_NOTIFY_OPTIONS* pOptions
1381 );
1382
1383 /* Function 0x42 */
1384 DWORD _RpcRouterReplyPrinterEx(
1385 [in] WINSPOOL_PRINTER_HANDLE hNotify,
1386 [in] DWORD dwColor,
1387 [in] DWORD fdwFlags,
1388 [out] DWORD* pdwResult,
1389 [in] DWORD dwReplyType,
1390 [in, switch_is(dwReplyType)] WINSPOOL_V2_UREPLY_PRINTER Reply
1391 );
1392
1393 /* Function 0x43 */
1394 DWORD _RpcRouterRefreshPrinterChangeNotification(
1395 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1396 [in] DWORD dwColor,
1397 [in, unique] WINSPOOL_V2_NOTIFY_OPTIONS* pOptions,
1398 [out] WINSPOOL_V2_NOTIFY_INFO** ppInfo
1399 );
1400
1401 /* Function 0x44 (TODO) */
1402 DWORD _RpcSetAllocFailCount(
1403 /* TODO */
1404 );
1405
1406 /* Function 0x45 */
1407 DWORD _RpcOpenPrinterEx(
1408 [in, unique] WINSPOOL_HANDLE pPrinterName,
1409 [out] WINSPOOL_PRINTER_HANDLE* pHandle,
1410 [in, string, unique] WCHAR* pDatatype,
1411 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
1412 [in] DWORD AccessRequired,
1413 [in] WINSPOOL_SPLCLIENT_CONTAINER* pClientInfo
1414 );
1415
1416 /* Function 0x46 */
1417 DWORD _RpcAddPrinterEx(
1418 [in, unique] WINSPOOL_HANDLE pName,
1419 [in] WINSPOOL_PRINTER_CONTAINER* pPrinterContainer,
1420 [in] WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer,
1421 [in] WINSPOOL_SECURITY_CONTAINER* pSecurityContainer,
1422 [in] WINSPOOL_SPLCLIENT_CONTAINER* pClientInfo,
1423 [out] WINSPOOL_PRINTER_HANDLE* pHandle
1424 );
1425
1426 /* Function 0x47 */
1427 DWORD _RpcSetPort(
1428 [in, unique] WINSPOOL_HANDLE pName,
1429 [in, string, unique] WCHAR* pPortName,
1430 [in] WINSPOOL_PORT_CONTAINER* pPortContainer
1431 );
1432
1433 /* Function 0x48 */
1434 DWORD _RpcEnumPrinterData(
1435 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1436 [in] DWORD dwIndex,
1437 [out, size_is(cbValueName / sizeof(WCHAR))] WCHAR* pValueName,
1438 [in] DWORD cbValueName,
1439 [out] DWORD* pcbValueName,
1440 [out] DWORD* pType,
1441 [out, size_is(cbData)] BYTE* pData,
1442 [in] DWORD cbData,
1443 [out] DWORD* pcbData
1444 );
1445
1446 /* Function 0x49 */
1447 DWORD _RpcDeletePrinterData(
1448 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1449 [in, string] WCHAR* pValueName
1450 );
1451
1452 /* Function 0x4A (TODO) */
1453 DWORD _RpcClusterSplOpen(
1454 /* TODO */
1455 );
1456
1457 /* Function 0x4B (TODO) */
1458 DWORD _RpcClusterSplClose(
1459 /* TODO */
1460 );
1461
1462 /* Function 0x4C (TODO) */
1463 DWORD _RpcClusterSplIsAlive(
1464 /* TODO */
1465 );
1466
1467 /* Function 0x4D */
1468 DWORD _RpcSetPrinterDataEx(
1469 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1470 [in, string] const WCHAR* pKeyName,
1471 [in, string] const WCHAR* pValueName,
1472 [in] DWORD Type,
1473 [in, size_is(cbData)] BYTE* pData,
1474 [in] DWORD cbData
1475 );
1476
1477 /* Function 0x4E */
1478 DWORD _RpcGetPrinterDataEx(
1479 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1480 [in, string] const WCHAR* pKeyName,
1481 [in, string] const WCHAR* pValueName,
1482 [out] DWORD* pType,
1483 [out, size_is(nSize)] BYTE* pData,
1484 [in] DWORD nSize,
1485 [out] DWORD* pcbNeeded
1486 );
1487
1488 /* Function 0x4F */
1489 DWORD _RpcEnumPrinterDataEx(
1490 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1491 [in, string] const WCHAR* pKeyName,
1492 [out, size_is(cbEnumValues)] BYTE* pEnumValues,
1493 [in] DWORD cbEnumValues,
1494 [out] DWORD* pcbEnumValues,
1495 [out] DWORD* pnEnumValues
1496 );
1497
1498 /* Function 0x50 */
1499 DWORD _RpcEnumPrinterKey(
1500 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1501 [in, string] const WCHAR* pKeyName,
1502 [out, size_is(cbSubkey / sizeof(WCHAR))] WCHAR* pSubkey,
1503 [in] DWORD cbSubkey,
1504 [out] DWORD* pcbSubkey
1505 );
1506
1507 /* Function 0x51 */
1508 DWORD _RpcDeletePrinterDataEx(
1509 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1510 [in, string] const WCHAR* pKeyName,
1511 [in, string] const WCHAR* pValueName
1512 );
1513
1514 /* Function 0x52 */
1515 DWORD _RpcDeletePrinterKey(
1516 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1517 [in, string] const WCHAR* pKeyName
1518 );
1519
1520 /* Function 0x53 */
1521 DWORD _RpcSeekPrinter(
1522 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1523 [in] LARGE_INTEGER liDistanceToMove,
1524 [out] PLARGE_INTEGER pliNewPointer,
1525 [in] DWORD dwMoveMethod,
1526 [in] BOOL bWrite
1527 );
1528
1529 /* Function 0x54 */
1530 DWORD _RpcDeletePrinterDriverEx(
1531 [in, unique] WINSPOOL_HANDLE pName,
1532 [in, string] WCHAR* pEnvironment,
1533 [in, string] WCHAR* pDriverName,
1534 [in] DWORD dwDeleteFlag,
1535 [in] DWORD dwVersionNum
1536 );
1537
1538 /* Function 0x55 */
1539 DWORD _RpcAddPerMachineConnection(
1540 [in, unique] WINSPOOL_HANDLE pServer,
1541 [in, string] const WCHAR* pPrinterName,
1542 [in, string] const WCHAR* pPrintServer,
1543 [in, string] const WCHAR* pProvider
1544 );
1545
1546 /* Function 0x56 */
1547 DWORD _RpcDeletePerMachineConnection(
1548 [in, unique] WINSPOOL_HANDLE pServer,
1549 [in, string] const WCHAR* pPrinterName
1550 );
1551
1552 /* Function 0x57 */
1553 DWORD _RpcEnumPerMachineConnections(
1554 [in, unique] WINSPOOL_HANDLE pServer,
1555 [in, out, unique, size_is(cbBuf), disable_consistency_check] BYTE* pPrinterEnum,
1556 [in] DWORD cbBuf,
1557 [out] DWORD* pcbNeeded,
1558 [out] DWORD* pcReturned
1559 );
1560
1561 /* Function 0x58 */
1562 DWORD _RpcXcvData(
1563 [in, unique] WINSPOOL_PRINTER_HANDLE hXcv,
1564 [in, string] const WCHAR* pszDataName,
1565 [in, size_is(cbInputData)] BYTE* pInputData,
1566 [in] DWORD cbInputData,
1567 [out, size_is(cbOutputData)] BYTE* pOutputData,
1568 [in] DWORD cbOutputData,
1569 [out] DWORD* pcbOutputNeeded,
1570 [in, out] DWORD* pdwStatus
1571 );
1572
1573 /* Function 0x59 */
1574 DWORD _RpcAddPrinterDriverEx(
1575 [in, unique] WINSPOOL_HANDLE pName,
1576 [in] WINSPOOL_DRIVER_CONTAINER* pDriverContainer,
1577 [in] DWORD dwFileCopyFlags
1578 );
1579
1580 /* Function 0x5A (TODO) */
1581 DWORD _RpcSplOpenPrinter(
1582 /* TODO */
1583 );
1584
1585 /* Function 0x5B */
1586 DWORD _RpcGetSpoolFileInfo(
1587 [in, unique] WINSPOOL_PRINTER_HANDLE hPrinter,
1588 [in] WINSPOOL_HANDLE hProcessHandle,
1589 [in] DWORD Level,
1590 [in] WINSPOOL_FILE_INFO_1* pFileInfo,
1591 [in] DWORD dwSize,
1592 [in] DWORD* dwNeeded
1593 );
1594
1595 /* Function 0x5C */
1596 DWORD _RpcCommitSpoolData(
1597 [in, unique] WINSPOOL_PRINTER_HANDLE hPrinter,
1598 [in, unique] WINSPOOL_HANDLE hProcessHandle,
1599 [in] DWORD cbCommit,
1600 [in] DWORD Level,
1601 [in] WINSPOOL_FILE_INFO_1* pFileInfo,
1602 [in] DWORD dwSize,
1603 [in] DWORD* dwNeeded
1604 );
1605
1606 /* Function 0x5D */
1607 DWORD _RpcGetSpoolFileInfo2(
1608 [in, unique] WINSPOOL_PRINTER_HANDLE hPrinter,
1609 [in] DWORD dwProcessId,
1610 [in] DWORD Level,
1611 [in] WINSPOOL_FILE_INFO_CONTAINER* pFileInfoContainer
1612 );
1613
1614 /* Function 0x5E */
1615 DWORD _RpcCommitSpoolData2(
1616 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1617 [in] DWORD dwProcessId,
1618 [in] DWORD cbCommit,
1619 [in] DWORD Level,
1620 [in] WINSPOOL_FILE_INFO_CONTAINER* pFileInfoContainer
1621 );
1622
1623 /* Function 0x5F */
1624 DWORD _RpcCloseSpoolFileHandle(
1625 [in, unique] WINSPOOL_PRINTER_HANDLE hPrinter
1626 );
1627
1628 /* Function 0x60 */
1629 DWORD _RpcFlushPrinter(
1630 [in, unique] WINSPOOL_PRINTER_HANDLE hPrinter,
1631 [in, size_is(cbBuf)] BYTE* pBuf,
1632 [in] DWORD cbBuf,
1633 [out] DWORD* pcWritten,
1634 [in] DWORD cSleep
1635 );
1636
1637 /* Function 0x61 */
1638 DWORD _RpcSendRecvBidiData(
1639 [in] WINSPOOL_PRINTER_HANDLE hPrinter,
1640 [in, string, unique] const WCHAR* pAction,
1641 [in] WINSPOOL_BIDI_REQUEST_CONTAINER* pReqData,
1642 [out] WINSPOOL_BIDI_RESPONSE_CONTAINER** ppRespData
1643 );
1644
1645 /* Function 0x62 (TODO) */
1646 DWORD _RpcAddDriverCatalog(
1647 /* TODO */
1648 );
1649 }