1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
23 */
24
25#ifndef _SPOOLSS_NDL_
26#define	_SPOOLSS_NDL_
27
28#include "ndrtypes.ndl"
29#include "security.ndl"
30
31#define TABLE_STRING 1
32#define TABLE_DWORD  2
33#define TABLE_TIME   3
34#define TABLE_DEVMODE 4
35#define TABLE_SECURITY_DESCRIPTOR 5
36
37#define SPOOLSS_OPNUM_OpenPrinter			0x01
38#define SPOOLSS_OPNUM_GetJob				0x03
39#define SPOOLSS_OPNUM_EnumJobs				0x04
40#define SPOOLSS_OPNUM_DeletePrinter			0x06
41#define SPOOLSS_OPNUM_GetPrinter			0x08
42#define SPOOLSS_OPNUM_GetPrinterDriver			0x0b
43#define SPOOLSS_OPNUM_DeletePrinterDriver		0x0d
44#define SPOOLSS_OPNUM_StartDocPrinter			0x11
45#define SPOOLSS_OPNUM_StartPagePrinter			0x12
46#define SPOOLSS_OPNUM_WritePrinter			0x13
47#define SPOOLSS_OPNUM_EndPagePrinter			0x14
48#define SPOOLSS_OPNUM_AbortPrinter			0x15
49#define SPOOLSS_OPNUM_AddJob				0x18
50#define SPOOLSS_OPNUM_ScheduleJob			0x19
51#define SPOOLSS_OPNUM_GetPrinterData			0x1a
52#define SPOOLSS_OPNUM_ClosePrinter			0x1d
53#define SPOOLSS_OPNUM_EndDocPrinter			0x17
54#define SPOOLSS_OPNUM_EnumForms				0x22
55#define SPOOLSS_OPNUM_CreatePrinterIC			0x28
56#define SPOOLSS_OPNUM_ResetPrinter			0x34
57#define SPOOLSS_OPNUM_GetPrinterDriver2			0x35
58#define SPOOLSS_OPNUM_FCPN				0x38
59#define SPOOLSS_OPNUM_ReplyOpenPrinter			0x3a
60#define SPOOLSS_OPNUM_ReplyClosePrinter			0x3c
61#define SPOOLSS_OPNUM_RFFPCNEX				0x41
62#define SPOOLSS_OPNUM_RRPCN				0x42
63#define SPOOLSS_OPNUM_RFNPCNEX				0x43
64#define SPOOLSS_OPNUM_OpenPrinterEx			0x45
65#define SPOOLSS_OPNUM_EnumPrinterData			0x48
66#define SPOOLSS_OPNUM_EnumPrinterDataEx			0x4f
67#define SPOOLSS_OPNUM_EnumPrinterKey			0x50
68
69CONTEXT_HANDLE(spoolss_handle) spoolss_handle_t;
70
71struct spoolssDevmodeContainer {
72	BYTE 	DevContCount;
73  SIZE_IS(DevContCount)
74  	BYTE	*DevMode;
75};
76
77
78struct spoolss_DeviceMode {
79	BYTE devicename[64];
80	WORD specversion;
81	WORD driverversion;
82	WORD size;
83	WORD driverextra_length;
84	DWORD	fields;
85	WORD orientation;
86	WORD papersize;
87	WORD paperlength;
88	WORD paperwidth;
89	WORD scale;
90	WORD copies;
91	WORD defaultsource;
92	WORD printquality;
93	WORD color;
94	WORD duplex;
95	WORD yresolution;
96	WORD ttoption;
97	WORD collate;
98	BYTE formname[64];
99	WORD logpixels;
100	DWORD	bitsperpel;
101	DWORD	pelswidth;
102	DWORD	pelsheight;
103	DWORD	displayflags;
104	DWORD	displayfrequency;
105	DWORD	icmmethod;
106	DWORD	icmintent;
107	DWORD	mediatype;
108	DWORD	dithertype;
109	DWORD	reserved1;
110	DWORD	reserved2;
111	DWORD	panningwidth;
112	DWORD	panningheight;
113	struct spoolssDevmodeContainer driverextra_data;
114};
115
116OPERATION(SPOOLSS_OPNUM_CreatePrinterIC)
117struct spoolss_CreatePrinterIC {
118	IN	spoolss_handle_t handle;
119	OUT	spoolss_handle_t gdi_handle;
120	IN	struct spoolssDevmodeContainer dmodeContainer;
121	OUT	DWORD status;
122};
123
124OPERATION(SPOOLSS_OPNUM_OpenPrinter)
125struct spoolss_OpenPrinter {
126	IN	LPTSTR printer_name;
127	OUT	spoolss_handle_t handle;
128	IN	LPTSTR data_type;
129	IN	struct spoolssDevmodeContainer dmodeContainer;
130	IN	DWORD AccessRequired;
131	OUT	DWORD status;
132};
133
134OPERATION(SPOOLSS_OPNUM_EnumJobs)
135struct spoolss_EnumJobs {
136	IN	spoolss_handle_t handle;
137	IN	DWORD FirstJob;
138	IN	DWORD NoJobs;
139	IN	DWORD level;
140	IN	DWORD Buf2;
141	IN	DWORD 	BufCount;
142		SIZE_IS(BufCount)
143  	OUT		BYTE *pJob;
144	OUT	DWORD needed;
145	OUT	DWORD needed2;
146	OUT	DWORD status;
147};
148
149OPERATION(SPOOLSS_OPNUM_DeletePrinter)
150struct spoolss_DeletePrinter {
151	IN	DWORD dontcare;
152	OUT	DWORD status;
153};
154
155#define SPOOLSS_ARCHITECTURE_NT_X86	( "Windows NT x86" )
156struct spoolss_Time {
157	WORD year;
158	WORD month;
159	WORD day_of_week;
160	WORD day;
161	WORD hour;
162	WORD minute;
163	WORD second;
164	WORD millisecond;
165};
166
167struct spoolss_GetPrinter0 {
168	DWORD printername;
169	DWORD servername;
170	DWORD cjobs;
171	DWORD total_jobs;
172	DWORD total_bytes;
173	DWORD time0;
174	DWORD time1;
175	DWORD time2;
176	DWORD time3;
177	DWORD global_counter;
178	DWORD total_pages;
179	DWORD version;
180	DWORD ffreebuild;
181	DWORD cspooling;
182	DWORD cmaxspooling;
183	DWORD session_counter;
184	DWORD out_of_paper;
185	DWORD not_ready;
186	DWORD job_error;
187	DWORD num_processors;
188	DWORD type_processor;
189	DWORD high_part_total_bytes;
190	DWORD change_id;
191	DWORD last_error;
192	DWORD status;
193	DWORD enum_network_printers;
194	DWORD c_setprinter;
195	WORD processor_arch;
196	WORD processor_level;
197	DWORD ref;
198	DWORD reserved2;
199	DWORD reserved3;
200};
201
202/* bitmap spoolss_EnumPrinterFlags */
203#define PRINTER_ENUM_DEFAULT ( 0x00000001 )
204#define PRINTER_ENUM_LOCAL ( 0x00000002 )
205#define PRINTER_ENUM_CONNECTIONS ( 0x00000004 )
206#define PRINTER_ENUM_FAVORITE ( 0x00000004 )
207#define PRINTER_ENUM_NAME ( 0x00000008 )
208#define PRINTER_ENUM_REMOTE ( 0x00000010 )
209#define PRINTER_ENUM_SHARED ( 0x00000020 )
210#define PRINTER_ENUM_NETWORK ( 0x00000040 )
211#define PRINTER_ENUM_EXPAND ( 0x00004000 )
212#define PRINTER_ENUM_CONTAINER ( 0x00008000 )
213#define PRINTER_ENUM_ICON1 ( 0x00010000 )
214#define PRINTER_ENUM_ICON2 ( 0x00020000 )
215#define PRINTER_ENUM_ICON3 ( 0x00040000 )
216#define PRINTER_ENUM_ICON4 ( 0x00080000 )
217#define PRINTER_ENUM_ICON5 ( 0x00100000 )
218#define PRINTER_ENUM_ICON6 ( 0x00200000 )
219#define PRINTER_ENUM_ICON7 ( 0x00400000 )
220#define PRINTER_ENUM_ICON8 ( 0x00800000 )
221#define PRINTER_ENUM_HIDE ( 0x01000000 )
222
223struct spoolss_GetPrinter1 {
224	DWORD flags;
225	DWORD name;
226	DWORD description;
227	DWORD comment;
228};
229
230/* bitmap spoolss_PrinterAttributes */
231#define PRINTER_ATTRIBUTE_QUEUED ( 0x00000001 )
232#define PRINTER_ATTRIBUTE_DIRECT ( 0x00000002 )
233#define PRINTER_ATTRIBUTE_DEFAULT ( 0x00000004 )
234#define PRINTER_ATTRIBUTE_SHARED ( 0x00000008 )
235#define PRINTER_ATTRIBUTE_NETWORK ( 0x00000010 )
236#define PRINTER_ATTRIBUTE_HIDDEN ( 0x00000020 )
237#define PRINTER_ATTRIBUTE_LOCAL ( 0x00000040 )
238#define PRINTER_ATTRIBUTE_ENABLE_DEVQ ( 0x00000080 )
239#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS ( 0x00000100 )
240#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST ( 0x00000200 )
241#define PRINTER_ATTRIBUTE_WORK_OFFLINE ( 0x00000400 )
242#define PRINTER_ATTRIBUTE_ENABLE_BIDI ( 0x00000800 )
243#define PRINTER_ATTRIBUTE_RAW_ONLY ( 0x00001000 )
244#define PRINTER_ATTRIBUTE_PUBLISHED ( 0x00002000 )
245#define PRINTER_ATTRIBUTE_FAX ( 0x00004000 )
246#define PRINTER_ATTRIBUTE_TS ( 0x00008000 )
247
248/* bitmap spoolss_PrinterStatus */
249#define PRINTER_STATUS_PAUSED ( 0x00000001 )
250#define PRINTER_STATUS_ERROR ( 0x00000002 )
251#define PRINTER_STATUS_PENDING_DELETION ( 0x00000004 )
252#define PRINTER_STATUS_PAPER_JAM ( 0x00000008 )
253#define PRINTER_STATUS_PAPER_OUT ( 0x00000010 )
254#define PRINTER_STATUS_MANUAL_FEED ( 0x00000020 )
255#define PRINTER_STATUS_PAPER_PROBLEM ( 0x00000040 )
256#define PRINTER_STATUS_OFFLINE ( 0x00000080 )
257#define PRINTER_STATUS_IO_ACTIVE ( 0x00000100 )
258#define PRINTER_STATUS_BUSY ( 0x00000200 )
259#define PRINTER_STATUS_PRINTING ( 0x00000400 )
260#define PRINTER_STATUS_OUTPUT_BIN_FULL ( 0x00000800 )
261#define PRINTER_STATUS_NOT_AVAILABLE ( 0x00001000 )
262#define PRINTER_STATUS_WAITING ( 0x00002000 )
263#define PRINTER_STATUS_PROCESSING ( 0x00004000 )
264#define PRINTER_STATUS_INITIALIZING ( 0x00008000 )
265#define PRINTER_STATUS_WARMING_UP ( 0x00010000 )
266#define PRINTER_STATUS_TONER_LOW ( 0x00020000 )
267#define PRINTER_STATUS_NO_TONER ( 0x00040000 )
268#define PRINTER_STATUS_PAGE_PUNT ( 0x00080000 )
269#define PRINTER_STATUS_USER_INTERVENTION ( 0x00100000 )
270#define PRINTER_STATUS_OUT_OF_MEMORY ( 0x00200000 )
271#define PRINTER_STATUS_DOOR_OPEN ( 0x00400000 )
272#define PRINTER_STATUS_SERVER_UNKNOWN ( 0x00800000 )
273#define PRINTER_STATUS_POWER_SAVE ( 0x01000000 )
274
275struct spoolss_GetPrinter2 {
276	DWORD servername;
277	DWORD printername;
278	DWORD sharename;
279	DWORD portname;
280	DWORD drivername;
281	DWORD comment;
282	DWORD location;
283	DWORD devmode;
284	DWORD sepfile;
285	DWORD printprocessor;
286	DWORD datatype;
287	DWORD parameters;
288	DWORD secdesc;
289	DWORD attributes;
290	DWORD priority;
291	DWORD defaultpriority;
292	DWORD starttime;
293	DWORD untiltime;
294	DWORD status;
295	DWORD cjobs;
296	DWORD averageppm;
297};
298
299typedef struct spoolss_GetPrinter2 spoolss_GetPrinter2_t;
300
301struct spoolss_GetPrinter3 {
302	DWORD dummy;
303};
304
305struct spoolss_GetPrinter4 {
306	DWORD printername;
307	DWORD servername;
308	DWORD attributes;
309};
310
311struct spoolss_GetPrinter5 {
312	DWORD printername;
313	DWORD portname;
314	DWORD attributes;
315	DWORD device_not_selected_timeout;
316	DWORD transmission_retry_timeout;
317};
318
319struct spoolss_GetPrinter6 {
320	DWORD status;
321};
322
323/* bitmap spoolss_DsPrintAction */
324#define DSPRINT_PUBLISH ( 0x00000001 )
325#define DSPRINT_UPDATE ( 0x00000002 )
326#define DSPRINT_UNPUBLISH ( 0x00000004 )
327#define DSPRINT_REPUBLISH ( 0x00000008 )
328#define DSPRINT_PENDING ( 0x80000000 )
329
330struct spoolss_GetPrinter7 {
331	DWORD guid;
332	DWORD action;
333};
334
335struct spoolss_GetPrinter8 {
336	DWORD flags;
337	DWORD name;
338	DWORD description;
339	DWORD comment;
340};
341
342union spoolss_GetPrinter_result_u {
343	UNION_INFO_ENT(0, spoolss_GetPrinter);
344	UNION_INFO_ENT(1, spoolss_GetPrinter);
345	UNION_INFO_ENT(2, spoolss_GetPrinter);
346	UNION_INFO_ENT(3, spoolss_GetPrinter);
347	UNION_INFO_ENT(4, spoolss_GetPrinter);
348	UNION_INFO_ENT(5, spoolss_GetPrinter);
349	UNION_INFO_ENT(6, spoolss_GetPrinter);
350	UNION_INFO_ENT(7, spoolss_GetPrinter);
351	UNION_INFO_ENT(8, spoolss_GetPrinter);
352	DEFAULT char *nullptr;
353};
354
355struct spoolss_GetPrinter_result {
356	DWORD switch_value;
357	SWITCH(switch_value)
358		union spoolss_GetPrinter_result_u ru;
359};
360
361struct spoolss_RPC_V2_NOTIFY_OPTIONS_TYPE {
362	WORD type;
363	WORD reserved0;
364	DWORD reserved1;
365	DWORD reserved2;
366	DWORD count;
367	SIZE_IS(count)
368		WORD *pFields;
369};
370
371struct spoolss_RPC_V2_NOTIFY_OPTIONS {
372	DWORD version;
373	DWORD reserved;
374	DWORD count;
375	SIZE_IS(count)
376		struct spoolss_RPC_V2_NOTIFY_OPTIONS_TYPE *ptypes;
377};
378
379struct SYSTEMTIME {
380	WORD year;
381	WORD month;
382	WORD dayofweek;
383	WORD day;
384	WORD hour;
385	WORD minute;
386	WORD second;
387	WORD millisecs;
388};
389
390struct SECURITY_CONTAINER {
391	DWORD count;
392	SIZE_IS(count)
393		BYTE *psecurity;
394};
395
396struct SYSTEMTIME_CONTAINER {
397	DWORD count;
398	struct SYSTEMTIME *psystemtime;
399};
400
401struct STRING_CONTAINER {
402	DWORD count;
403	SIZE_IS(count / 2)
404		LPTSTR pstring;
405};
406
407union spoolss_RPC_V2_NOTIFY_INFO_DATA_DATA {
408	CASE(TABLE_STRING)
409		struct STRING_CONTAINER pcont;
410	CASE(TABLE_DWORD)
411		DWORD data[2];
412	CASE(TABLE_TIME)
413		struct SYSTEMTIME_CONTAINER system_time;
414	CASE(TABLE_DEVMODE)
415		struct spoolssDevmodeContainer devmode;
416	CASE(TABLE_SECURITY_DESCRIPTOR)
417		struct SECURITY_CONTAINER security_descriptor;
418};
419
420struct spoolss_RPC_V2_NOTIFY_INFO_DATA {
421	WORD Type;
422	WORD Field;
423	DWORD Reserved;
424	DWORD Id;
425	SWITCH(Reserved & 0x0000FFFF)
426		union spoolss_RPC_V2_NOTIFY_INFO_DATA_DATA data;
427};
428
429struct spoolss_RPC_V2_NOTIFY_INFO {
430	DWORD Version;
431	DWORD Flags;
432	DWORD Count;
433	SIZE_IS(Count)
434		struct spoolss_RPC_V2_NOTIFY_INFO_DATA *aData;
435};
436
437OPERATION(SPOOLSS_OPNUM_GetPrinter)
438struct spoolss_GetPrinter {
439	IN	spoolss_handle_t handle;
440	IN 	DWORD 	switch_value;
441  	IN	DWORD   Buf2;
442	IN	DWORD 	BufCount;
443		SIZE_IS(BufCount)
444  	OUT		BYTE *Buf;
445	OUT	DWORD needed;
446	OUT	DWORD status;
447};
448
449OPERATION(SPOOLSS_OPNUM_GetPrinterData)
450struct spoolss_GetPrinterData {
451	IN	spoolss_handle_t handle;
452	IN	REFERENCE LPTSTR pValueName;
453	OUT	DWORD pType;
454		SIZE_IS(Size)
455   	OUT	LPBYTE Buf;
456	IN	DWORD Size;
457	OUT	DWORD Needed;
458	OUT	DWORD status;
459};
460
461OPERATION(SPOOLSS_OPNUM_GetPrinterDriver)
462struct spoolss_GetPrinterDriver {
463	IN	DWORD dontcare;
464	OUT	DWORD status;
465};
466
467OPERATION(SPOOLSS_OPNUM_DeletePrinterDriver)
468struct spoolss_DeletePrinterDriver {
469	IN	DWORD dontcare;
470	OUT	DWORD status;
471};
472
473struct spoolss_DocInfo {
474	LPTSTR doc_name;
475	LPTSTR printer_name;
476	LPTSTR type;
477};
478typedef struct spoolss_DocInfo spoolss_DocInfo_t;
479
480struct spoolss_DocInfo_Container {
481	DWORD level;
482	DWORD switch_value;
483	spoolss_DocInfo_t *DocInfoContainer;
484};
485typedef struct spoolss_DocInfo_Container spoolss_DocInfo_Container_t;
486
487OPERATION(SPOOLSS_OPNUM_StartDocPrinter)
488struct spoolss_StartDocPrinter {
489	IN	spoolss_handle_t handle;
490	IN	spoolss_DocInfo_Container_t dinfo;
491	OUT	DWORD JobId;
492	OUT	DWORD status;
493};
494
495OPERATION(SPOOLSS_OPNUM_AbortPrinter)
496struct spoolss_AbortPrinter {
497	IN	spoolss_handle_t handle;
498	OUT	DWORD status;
499};
500
501OPERATION(SPOOLSS_OPNUM_ResetPrinter)
502struct spoolss_ResetPrinter {
503	IN	spoolss_handle_t handle;
504	OUT	DWORD status;
505};
506
507OPERATION(SPOOLSS_OPNUM_StartPagePrinter)
508struct spoolss_StartPagePrinter {
509	IN	spoolss_handle_t handle;
510	OUT	DWORD status;
511};
512
513OPERATION(SPOOLSS_OPNUM_EndPagePrinter)
514struct spoolss_EndPagePrinter {
515	IN	spoolss_handle_t handle;
516	OUT	DWORD status;
517};
518
519OPERATION(SPOOLSS_OPNUM_WritePrinter)
520struct spoolss_WritePrinter {
521	IN	spoolss_handle_t handle;
522	IN	DWORD BufCount;
523		SIZE_IS(BufCount)
524  	IN	REFERENCE LPBYTE pBuf;
525	OUT	DWORD written;
526	OUT	DWORD status;
527};
528
529OPERATION(SPOOLSS_OPNUM_ScheduleJob)
530struct spoolss_ScheduleJob {
531	IN	spoolss_handle_t handle;
532	IN 	DWORD 	JobId;
533	OUT	DWORD status;
534};
535
536OPERATION(SPOOLSS_OPNUM_GetJob)
537struct spoolss_GetJob {
538	IN	spoolss_handle_t handle;
539	IN 	DWORD 	JobId;
540	IN	DWORD 	level;
541		SIZE_IS(BufCount)
542  	INOUT		BYTE *pJob;
543	IN	DWORD BufCount;
544	OUT	DWORD needed;
545	OUT	DWORD status;
546};
547
548OPERATION(SPOOLSS_OPNUM_AddJob)
549struct spoolss_AddJob {
550	IN	spoolss_handle_t handle;
551	IN 	DWORD 	level;
552  	IN	DWORD   Buf2;
553	IN	DWORD 	BufCount;
554		SIZE_IS(BufCount)
555  	OUT		BYTE *pAddJob;
556	OUT	DWORD needed;
557	OUT	DWORD status;
558};
559
560OPERATION(SPOOLSS_OPNUM_ClosePrinter)
561struct spoolss_ClosePrinter {
562	IN	spoolss_handle_t handle;
563	OUT	spoolss_handle_t result_handle;
564	OUT	DWORD status;
565};
566
567OPERATION(SPOOLSS_OPNUM_EndDocPrinter)
568struct spoolss_EndDocPrinter {
569	IN	spoolss_handle_t handle;
570	OUT	DWORD status;
571};
572
573OPERATION(SPOOLSS_OPNUM_EnumForms)
574struct spoolss_EnumForms {
575	IN	spoolss_handle_t handle;
576	IN 	DWORD 	level;
577	IN	DWORD 	BufCount;
578		SIZE_IS(BufCount)
579  	INOUT		BYTE *pEnumForms;
580	OUT	DWORD needed;
581	OUT	DWORD pcRet;
582	OUT	DWORD status;
583};
584
585OPERATION(SPOOLSS_OPNUM_GetPrinterDriver2)
586struct spoolss_GetPrinterDriver2 {
587	IN	DWORD dontcare;
588	OUT	DWORD status;
589};
590
591OPERATION(SPOOLSS_OPNUM_FCPN)
592struct spoolss_FCPN {
593	IN	DWORD dontcare;
594	OUT	DWORD status;
595};
596
597OPERATION(SPOOLSS_OPNUM_ReplyOpenPrinter)
598struct spoolss_ReplyOpenPrinter {
599	IN	DWORD dontcare;
600	OUT	DWORD status;
601};
602
603OPERATION(SPOOLSS_OPNUM_ReplyClosePrinter)
604struct spoolss_ReplyClosePrinter {
605	IN	DWORD dontcare;
606	OUT	DWORD status;
607};
608
609
610OPERATION(SPOOLSS_OPNUM_RFFPCNEX)
611struct spoolss_RFFPCNEX {
612	IN	spoolss_handle_t handle;
613	OUT	DWORD status;
614};
615
616struct spoolss_infores {
617	DWORD entriesread;
618	struct spoolss_RPC_V2_NOTIFY_INFO *pinfo;
619};
620
621OPERATION(SPOOLSS_OPNUM_RFNPCNEX)
622struct spoolss_RFNPCNEX {
623	IN	spoolss_handle_t handle;
624	IN 	DWORD color;
625	IN	struct spoolss_RPC_V2_NOTIFY_OPTIONS *poptions;
626	OUT	struct spoolss_infores *ppinfo;
627	OUT	DWORD status;
628};
629
630OPERATION(SPOOLSS_OPNUM_RRPCN)
631struct spoolss_RRPCN {
632	IN	DWORD dontcare;
633	OUT	DWORD status;
634};
635
636OPERATION(SPOOLSS_OPNUM_OpenPrinterEx)
637struct spoolss_OpenPrinterEx {
638	IN	LPTSTR printer_name;
639	OUT	spoolss_handle_t handle;
640	OUT	DWORD status;
641};
642
643OPERATION(SPOOLSS_OPNUM_EnumPrinterData)
644struct spoolss_EnumPrinterData {
645	IN	DWORD dontcare;
646	OUT	DWORD status;
647};
648
649OPERATION(SPOOLSS_OPNUM_EnumPrinterDataEx)
650struct spoolss_EnumPrinterDataEx {
651	IN	DWORD dontcare;
652	OUT	DWORD status;
653};
654
655OPERATION(SPOOLSS_OPNUM_EnumPrinterKey)
656struct spoolss_EnumPrinterKey {
657	IN	DWORD dontcare;
658	OUT	DWORD status;
659};
660
661/*
662 ***********************************************************************
663 * The spoolss interface definition.
664 ***********************************************************************
665 */
666
667INTERFACE(0)
668union spoolss_interface {
669 	CASE(SPOOLSS_OPNUM_OpenPrinter)
670		struct spoolss_OpenPrinter OpenPrinter;
671
672	CASE(SPOOLSS_OPNUM_DeletePrinter)
673		struct spoolss_DeletePrinter DeletePrinter;
674
675	CASE(SPOOLSS_OPNUM_GetPrinter)
676		struct spoolss_GetPrinter GetPrinter;
677
678	CASE(SPOOLSS_OPNUM_GetPrinterData)
679		struct spoolss_GetPrinterData GetPrinterData;
680
681	CASE(SPOOLSS_OPNUM_AbortPrinter)
682		struct spoolss_AbortPrinter AbortPrinter;
683
684	CASE(SPOOLSS_OPNUM_StartDocPrinter)
685		struct spoolss_StartDocPrinter StartDocPrinter;
686
687	CASE(SPOOLSS_OPNUM_EndDocPrinter)
688		struct spoolss_EndDocPrinter EndDocPrinter;
689
690	CASE(SPOOLSS_OPNUM_CreatePrinterIC)
691		struct spoolss_CreatePrinterIC CreatePrinterIC;
692
693	CASE(SPOOLSS_OPNUM_ResetPrinter)
694		struct spoolss_ResetPrinter ResetPrinter;
695
696	CASE(SPOOLSS_OPNUM_WritePrinter)
697		struct spoolss_WritePrinter WritePrinter;
698
699	CASE(SPOOLSS_OPNUM_StartPagePrinter)
700		struct spoolss_StartPagePrinter StartPagePrinter;
701
702	CASE(SPOOLSS_OPNUM_EndPagePrinter)
703		struct spoolss_EndPagePrinter EndPagePrinter;
704
705	CASE(SPOOLSS_OPNUM_ClosePrinter)
706		struct spoolss_ClosePrinter ClosePrinter;
707
708	CASE(SPOOLSS_OPNUM_OpenPrinterEx)
709		struct spoolss_OpenPrinterEx OpenPrinterEx;
710
711	CASE(SPOOLSS_OPNUM_AddJob)
712		struct spoolss_AddJob AddJob;
713
714	CASE(SPOOLSS_OPNUM_GetJob)
715		struct spoolss_GetJob GetJob;
716
717	CASE(SPOOLSS_OPNUM_ScheduleJob)
718		struct spoolss_ScheduleJob ScheduleJob;
719
720	CASE(SPOOLSS_OPNUM_EnumForms)
721		struct spoolss_EnumForms EnumForms;
722
723	CASE(SPOOLSS_OPNUM_EnumJobs)
724		struct spoolss_EnumJobs EnumJobs;
725
726	CASE(SPOOLSS_OPNUM_RFNPCNEX)
727		struct spoolss_RFNPCNEX RFNPCNEX;
728
729};
730typedef union spoolss_interface	spoolss_interface_t;
731EXTERNTYPEINFO(spoolss_interface)
732
733#endif /* _SPOOLSS_NDL_ */
734