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