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