1#include "idl_types.h"
2
3/*
4 * IRemoteWinspool interface definitions
5 *
6 * This IDL defines the "Print System Asynchronous Remote Protocol" MS-PAR
7 * interface.
8 *
9 * Currently only eight functions in this interface have no matching functions
10 * in the "spoolss" interface. All other functions have a 1-to-1 match but
11 * different opcodes than the spoolss interface.
12 *
13 * Every request on this interface requires a object uuid of
14 * "9940CA8E-512F-4C58-88A9-61098D6896BD" to be sent along with the DCE/RPC
15 * header.
16 *
17 * On Windows, this interface uses [ncacn_ip_tcp] transport and requires
18 * DCERPC_AUTH_TYPE_SPNEGO and at least DCERPC_AUTH_LEVEL_PACKET authentication.
19 *
20 *
21 */
22
23import "misc.idl", "winreg.idl", "spoolss.idl";
24
25[
26	uuid("76f03f96-cdfd-44fc-a22c-64950A001209"),
27	version(1.0),
28	endpoint("ncacn_ip_tcp:"),
29	pointer_default(unique),
30	helpstring("IRemoteWinspool SubSystem")
31]
32	interface iremotewinspool
33{
34#if 0
35	/*
36	 * pidl does not yet have a real [context_handle] implementation, so we
37	 * just use some defines here.
38	 */
39
40	typedef [context_handle] void *GDI_HANDLE;
41	typedef [context_handle] void *PRINTER_HANDLE;
42	typedef [context_handle] void *RMTNTFY_HANDLE;
43#else
44#define GDI_HANDLE policy_handle
45#define PRINTER_HANDLE policy_handle
46#define RMTNTFY_HANDLE policy_handle
47#endif
48
49	const string IREMOTEWINSPOOL_OBJECT_GUID = "9940CA8E-512F-4C58-88A9-61098D6896BD";
50
51	/******************/
52	/* Function: 0x00 */
53
54	typedef struct {
55		spoolss_NotifyInfo *pInfo;
56	} winspool_NOTIFY_REPLY_CONTAINER;
57
58	typedef struct {
59		spoolss_NotifyOption *pOptions;
60	} winspool_NOTIFY_OPTIONS_CONTAINER;
61
62	[public] WERROR winspool_AsyncOpenPrinter(
63		[in,unique] [string,charset(UTF16)] uint16 *pPrinterName,
64		[out] PRINTER_HANDLE *pHandle,
65		[in,unique] [string,charset(UTF16)] uint16 *pDatatype,
66		[in] spoolss_DevmodeContainer *pDevModeContainer,
67		[in] uint32 AccessRequired,
68		[in] spoolss_UserLevelCtr *pClientInfo
69	);
70
71	/******************/
72	/* Function: 0x01 */
73
74	WERROR winspool_AsyncAddPrinter(
75		[in,unique] [string,charset(UTF16)] uint16 *pName,
76		[in] spoolss_SetPrinterInfoCtr *pPrinterContainer,
77		[in] spoolss_DevmodeContainer *pDevModeContainer,
78		[in] sec_desc_buf *pSecurityContainer,
79		[in] spoolss_UserLevelCtr *pClientInfo,
80		[out] PRINTER_HANDLE *pHandle
81	);
82
83	/******************/
84	/* Function: 0x02 */
85
86	WERROR winspool_AsyncSetJob(
87		[in] PRINTER_HANDLE hPrinter,
88		[in] uint32 JobId,
89		[in, unique] spoolss_JobInfoContainer *pJobContainer,
90		[in] uint32 Command
91	);
92
93	/******************/
94	/* Function: 0x03 */
95
96	WERROR winspool_AsyncGetJob(
97		[in] PRINTER_HANDLE hPrinter,
98		[in] uint32 JobId,
99		[in] uint32 Level,
100		[in, out, unique, size_is(cbBuf)] uint8 *pJob,
101		[in] uint32 cbBuf,
102		[out] uint32 *pcbNeeded
103	);
104
105	/******************/
106	/* Function: 0x04 */
107
108	WERROR winspool_AsyncEnumJobs(
109		[in] PRINTER_HANDLE hPrinter,
110		[in] uint32 FirstJob,
111		[in] uint32 NoJobs,
112		[in] uint32 Level,
113		[in, out, unique, size_is(cbBuf)] uint8 *pJob,
114		[in] uint32 cbBuf,
115		[out] uint32 *pcbNeeded,
116		[out] uint32 *pcReturned
117	);
118
119	/******************/
120	/* Function: 0x05 */
121
122	WERROR winspool_AsyncAddJob(
123		[in] PRINTER_HANDLE hPrinter,
124		[in] uint32 Level,
125		[in, out, unique, size_is(cbBuf)] uint8 *pAddJob,
126		[in] uint32 cbBuf,
127		[out] uint32 *pcbNeeded
128	);
129
130	/******************/
131	/* Function: 0x06 */
132
133	WERROR winspool_AsyncScheduleJob(
134		[in] PRINTER_HANDLE hPrinter,
135		[in] uint32 JobId
136	);
137
138	/******************/
139	/* Function: 0x07 */
140
141	WERROR winspool_AsyncDeletePrinter(
142		[in] PRINTER_HANDLE hPrinter
143	);
144
145	/******************/
146	/* Function: 0x08 */
147
148	[public] WERROR winspool_AsyncSetPrinter(
149		[in] PRINTER_HANDLE hPrinter,
150		[in] spoolss_SetPrinterInfoCtr *pPrinterContainer,
151		[in] spoolss_DevmodeContainer *pDevModeContainer,
152		[in] sec_desc_buf *pSecurityContainer,
153		[in] uint32 Command
154	);
155
156	/******************/
157	/* Function: 0x09 */
158
159	[public] WERROR winspool_AsyncGetPrinter(
160		[in] PRINTER_HANDLE hPrinter,
161		[in] uint32 Level,
162		[in, out, unique, size_is(cbBuf)] uint8 *pPrinter,
163		[in] uint32 cbBuf,
164		[out] uint32 *pcbNeeded
165	);
166
167	/******************/
168	/* Function: 0x0a */
169
170	WERROR winspool_AsyncStartDocPrinter(
171		[in] PRINTER_HANDLE hPrinter,
172		[in] spoolss_DocumentInfoCtr *pDocInfoContainer,
173		[out] uint32 *pJobId
174	);
175
176	/******************/
177	/* Function: 0x0b */
178
179	WERROR winspool_AsyncStartPagePrinter(
180		[in] PRINTER_HANDLE hPrinter
181	);
182
183	/******************/
184	/* Function: 0x0c */
185
186	WERROR winspool_AsyncWritePrinter(
187		[in] PRINTER_HANDLE hPrinter,
188		[in, size_is(cbBuf)] uint8 *pBuf,
189		[in] uint32 cbBuf,
190		[out] uint32 *pcWritten
191	);
192
193	/******************/
194	/* Function: 0x0d */
195
196	WERROR winspool_AsyncEndPagePrinter(
197		[in] PRINTER_HANDLE hPrinter
198	);
199
200	/******************/
201	/* Function: 0x0e */
202
203	WERROR winspool_AsyncEndDocPrinter(
204		[in] PRINTER_HANDLE hPrinter
205	);
206
207	/******************/
208	/* Function: 0x0f */
209
210	WERROR winspool_AsyncAbortPrinter(
211		[in] PRINTER_HANDLE hPrinter
212	);
213
214	/******************/
215	/* Function: 0x10 */
216
217	[public] WERROR winspool_AsyncGetPrinterData(
218		[in] PRINTER_HANDLE hPrinter,
219		[in] [string,charset(UTF16)] uint16 *pValueName,
220		[out] uint32 *pType,
221		[out, size_is(nSize)] uint8 *pData,
222		[in] uint32 nSize,
223		[out] uint32 *pcbNeeded
224	);
225
226	/******************/
227	/* Function: 0x11 */
228
229	WERROR winspool_AsyncGetPrinterDataEx(
230		[in] PRINTER_HANDLE hPrinter,
231		[in] [string,charset(UTF16)] uint16 *pKeyName,
232		[in] [string,charset(UTF16)] uint16 *pValueName,
233		[out] uint32 *pType,
234		[out, size_is(nSize)] uint8 *pData,
235		[in] uint32 nSize,
236		[out] uint32 *pcbNeeded
237	);
238
239	/******************/
240	/* Function: 0x12 */
241
242	WERROR winspool_AsyncSetPrinterData(
243		[in] PRINTER_HANDLE hPrinter,
244		[in] [string,charset(UTF16)] uint16 *pValueName,
245		[in] uint32 Type,
246		[in, size_is(cbData)] uint8 *pData,
247		[in] uint32 cbData
248	);
249
250	/******************/
251	/* Function: 0x13 */
252
253	WERROR winspool_AsyncSetPrinterDataEx(
254		[in] PRINTER_HANDLE hPrinter,
255		[in] [string,charset(UTF16)] uint16 *pKeyName,
256		[in] [string,charset(UTF16)] uint16 *pValueName,
257		[in] uint32 Type,
258		[in, size_is(cbData)] uint8 *pData,
259		[in] uint32 cbData
260	);
261
262	/******************/
263	/* Function: 0x14 */
264
265	[public] WERROR winspool_AsyncClosePrinter(
266		[in, out] PRINTER_HANDLE *phPrinter
267	);
268
269	/******************/
270	/* Function: 0x15 */
271
272	WERROR winspool_AsyncAddForm(
273		[in] PRINTER_HANDLE hPrinter,
274		[in] spoolss_AddFormInfoCtr *pFormInfoContainer
275	);
276
277	/******************/
278	/* Function: 0x16 */
279
280	WERROR winspool_AsyncDeleteForm(
281		[in] PRINTER_HANDLE hPrinter,
282		[in] [string,charset(UTF16)] uint16 *pFormName
283	);
284
285	/******************/
286	/* Function: 0x17 */
287
288	WERROR winspool_AsyncGetForm(
289		[in] PRINTER_HANDLE hPrinter,
290		[in] [string,charset(UTF16)] uint16 *pFormName,
291		[in] uint32 Level,
292		[in, out, unique, size_is(cbBuf)] uint8 *pForm,
293		[in] uint32 cbBuf,
294		[out] uint32 *pcbNeeded
295	);
296
297	/******************/
298	/* Function: 0x18 */
299
300	WERROR winspool_AsyncSetForm(
301		[in] PRINTER_HANDLE hPrinter,
302		[in] [string,charset(UTF16)] uint16 *pFormName,
303		[in] spoolss_AddFormInfoCtr *pFormInfoContainer
304	);
305
306	/******************/
307	/* Function: 0x19 */
308
309	[public] WERROR winspool_AsyncEnumForms(
310		[in] PRINTER_HANDLE hPrinter,
311		[in] uint32 Level,
312		[in, out, unique, size_is(cbBuf)] uint8 *pForm,
313		[in]  uint32 cbBuf,
314		[out] uint32 *pcbNeeded,
315		[out] uint32 *pcReturned
316	);
317
318	/******************/
319	/* Function: 0x1a */
320
321	[public] WERROR winspool_AsyncGetPrinterDriver(
322		[in] PRINTER_HANDLE hPrinter,
323		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
324		[in] uint32 Level,
325		[in, out, unique, size_is(cbBuf)] uint8 *pDriver,
326		[in] uint32 cbBuf,
327		[out] uint32 *pcbNeeded,
328		[in] uint32 dwClientMajorVersion,
329		[in] uint32 dwClientMinorVersion,
330		[out] uint32 *pdwServerMaxVersion,
331		[out] uint32 *pdwServerMinVersion
332	);
333
334	/******************/
335	/* Function: 0x1b */
336
337	WERROR winspool_AsyncEnumPrinterData(
338		[in] PRINTER_HANDLE hPrinter,
339		[in] uint32 dwIndex,
340		[out, size_is(cbValueName/2)] uint16 *pValueName,
341		[in]  uint32 cbValueName,
342		[out] uint32 *pcbValueName,
343		[out] uint32 *pType,
344		[out, size_is(cbData)] uint8 *pData,
345		[in]  uint32 cbData,
346		[out] uint32 *pcbData
347	);
348
349	/******************/
350	/* Function: 0x1c */
351
352	[public] WERROR winspool_AsyncEnumPrinterDataEx(
353		[in]  PRINTER_HANDLE hPrinter,
354		[in] [string,charset(UTF16)] uint16 *pKeyName,
355		[out, size_is(cbEnumValues)] uint8 *pEnumValues,
356		[in]  uint32 cbEnumValues,
357		[out] uint32 *pcbEnumValues,
358		[out] uint32 *pnEnumValues
359	);
360
361	/******************/
362	/* Function: 0x1d */
363
364	[public] WERROR winspool_AsyncEnumPrinterKey(
365		[in] PRINTER_HANDLE hPrinter,
366		[in] [string,charset(UTF16)] uint16 *pKeyName,
367		[out, size_is(cbSubkey/2)] uint16 *pSubkey,
368		[in]  uint32 cbSubkey,
369		[out] uint32 *pcbSubkey
370	);
371
372	/******************/
373	/* Function: 0x1e */
374
375	WERROR winspool_AsyncDeletePrinterData(
376		[in] PRINTER_HANDLE hPrinter,
377		[in] [string,charset(UTF16)] uint16 *pValueName
378	);
379
380	/******************/
381	/* Function: 0x1f */
382
383	WERROR winspool_AsyncDeletePrinterDataEx(
384		[in] PRINTER_HANDLE hPrinter,
385		[in] [string,charset(UTF16)] uint16 *pKeyName,
386		[in] [string,charset(UTF16)] uint16 *pValueName
387	);
388
389	/******************/
390	/* Function: 0x20 */
391
392	WERROR winspool_AsyncDeletePrinterKey(
393		[in] PRINTER_HANDLE hPrinter,
394		[in] [string,charset(UTF16)] uint16 *pKeyName
395	);
396
397	/******************/
398	/* Function: 0x21 */
399
400	WERROR winspool_AsyncXcvData(
401		[in] PRINTER_HANDLE hXcv,
402		[in] [string,charset(UTF16)] uint16 *pszDataName,
403		[in, size_is(cbInputData)] uint8 *pInputData,
404		[in] uint32 cbInputData,
405		[out, size_is(cbOutputData)] uint8 *pOutputData,
406		[in] uint32 cbOutputData,
407		[out] uint32 *pcbOutputNeeded,
408		[in, out] uint32 *pdwStatus
409	);
410
411	/******************/
412	/* Function: 0x22 */
413
414	WERROR winspool_AsyncSendRecvBidiData (
415		[in] PRINTER_HANDLE hPrinter,
416		[in,unique] [string,charset(UTF16)] uint16 *pAction,
417		[in] RPC_BIDI_REQUEST_CONTAINER* pReqData,
418		[out] RPC_BIDI_RESPONSE_CONTAINER** ppRespData
419	);
420
421	/******************/
422	/* Function: 0x23 */
423
424	WERROR winspool_AsyncCreatePrinterIC(
425		[in] PRINTER_HANDLE hPrinter,
426		[out] GDI_HANDLE *pHandle,
427		[in] spoolss_DevmodeContainer *pDevModeContainer
428	);
429
430	/******************/
431	/* Function: 0x24 */
432
433	WERROR winspool_AsyncPlayGdiScriptOnPrinterIC(
434		[in] GDI_HANDLE hPrinterIC,
435		[in, size_is(cIn)] uint8 *pIn,
436		[in] uint32 cIn,
437		[out, size_is(cOut)] uint8 *pOut,
438		[in] uint32 cOut,
439		[in] uint32 ul
440	);
441
442	/******************/
443	/* Function: 0x25 */
444
445	WERROR winspool_AsyncDeletePrinterIC(
446		[in, out] GDI_HANDLE *phPrinterIC
447	);
448
449	/******************/
450	/* Function: 0x26 */
451
452	WERROR winspool_AsyncEnumPrinters(
453		[in] uint32 Flags,
454		[in,unique] [string,charset(UTF16)] uint16 *pName,
455		[in] uint32 Level,
456		[in, out, unique, size_is(cbBuf)] uint8 *pPrinterEnum,
457		[in]  uint32 cbBuf,
458		[out] uint32 *pcbNeeded,
459		[out] uint32 *pcReturned
460	);
461
462	/******************/
463	/* Function: 0x27 */
464
465	[public] WERROR winspool_AsyncAddPrinterDriver(
466		[in,unique] [string,charset(UTF16)] uint16 *pName,
467		[in] spoolss_AddDriverInfoCtr *pDriverContainer,
468		[in] uint32 dwFileCopyFlags
469	);
470
471	/******************/
472	/* Function: 0x28 */
473
474	WERROR winspool_AsyncEnumPrinterDrivers(
475		[in,unique] [string,charset(UTF16)] uint16 *pName,
476		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
477		[in] uint32 Level,
478		[in, out, unique, size_is(cbBuf)] uint8 *pDrivers,
479		[in] uint32 cbBuf,
480		[out] uint32 *pcbNeeded,
481		[out] uint32 *pcReturned
482	);
483
484	/******************/
485	/* Function: 0x29 */
486
487	[public] WERROR winspool_AsyncGetPrinterDriverDirectory(
488		[in,unique] [string,charset(UTF16)] uint16 *pName,
489		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
490		[in] uint32 Level,
491		[in, out, unique, size_is(cbBuf)] uint8 *pDriverDirectory,
492		[in] uint32 cbBuf,
493		[out] uint32 *pcbNeeded
494	);
495
496	/******************/
497	/* Function: 0x2a */
498
499	WERROR winspool_AsyncDeletePrinterDriver(
500		[in,unique] [string,charset(UTF16)] uint16 *pName,
501		[in] [string,charset(UTF16)] uint16 *pEnvironment,
502		[in] [string,charset(UTF16)] uint16 *pDriverName
503	);
504
505	/******************/
506	/* Function: 0x2b */
507
508	WERROR winspool_AsyncDeletePrinterDriverEx(
509		[in,unique] [string,charset(UTF16)] uint16 *pName,
510		[in] [string,charset(UTF16)] uint16 *pEnvironment,
511		[in] [string,charset(UTF16)] uint16 *pDriverName,
512		[in] uint32 dwDeleteFlag,
513		[in] uint32 dwVersionNum
514	);
515
516	/******************/
517	/* Function: 0x2c */
518
519	WERROR winspool_AsyncAddPrintProcessor(
520		[in,unique] [string,charset(UTF16)] uint16 *pName,
521		[in] [string,charset(UTF16)] uint16 *pEnvironment,
522		[in] [string,charset(UTF16)] uint16 *pPathName,
523		[in] [string,charset(UTF16)] uint16 *pPrintProcessorName
524	);
525
526	/******************/
527	/* Function: 0x2d */
528
529	WERROR winspool_AsyncEnumPrintProcessors(
530		[in,unique] [string,charset(UTF16)] uint16 *pName,
531		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
532		[in] uint32 Level,
533		[in, out, unique, size_is(cbBuf)] uint8 *pPrintProcessorInfo,
534		[in] uint32 cbBuf,
535		[out] uint32 *pcbNeeded,
536		[out] uint32 *pcReturned
537	);
538
539	/******************/
540	/* Function: 0x2e */
541
542	WERROR winspool_AsyncGetPrintProcessorDirectory(
543		[in,unique] [string,charset(UTF16)] uint16 *pName,
544		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
545		[in] uint32 Level,
546		[in, out, unique, size_is(cbBuf)] uint8 *pPrintProcessorDirectory,
547		[in] uint32 cbBuf,
548		[out] uint32 *pcbNeeded
549	);
550
551	/******************/
552	/* Function: 0x2f */
553
554	WERROR winspool_AsyncEnumPorts(
555		[in,unique] [string,charset(UTF16)] uint16 *pName,
556		[in] uint32 Level,
557		[in, out, unique, size_is(cbBuf)] uint8 *pPort,
558		[in]  uint32 cbBuf,
559		[out] uint32 *pcbNeeded,
560		[out] uint32 *pcReturned
561	);
562
563	/******************/
564	/* Function: 0x30 */
565
566	WERROR winspool_AsyncEnumMonitors(
567		[in,unique] [string,charset(UTF16)] uint16 *pName,
568		[in] uint32 Level,
569		[in, out, unique, size_is(cbBuf)] uint8 *pMonitor,
570		[in]  uint32 cbBuf,
571		[out] uint32 *pcbNeeded,
572		[out] uint32 *pcReturned
573	);
574
575	/******************/
576	/* Function: 0x31 */
577
578	WERROR winspool_AsyncAddPort(
579		[in,unique] [string,charset(UTF16)] uint16 *pName,
580		[in] spoolss_SetPortInfoContainer *pPortContainer,
581		[in] spoolss_PortVarContainer *pPortVarContainer,
582		[in] [string,charset(UTF16)] uint16 *pMonitorName
583	);
584
585	/******************/
586	/* Function: 0x32 */
587
588	WERROR winspool_AsyncSetPort(
589		[in,unique] [string,charset(UTF16)] uint16 *pName,
590		[in,unique] [string,charset(UTF16)] uint16 *pPortName,
591		[in] spoolss_SetPortInfoContainer *pPortContainer
592	);
593
594	/******************/
595	/* Function: 0x33 */
596
597	WERROR winspool_AsyncAddMonitor(
598		[in,unique] [string,charset(UTF16)] uint16 *Name,
599		[in] spoolss_MonitorContainer *pMonitorContainer
600	);
601
602	/******************/
603	/* Function: 0x34 */
604
605	WERROR winspool_AsyncDeleteMonitor(
606		[in,unique] [string,charset(UTF16)] uint16 *Name,
607		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
608		[in] [string,charset(UTF16)] uint16 *pMonitorName
609	);
610
611	/******************/
612	/* Function: 0x35 */
613
614	WERROR winspool_AsyncDeletePrintProcessor(
615		[in,unique] [string,charset(UTF16)] uint16 *Name,
616		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
617		[in] [string,charset(UTF16)] uint16 *pPrintProcessorName
618	);
619
620	/******************/
621	/* Function: 0x36 */
622
623	WERROR winspool_AsyncEnumPrintProcessorDatatypes(
624		[in,unique] [string,charset(UTF16)] uint16 *pName,
625		[in,unique] [string,charset(UTF16)] uint16 *pPrintProcessorName,
626		[in] uint32 Level,
627		[in, out, unique, size_is(cbBuf)] uint8 *pDatatypes,
628		[in]  uint32 cbBuf,
629		[out] uint32 *pcbNeeded,
630		[out] uint32 *pcReturned
631	);
632
633	/******************/
634	/* Function: 0x37 */
635
636	WERROR winspool_AsyncAddPerMachineConnection(
637		[in,unique] [string,charset(UTF16)] uint16 *pServer,
638		[in] [string,charset(UTF16)] uint16 *pPrinterName,
639		[in] [string,charset(UTF16)] uint16 *pPrintServer,
640		[in] [string,charset(UTF16)] uint16 *pProvider
641	);
642
643	/******************/
644	/* Function: 0x38 */
645
646	WERROR winspool_AsyncDeletePerMachineConnection(
647		[in,unique] [string,charset(UTF16)] uint16 *pServer,
648		[in] [string,charset(UTF16)] uint16 *pPrinterName
649	);
650
651	/******************/
652	/* Function: 0x39 */
653
654	WERROR winspool_AsyncEnumPerMachineConnections(
655		[in,unique] [string,charset(UTF16)] uint16 *pServer,
656		[in, out, unique, size_is(cbBuf)] uint8 *pPrinterEnum,
657		[in]  uint32 cbBuf,
658		[out] uint32 *pcbNeeded,
659		[out] uint32 *pcReturned
660	);
661
662	/******************/
663	/* Function: 0x3a */
664
665	typedef enum {
666		winspool_PropertyTypeString = 1,
667		winspool_PropertyTypeInt32 = 2,
668		winspool_PropertyTypeInt64 = 3,
669		winspool_PropertyTypeByte = 4,
670		winspool_PropertyTypeTime = 5,
671		winspool_PropertyTypeDevMode = 6,
672		winspool_PropertyTypeSD = 7,
673		winspool_PropertyTypeNotificationReply = 8,
674		winspool_PropertyTypeNotificationOptions = 9
675	} winspool_PrintPropertyType;
676
677	typedef [ms_union,switch_type(winspool_PrintPropertyType)] union {
678		[case(winspool_PropertyTypeString)]	[string,charset(UTF16)] uint16 *propertyString;
679		[case(winspool_PropertyTypeInt32)]	uint32 propertyInt32;
680		[case(winspool_PropertyTypeInt64)]	hyper propertyInt64;
681		[case(winspool_PropertyTypeByte)]	uint8 propertyByte;
682		[case(winspool_PropertyTypeTime)]	spoolss_TimeCtr propertyTimeContainer;
683		[case(winspool_PropertyTypeDevMode)]	spoolss_DevmodeContainer propertyDevModeContainer;
684		[case(winspool_PropertyTypeSD)]		sec_desc_buf propertySDContainer;
685		[case(winspool_PropertyTypeNotificationReply)]	winspool_NOTIFY_REPLY_CONTAINER propertyReplyContainer;
686		[case(winspool_PropertyTypeNotificationOptions)] winspool_NOTIFY_OPTIONS_CONTAINER propertyOptionsContainer;
687	} winspool_PrintPropertyValueUnion;
688
689	typedef struct {
690		winspool_PrintPropertyType PropertyType;
691		[switch_is(PropertyType)] winspool_PrintPropertyValueUnion value;
692	} winspool_PrintPropertyValue;
693
694	typedef struct {
695		[string,charset(UTF16)] uint16 *propertyName;
696		winspool_PrintPropertyValue propertyValue;
697	} winspool_PrintNamedProperty;
698
699	typedef struct {
700		[range(0,50)] uint32 numberOfProperties;
701		[size_is(numberOfProperties), unique] winspool_PrintNamedProperty *propertiesCollection;
702	} winspool_PrintPropertiesCollection;
703
704	[public] HRESULT winspool_SyncRegisterForRemoteNotifications(
705		[in]    PRINTER_HANDLE                  hPrinter,
706		[in]    winspool_PrintPropertiesCollection *pNotifyFilter,
707		[out]   RMTNTFY_HANDLE                 *phRpcHandle
708	);
709
710	/******************/
711	/* Function: 0x3b */
712
713	HRESULT winspool_SyncUnRegisterForRemoteNotifications(
714		[in, out]   RMTNTFY_HANDLE             *phRpcHandle
715	);
716
717	/******************/
718	/* Function: 0x3c */
719
720	HRESULT winspool_SyncRefreshRemoteNotifications(
721		[in]    RMTNTFY_HANDLE                  hRpcHandle,
722		[in]    winspool_PrintPropertiesCollection *pNotifyFilter,
723		[out]   winspool_PrintPropertiesCollection **ppNotifyData
724	);
725
726	/******************/
727	/* Function: 0x3d */
728
729	HRESULT winspool_AsyncGetRemoteNotifications(
730		[in]    RMTNTFY_HANDLE                  hRpcHandle,
731		[out]   winspool_PrintPropertiesCollection **ppNotifyData
732	);
733
734	/******************/
735	/* Function: 0x3e */
736
737	typedef [bitmap32bit] bitmap {
738		IPDFP_FLAG_NONE			= 0x00000000,
739		IPDFP_COPY_ALL_FILES		= 0x00000001
740	} winspool_InstallPrinterDriverFromPackageFlags;
741
742	HRESULT winspool_AsyncInstallPrinterDriverFromPackage(
743		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
744		[in,unique] [string,charset(UTF16)] uint16 *pszInfPath,
745		[in] [string,charset(UTF16)] uint16 *pszDriverName,
746		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
747		[in] winspool_InstallPrinterDriverFromPackageFlags dwFlags
748	);
749
750	/******************/
751	/* Function: 0x3f */
752
753	typedef [bitmap32bit] bitmap {
754		UPDP_FLAG_NONE		= 0x00000000,
755		UPDP_UPLOAD_ALWAYS	= 0x00000002,
756		UPDP_CHECK_DRIVERSTORE	= 0x00000004
757	} winspool_UploadPrinterDriverPackageFlags;
758
759	HRESULT winspool_AsyncUploadPrinterDriverPackage(
760		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
761		[in] [string,charset(UTF16)] uint16 *pszInfPath,
762		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
763		[in] winspool_UploadPrinterDriverPackageFlags dwFlags,
764		[in, out, unique, size_is(*pcchDestInfPath)] [charset(UTF16)] uint16 *pszDestInfPath,
765		[in, out]                  uint32 *pcchDestInfPath
766	);
767
768	/******************/
769	/* Function: 0x40 */
770
771	[public] HRESULT winspool_AsyncGetCorePrinterDrivers(
772		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
773		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
774		[in]                       uint32     cchCoreDrivers,
775		[in, size_is(cchCoreDrivers)]  uint16 *pszzCoreDriverDependencies,
776		[in]                       uint32     cCorePrinterDrivers,
777		[out, size_is(cCorePrinterDrivers)]  spoolss_CorePrinterDriver *pCorePrinterDrivers
778	);
779
780	/******************/
781	/* Function: 0x41 */
782
783	HRESULT winspool_AsyncCorePrinterDriverInstalled(
784		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
785		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
786		[in]                       GUID      CoreDriverGUID,
787		[in]                       NTTIME  ftDriverDate,
788		[in]                       hyper dwlDriverVersion,
789		[out]       int *pbDriverInstalled
790	);
791
792	/******************/
793	/* Function: 0x42 */
794
795	HRESULT winspool_AsyncGetPrinterDriverPackagePath(
796		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
797		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
798		[in,unique] [string,charset(UTF16)] uint16 *pszLanguage,
799		[in] [string,charset(UTF16)] uint16 *pszPackageID,
800		[in, out, unique, size_is(cchDriverPackageCab)]  uint16 *pszDriverPackageCab,
801		[in]                       uint32  cchDriverPackageCab,
802		[out]                      uint32 *pcchRequiredSize
803	);
804
805	/******************/
806	/* Function: 0x43 */
807
808	HRESULT winspool_AsyncDeletePrinterDriverPackage(
809		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
810		[in] [string,charset(UTF16)] uint16 *pszInfPath,
811		[in] [string,charset(UTF16)] uint16 *pszEnvironment
812	);
813
814	/******************/
815	/* Function: 0x44 */
816
817	WERROR winspool_AsyncReadPrinter(
818		[in]                    PRINTER_HANDLE  hPrinter,
819		[out, size_is(cbBuf)]   uint8 *pBuf,
820		[in]                    uint32           cbBuf,
821		[out]                   uint32 *pcNoBytesRead
822	);
823
824	/******************/
825	/* Function: 0x45 */
826
827	WERROR winspool_AsyncResetPrinter(
828		[in]                    PRINTER_HANDLE     hPrinter,
829		[in,unique] [string,charset(UTF16)] uint16 *pDatatype,
830		[in]                    spoolss_DevmodeContainer *pDevModeContainer
831	);
832
833	/******************/
834	/* Function: 0x46 */
835
836	WERROR winspool_AsyncGetJobNamedPropertyValue(
837		[in] PRINTER_HANDLE hPrinter,
838		[in] uint32 JobId,
839		[in] [string,charset(UTF16)] uint16 *pszName,
840		[out] spoolss_PrintPropertyValue *pValue
841	);
842
843	/******************/
844	/* Function: 0x47 */
845
846	[public] WERROR winspool_AsyncSetJobNamedProperty(
847		[in] PRINTER_HANDLE hPrinter,
848		[in] uint32 JobId,
849		[in] spoolss_PrintNamedProperty *pProperty
850	);
851
852	/******************/
853	/* Function: 0x48 */
854
855	WERROR winspool_AsyncDeleteJobNamedProperty(
856		[in] PRINTER_HANDLE hPrinter,
857		[in] uint32 JobId,
858		[in] [string,charset(UTF16)] uint16 *pszName
859	);
860
861	/******************/
862	/* Function: 0x49 */
863
864	WERROR winspool_AsyncEnumJobNamedProperties(
865		[in] PRINTER_HANDLE hPrinter,
866		[in] uint32 JobId,
867		[out] uint32 *pcProperties,
868		[out, size_is(,*pcProperties)] spoolss_PrintNamedProperty **ppProperties
869	);
870
871	/******************/
872	/* Function: 0x4a */
873
874	WERROR winspool_AsyncLogJobInfoForBranchOffice(
875		[in] PRINTER_HANDLE hPrinter,
876		[in,ref] spoolss_BranchOfficeJobDataContainer *pBranchOfficeJobDataContainer
877	);
878}
879