1/* 2 Unix SMB/Netbios implementation. 3 Version 1.9. 4 SMB parameters and setup 5 Copyright (C) Andrew Tridgell 1992-2000, 6 Copyright (C) Luke Kenneth Casson Leighton 1996-2000, 7 Copyright (C) Jean Francois Micouleau 1998-2000. 8 Copyright (C) Gerald Carter 2001-2002. 9 10 This program is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License as published by 12 the Free Software Foundation; either version 2 of the License, or 13 (at your option) any later version. 14 15 This program is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 GNU General Public License for more details. 19 20 You should have received a copy of the GNU General Public License 21 along with this program; if not, write to the Free Software 22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 23*/ 24 25#ifndef _RPC_SPOOLSS_H /* _RPC_SPOOLSS_H */ 26#define _RPC_SPOOLSS_H 27 28/* spoolss pipe: this are the calls which are not implemented ... 29#define SPOOLSS_GETPRINTERDRIVER 0x0b 30#define SPOOLSS_READPRINTER 0x16 31#define SPOOLSS_WAITFORPRINTERCHANGE 0x1c 32#define SPOOLSS_ADDPORT 0x25 33#define SPOOLSS_CONFIGUREPORT 0x26 34#define SPOOLSS_DELETEPORT 0x27 35#define SPOOLSS_CREATEPRINTERIC 0x28 36#define SPOOLSS_PLAYGDISCRIPTONPRINTERIC 0x29 37#define SPOOLSS_DELETEPRINTERIC 0x2a 38#define SPOOLSS_ADDPRINTERCONNECTION 0x2b 39#define SPOOLSS_DELETEPRINTERCONNECTION 0x2c 40#define SPOOLSS_PRINTERMESSAGEBOX 0x2d 41#define SPOOLSS_ADDMONITOR 0x2e 42#define SPOOLSS_DELETEMONITOR 0x2f 43#define SPOOLSS_DELETEPRINTPROCESSOR 0x30 44#define SPOOLSS_ADDPRINTPROVIDOR 0x31 45#define SPOOLSS_DELETEPRINTPROVIDOR 0x32 46#define SPOOLSS_FINDFIRSTPRINTERCHANGENOTIFICATION 0x36 47#define SPOOLSS_FINDNEXTPRINTERCHANGENOTIFICATION 0x37 48#define SPOOLSS_ROUTERFINDFIRSTPRINTERNOTIFICATIONOLD 0x39 49#define SPOOLSS_ADDPORTEX 0x3d 50#define SPOOLSS_REMOTEFINDFIRSTPRINTERCHANGENOTIFICATION0x3e 51#define SPOOLSS_SPOOLERINIT 0x3f 52#define SPOOLSS_RESETPRINTEREX 0x40 53*/ 54 55/* those are implemented */ 56#define SPOOLSS_ENUMPRINTERS 0x00 57#define SPOOLSS_OPENPRINTER 0x01 58#define SPOOLSS_SETJOB 0x02 59#define SPOOLSS_GETJOB 0x03 60#define SPOOLSS_ENUMJOBS 0x04 61#define SPOOLSS_ADDPRINTER 0x05 62#define SPOOLSS_DELETEPRINTER 0x06 63#define SPOOLSS_SETPRINTER 0x07 64#define SPOOLSS_GETPRINTER 0x08 65#define SPOOLSS_ADDPRINTERDRIVER 0x09 66#define SPOOLSS_ENUMPRINTERDRIVERS 0x0a 67#define SPOOLSS_GETPRINTERDRIVERDIRECTORY 0x0c 68#define SPOOLSS_DELETEPRINTERDRIVER 0x0d 69#define SPOOLSS_ADDPRINTPROCESSOR 0x0e 70#define SPOOLSS_ENUMPRINTPROCESSORS 0x0f 71#define SPOOLSS_GETPRINTPROCESSORDIRECTORY 0x10 72#define SPOOLSS_STARTDOCPRINTER 0x11 73#define SPOOLSS_STARTPAGEPRINTER 0x12 74#define SPOOLSS_WRITEPRINTER 0x13 75#define SPOOLSS_ENDPAGEPRINTER 0x14 76#define SPOOLSS_ABORTPRINTER 0x15 77#define SPOOLSS_ENDDOCPRINTER 0x17 78#define SPOOLSS_ADDJOB 0x18 79#define SPOOLSS_SCHEDULEJOB 0x19 80#define SPOOLSS_GETPRINTERDATA 0x1a 81#define SPOOLSS_SETPRINTERDATA 0x1b 82#define SPOOLSS_CLOSEPRINTER 0x1d 83#define SPOOLSS_ADDFORM 0x1e 84#define SPOOLSS_DELETEFORM 0x1f 85#define SPOOLSS_GETFORM 0x20 86#define SPOOLSS_SETFORM 0x21 87#define SPOOLSS_ENUMFORMS 0x22 88#define SPOOLSS_ENUMPORTS 0x23 89#define SPOOLSS_ENUMMONITORS 0x24 90#define SPOOLSS_ENUMPRINTPROCDATATYPES 0x33 91#define SPOOLSS_RESETPRINTER 0x34 92#define SPOOLSS_GETPRINTERDRIVER2 0x35 93#define SPOOLSS_FCPN 0x38 /* FindClosePrinterNotify */ 94#define SPOOLSS_REPLYOPENPRINTER 0x3a 95#define SPOOLSS_ROUTERREPLYPRINTER 0x3b 96#define SPOOLSS_REPLYCLOSEPRINTER 0x3c 97#define SPOOLSS_RFFPCNEX 0x41 /* RemoteFindFirstPrinterChangeNotifyEx */ 98#define SPOOLSS_RRPCN 0x42 /* RouteRefreshPrinterChangeNotification */ 99#define SPOOLSS_RFNPCNEX 0x43 /* RemoteFindNextPrinterChangeNotifyEx */ 100#define SPOOLSS_OPENPRINTEREX 0x45 101#define SPOOLSS_ADDPRINTEREX 0x46 102#define SPOOLSS_ENUMPRINTERDATA 0x48 103#define SPOOLSS_DELETEPRINTERDATA 0x49 104#define SPOOLSS_SETPRINTERDATAEX 0x4d 105#define SPOOLSS_GETPRINTERDATAEX 0x4e 106#define SPOOLSS_ENUMPRINTERDATAEX 0x4f 107#define SPOOLSS_ENUMPRINTERKEY 0x50 108#define SPOOLSS_DELETEPRINTERDATAEX 0x51 109#define SPOOLSS_DELETEPRINTERKEY 0x52 110#define SPOOLSS_DELETEPRINTERDRIVEREX 0x54 111#define SPOOLSS_ADDPRINTERDRIVEREX 0x59 112 113 114#define PRINTER_CONTROL_UNPAUSE 0x00000000 115#define PRINTER_CONTROL_PAUSE 0x00000001 116#define PRINTER_CONTROL_RESUME 0x00000002 117#define PRINTER_CONTROL_PURGE 0x00000003 118#define PRINTER_CONTROL_SET_STATUS 0x00000004 119 120#define PRINTER_STATUS_OK 0x00000000 121#define PRINTER_STATUS_PAUSED 0x00000001 122#define PRINTER_STATUS_ERROR 0x00000002 123#define PRINTER_STATUS_PENDING_DELETION 0x00000004 124#define PRINTER_STATUS_PAPER_JAM 0x00000008 125 126#define PRINTER_STATUS_PAPER_OUT 0x00000010 127#define PRINTER_STATUS_MANUAL_FEED 0x00000020 128#define PRINTER_STATUS_PAPER_PROBLEM 0x00000040 129#define PRINTER_STATUS_OFFLINE 0x00000080 130 131#define PRINTER_STATUS_IO_ACTIVE 0x00000100 132#define PRINTER_STATUS_BUSY 0x00000200 133#define PRINTER_STATUS_PRINTING 0x00000400 134#define PRINTER_STATUS_OUTPUT_BIN_FULL 0x00000800 135 136#define PRINTER_STATUS_NOT_AVAILABLE 0x00001000 137#define PRINTER_STATUS_WAITING 0x00002000 138#define PRINTER_STATUS_PROCESSING 0x00004000 139#define PRINTER_STATUS_INITIALIZING 0x00008000 140 141#define PRINTER_STATUS_WARMING_UP 0x00010000 142#define PRINTER_STATUS_TONER_LOW 0x00020000 143#define PRINTER_STATUS_NO_TONER 0x00040000 144#define PRINTER_STATUS_PAGE_PUNT 0x00080000 145 146#define PRINTER_STATUS_USER_INTERVENTION 0x00100000 147#define PRINTER_STATUS_OUT_OF_MEMORY 0x00200000 148#define PRINTER_STATUS_DOOR_OPEN 0x00400000 149#define PRINTER_STATUS_SERVER_UNKNOWN 0x00800000 150 151#define PRINTER_STATUS_POWER_SAVE 0x01000000 152 153#define SERVER_ACCESS_ADMINISTER 0x00000001 154#define SERVER_ACCESS_ENUMERATE 0x00000002 155#define PRINTER_ACCESS_ADMINISTER 0x00000004 156#define PRINTER_ACCESS_USE 0x00000008 157#define JOB_ACCESS_ADMINISTER 0x00000010 158 159/* JOB status codes. */ 160 161#define JOB_STATUS_QUEUED 0x0000 162#define JOB_STATUS_PAUSED 0x0001 163#define JOB_STATUS_ERROR 0x0002 164#define JOB_STATUS_DELETING 0x0004 165#define JOB_STATUS_SPOOLING 0x0008 166#define JOB_STATUS_PRINTING 0x0010 167#define JOB_STATUS_OFFLINE 0x0020 168#define JOB_STATUS_PAPEROUT 0x0040 169#define JOB_STATUS_PRINTED 0x0080 170#define JOB_STATUS_DELETED 0x0100 171#define JOB_STATUS_BLOCKED 0x0200 172#define JOB_STATUS_USER_INTERVENTION 0x0400 173 174/* ACE masks for the various print permissions */ 175 176#define PRINTER_ACE_FULL_CONTROL GENERIC_ALL_ACCESS 177#define PRINTER_ACE_MANAGE_DOCUMENTS READ_CONTROL_ACCESS 178#define PRINTER_ACE_PRINT \ 179 (GENERIC_READ_ACCESS | GENERIC_WRITE_ACCESS | GENERIC_EXECUTE_ACCESS) 180 181/* Access rights for print servers */ 182#define SERVER_ALL_ACCESS STANDARD_RIGHTS_REQUIRED_ACCESS|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE 183#define SERVER_READ STANDARD_RIGHTS_READ_ACCESS|SERVER_ACCESS_ENUMERATE 184#define SERVER_WRITE STANDARD_RIGHTS_WRITE_ACCESS|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE 185#define SERVER_EXECUTE STANDARD_RIGHTS_EXECUTE_ACCESS|SERVER_ACCESS_ENUMERATE 186 187/* Access rights for printers */ 188#define PRINTER_ALL_ACCESS STANDARD_RIGHTS_REQUIRED_ACCESS|PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE 189#define PRINTER_READ STANDARD_RIGHTS_READ_ACCESS|PRINTER_ACCESS_USE 190#define PRINTER_WRITE STANDARD_RIGHTS_WRITE_ACCESS|PRINTER_ACCESS_USE 191#define PRINTER_EXECUTE STANDARD_RIGHTS_EXECUTE_ACCESS|PRINTER_ACCESS_USE 192 193/* Access rights for jobs */ 194#define JOB_ALL_ACCESS STANDARD_RIGHTS_REQUIRED_ACCESS|JOB_ACCESS_ADMINISTER 195#define JOB_READ STANDARD_RIGHTS_READ_ACCESS|JOB_ACCESS_ADMINISTER 196#define JOB_WRITE STANDARD_RIGHTS_WRITE_ACCESS|JOB_ACCESS_ADMINISTER 197#define JOB_EXECUTE STANDARD_RIGHTS_EXECUTE_ACCESS|JOB_ACCESS_ADMINISTER 198 199/* Notify field types */ 200 201#define NOTIFY_ONE_VALUE 1 /* Notify data is stored in value1 */ 202#define NOTIFY_TWO_VALUE 2 /* Notify data is stored in value2 */ 203#define NOTIFY_POINTER 3 /* Data is a pointer to a buffer */ 204#define NOTIFY_STRING 4 /* Data is a pointer to a buffer w/length */ 205#define NOTIFY_SECDESC 5 /* Data is a security descriptor */ 206 207#define PRINTER_NOTIFY_TYPE 0x00 208#define JOB_NOTIFY_TYPE 0x01 209 210#define MAX_PRINTER_NOTIFY 26 211#define MAX_JOB_NOTIFY 24 212 213#define MAX_NOTIFY_TYPE_FOR_NOW 26 214 215#define PRINTER_NOTIFY_SERVER_NAME 0x00 216#define PRINTER_NOTIFY_PRINTER_NAME 0x01 217#define PRINTER_NOTIFY_SHARE_NAME 0x02 218#define PRINTER_NOTIFY_PORT_NAME 0x03 219#define PRINTER_NOTIFY_DRIVER_NAME 0x04 220#define PRINTER_NOTIFY_COMMENT 0x05 221#define PRINTER_NOTIFY_LOCATION 0x06 222#define PRINTER_NOTIFY_DEVMODE 0x07 223#define PRINTER_NOTIFY_SEPFILE 0x08 224#define PRINTER_NOTIFY_PRINT_PROCESSOR 0x09 225#define PRINTER_NOTIFY_PARAMETERS 0x0A 226#define PRINTER_NOTIFY_DATATYPE 0x0B 227#define PRINTER_NOTIFY_SECURITY_DESCRIPTOR 0x0C 228#define PRINTER_NOTIFY_ATTRIBUTES 0x0D 229#define PRINTER_NOTIFY_PRIORITY 0x0E 230#define PRINTER_NOTIFY_DEFAULT_PRIORITY 0x0F 231#define PRINTER_NOTIFY_START_TIME 0x10 232#define PRINTER_NOTIFY_UNTIL_TIME 0x11 233#define PRINTER_NOTIFY_STATUS 0x12 234#define PRINTER_NOTIFY_STATUS_STRING 0x13 235#define PRINTER_NOTIFY_CJOBS 0x14 236#define PRINTER_NOTIFY_AVERAGE_PPM 0x15 237#define PRINTER_NOTIFY_TOTAL_PAGES 0x16 238#define PRINTER_NOTIFY_PAGES_PRINTED 0x17 239#define PRINTER_NOTIFY_TOTAL_BYTES 0x18 240#define PRINTER_NOTIFY_BYTES_PRINTED 0x19 241 242#define JOB_NOTIFY_PRINTER_NAME 0x00 243#define JOB_NOTIFY_MACHINE_NAME 0x01 244#define JOB_NOTIFY_PORT_NAME 0x02 245#define JOB_NOTIFY_USER_NAME 0x03 246#define JOB_NOTIFY_NOTIFY_NAME 0x04 247#define JOB_NOTIFY_DATATYPE 0x05 248#define JOB_NOTIFY_PRINT_PROCESSOR 0x06 249#define JOB_NOTIFY_PARAMETERS 0x07 250#define JOB_NOTIFY_DRIVER_NAME 0x08 251#define JOB_NOTIFY_DEVMODE 0x09 252#define JOB_NOTIFY_STATUS 0x0A 253#define JOB_NOTIFY_STATUS_STRING 0x0B 254#define JOB_NOTIFY_SECURITY_DESCRIPTOR 0x0C 255#define JOB_NOTIFY_DOCUMENT 0x0D 256#define JOB_NOTIFY_PRIORITY 0x0E 257#define JOB_NOTIFY_POSITION 0x0F 258#define JOB_NOTIFY_SUBMITTED 0x10 259#define JOB_NOTIFY_START_TIME 0x11 260#define JOB_NOTIFY_UNTIL_TIME 0x12 261#define JOB_NOTIFY_TIME 0x13 262#define JOB_NOTIFY_TOTAL_PAGES 0x14 263#define JOB_NOTIFY_PAGES_PRINTED 0x15 264#define JOB_NOTIFY_TOTAL_BYTES 0x16 265#define JOB_NOTIFY_BYTES_PRINTED 0x17 266 267#define PRINTER_NOTIFY_OPTIONS_REFRESH 0x01 268 269#define PRINTER_CHANGE_ADD_PRINTER 0x00000001 270#define PRINTER_CHANGE_SET_PRINTER 0x00000002 271#define PRINTER_CHANGE_DELETE_PRINTER 0x00000004 272#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 0x00000008 273#define PRINTER_CHANGE_PRINTER (PRINTER_CHANGE_ADD_PRINTER | \ 274 PRINTER_CHANGE_SET_PRINTER | \ 275 PRINTER_CHANGE_DELETE_PRINTER | \ 276 PRINTER_CHANGE_FAILED_CONNECTION_PRINTER ) 277 278#define PRINTER_CHANGE_ADD_JOB 0x00000100 279#define PRINTER_CHANGE_SET_JOB 0x00000200 280#define PRINTER_CHANGE_DELETE_JOB 0x00000400 281#define PRINTER_CHANGE_WRITE_JOB 0x00000800 282#define PRINTER_CHANGE_JOB (PRINTER_CHANGE_ADD_JOB | \ 283 PRINTER_CHANGE_SET_JOB | \ 284 PRINTER_CHANGE_DELETE_JOB | \ 285 PRINTER_CHANGE_WRITE_JOB ) 286 287#define PRINTER_CHANGE_ADD_FORM 0x00010000 288#define PRINTER_CHANGE_SET_FORM 0x00020000 289#define PRINTER_CHANGE_DELETE_FORM 0x00040000 290#define PRINTER_CHANGE_FORM (PRINTER_CHANGE_ADD_FORM | \ 291 PRINTER_CHANGE_SET_FORM | \ 292 PRINTER_CHANGE_DELETE_FORM ) 293 294#define PRINTER_CHANGE_ADD_PORT 0x00100000 295#define PRINTER_CHANGE_CONFIGURE_PORT 0x00200000 296#define PRINTER_CHANGE_DELETE_PORT 0x00400000 297#define PRINTER_CHANGE_PORT (PRINTER_CHANGE_ADD_PORT | \ 298 PRINTER_CHANGE_CONFIGURE_PORT | \ 299 PRINTER_CHANGE_DELETE_PORT ) 300 301#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR 0x01000000 302#define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR 0x04000000 303#define PRINTER_CHANGE_PRINT_PROCESSOR (PRINTER_CHANGE_ADD_PRINT_PROCESSOR | \ 304 PRINTER_CHANGE_DELETE_PRINT_PROCESSOR ) 305 306#define PRINTER_CHANGE_ADD_PRINTER_DRIVER 0x10000000 307#define PRINTER_CHANGE_SET_PRINTER_DRIVER 0x20000000 308#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER 0x40000000 309#define PRINTER_CHANGE_PRINTER_DRIVER (PRINTER_CHANGE_ADD_PRINTER_DRIVER | \ 310 PRINTER_CHANGE_SET_PRINTER_DRIVER | \ 311 PRINTER_CHANGE_DELETE_PRINTER_DRIVER ) 312 313#define PRINTER_CHANGE_TIMEOUT 0x80000000 314#define PRINTER_CHANGE_ALL (PRINTER_CHANGE_JOB | \ 315 PRINTER_CHANGE_FORM | \ 316 PRINTER_CHANGE_PORT | \ 317 PRINTER_CHANGE_PRINT_PROCESSOR | \ 318 PRINTER_CHANGE_PRINTER_DRIVER ) 319 320#define PRINTER_NOTIFY_INFO_DISCARDED 0x1 321 322/* 323 * Set of macros for flagging what changed in the PRINTER_INFO_2 struct 324 * when sending messages to other smbd's 325 */ 326#define PRINTER_MESSAGE_NULL 0x00000000 327#define PRINTER_MESSAGE_DRIVER 0x00000001 328#define PRINTER_MESSAGE_COMMENT 0x00000002 329#define PRINTER_MESSAGE_PRINTERNAME 0x00000004 330#define PRINTER_MESSAGE_LOCATION 0x00000008 331#define PRINTER_MESSAGE_DEVMODE 0x00000010 /* not curently supported */ 332#define PRINTER_MESSAGE_SEPFILE 0x00000020 333#define PRINTER_MESSAGE_PRINTPROC 0x00000040 334#define PRINTER_MESSAGE_PARAMS 0x00000080 335#define PRINTER_MESSAGE_DATATYPE 0x00000100 336#define PRINTER_MESSAGE_SECDESC 0x00000200 337#define PRINTER_MESSAGE_CJOBS 0x00000400 338#define PRINTER_MESSAGE_PORT 0x00000800 339#define PRINTER_MESSAGE_SHARENAME 0x00001000 340#define PRINTER_MESSAGE_ATTRIBUTES 0x00002000 341 342typedef struct printer_message_info { 343 uint32 low; /* PRINTER_CHANGE_XXX */ 344 uint32 high; /* PRINTER_CHANGE_XXX */ 345 fstring printer_name; 346 uint32 flags; /* PRINTER_MESSAGE_XXX */ 347} 348PRINTER_MESSAGE_INFO; 349 350/* 351 * The printer attributes. 352 * I #defined all of them (grabbed form MSDN) 353 * I'm only using: 354 * ( SHARED | NETWORK | RAW_ONLY ) 355 * RAW_ONLY _MUST_ be present otherwise NT will send an EMF file 356 */ 357 358#define PRINTER_ATTRIBUTE_QUEUED 0x00000001 359#define PRINTER_ATTRIBUTE_DIRECT 0x00000002 360#define PRINTER_ATTRIBUTE_DEFAULT 0x00000004 361#define PRINTER_ATTRIBUTE_SHARED 0x00000008 362 363#define PRINTER_ATTRIBUTE_NETWORK 0x00000010 364#define PRINTER_ATTRIBUTE_HIDDEN 0x00000020 365#define PRINTER_ATTRIBUTE_LOCAL 0x00000040 366#define PRINTER_ATTRIBUTE_ENABLE_DEVQ 0x00000080 367 368#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS 0x00000100 369#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200 370#define PRINTER_ATTRIBUTE_WORK_OFFLINE 0x00000400 371#define PRINTER_ATTRIBUTE_ENABLE_BIDI 0x00000800 372 373#define PRINTER_ATTRIBUTE_RAW_ONLY 0x00001000 374#define PRINTER_ATTRIBUTE_PUBLISHED 0x00002000 375 376#define PRINTER_ATTRIBUTE_SAMBA (PRINTER_ATTRIBUTE_RAW_ONLY|\ 377 PRINTER_ATTRIBUTE_SHARED|\ 378 PRINTER_ATTRIBUTE_NETWORK) 379 380#define NO_PRIORITY 0 381#define MAX_PRIORITY 99 382#define MIN_PRIORITY 1 383#define DEF_PRIORITY 1 384 385/* the flags of the query */ 386#define PRINTER_ENUM_DEFAULT 0x00000001 387#define PRINTER_ENUM_LOCAL 0x00000002 388#define PRINTER_ENUM_CONNECTIONS 0x00000004 389#define PRINTER_ENUM_FAVORITE 0x00000004 390#define PRINTER_ENUM_NAME 0x00000008 391#define PRINTER_ENUM_REMOTE 0x00000010 392#define PRINTER_ENUM_SHARED 0x00000020 393#define PRINTER_ENUM_NETWORK 0x00000040 394 395/* the flags of each printers */ 396#define PRINTER_ENUM_UNKNOWN_8 0x00000008 397#define PRINTER_ENUM_EXPAND 0x00004000 398#define PRINTER_ENUM_CONTAINER 0x00008000 399#define PRINTER_ENUM_ICONMASK 0x00ff0000 400#define PRINTER_ENUM_ICON1 0x00010000 401#define PRINTER_ENUM_ICON2 0x00020000 402#define PRINTER_ENUM_ICON3 0x00040000 403#define PRINTER_ENUM_ICON4 0x00080000 404#define PRINTER_ENUM_ICON5 0x00100000 405#define PRINTER_ENUM_ICON6 0x00200000 406#define PRINTER_ENUM_ICON7 0x00400000 407#define PRINTER_ENUM_ICON8 0x00800000 408 409/* FLAGS for SPOOLSS_DELETEPRINTERDRIVEREX */ 410 411#define DPD_DELETE_UNUSED_FILES 0x00000001 412#define DPD_DELETE_SPECIFIC_VERSION 0x00000002 413#define DPD_DELETE_ALL_FILES 0x00000004 414 415#define DRIVER_ANY_VERSION 0xffffffff 416#define DRIVER_MAX_VERSION 4 417 418/* FLAGS for SPOOLSS_ADDPRINTERDRIVEREX */ 419 420#define APD_STRICT_UPGRADE 0x00000001 421#define APD_STRICT_DOWNGRADE 0x00000002 422#define APD_COPY_ALL_FILES 0x00000004 423#define APD_COPY_NEW_FILES 0x00000008 424 425 426/* this struct is undocumented */ 427/* thanks to the ddk ... */ 428typedef struct spool_user_1 429{ 430 uint32 size; /* length of user_name & client_name + 2? */ 431 uint32 client_name_ptr; 432 uint32 user_name_ptr; 433 uint32 build; 434 uint32 major; 435 uint32 minor; 436 uint32 processor; 437 UNISTR2 client_name; 438 UNISTR2 user_name; 439} 440SPOOL_USER_1; 441 442typedef struct spool_user_ctr_info 443{ 444 uint32 level; 445 uint32 ptr; 446 SPOOL_USER_1 user1; 447} 448SPOOL_USER_CTR; 449 450/* 451 * various bits in the DEVICEMODE.fields member 452 */ 453 454#define DEVMODE_ORIENTATION 0x00000001 455#define DEVMODE_PAPERSIZE 0x00000002 456#define DEVMODE_PAPERLENGTH 0x00000004 457#define DEVMODE_PAPERWIDTH 0x00000008 458#define DEVMODE_SCALE 0x00000010 459#define DEVMODE_POSITION 0x00000020 460#define DEVMODE_NUP 0x00000040 461#define DEVMODE_COPIES 0x00000100 462#define DEVMODE_DEFAULTSOURCE 0x00000200 463#define DEVMODE_PRINTQUALITY 0x00000400 464#define DEVMODE_COLOR 0x00000800 465#define DEVMODE_DUPLEX 0x00001000 466#define DEVMODE_YRESOLUTION 0x00002000 467#define DEVMODE_TTOPTION 0x00004000 468#define DEVMODE_COLLATE 0x00008000 469#define DEVMODE_FORMNAME 0x00010000 470#define DEVMODE_LOGPIXELS 0x00020000 471#define DEVMODE_BITSPERPEL 0x00040000 472#define DEVMODE_PELSWIDTH 0x00080000 473#define DEVMODE_PELSHEIGHT 0x00100000 474#define DEVMODE_DISPLAYFLAGS 0x00200000 475#define DEVMODE_DISPLAYFREQUENCY 0x00400000 476#define DEVMODE_ICMMETHOD 0x00800000 477#define DEVMODE_ICMINTENT 0x01000000 478#define DEVMODE_MEDIATYPE 0x02000000 479#define DEVMODE_DITHERTYPE 0x04000000 480#define DEVMODE_PANNINGWIDTH 0x08000000 481#define DEVMODE_PANNINGHEIGHT 0x10000000 482 483 484/* 485 * Devicemode structure 486 */ 487 488typedef struct devicemode 489{ 490 UNISTR devicename; 491 uint16 specversion; 492 uint16 driverversion; 493 uint16 size; 494 uint16 driverextra; 495 uint32 fields; 496 uint16 orientation; 497 uint16 papersize; 498 uint16 paperlength; 499 uint16 paperwidth; 500 uint16 scale; 501 uint16 copies; 502 uint16 defaultsource; 503 uint16 printquality; 504 uint16 color; 505 uint16 duplex; 506 uint16 yresolution; 507 uint16 ttoption; 508 uint16 collate; 509 UNISTR formname; 510 uint16 logpixels; 511 uint32 bitsperpel; 512 uint32 pelswidth; 513 uint32 pelsheight; 514 uint32 displayflags; 515 uint32 displayfrequency; 516 uint32 icmmethod; 517 uint32 icmintent; 518 uint32 mediatype; 519 uint32 dithertype; 520 uint32 reserved1; 521 uint32 reserved2; 522 uint32 panningwidth; 523 uint32 panningheight; 524 uint8 *private; 525} 526DEVICEMODE; 527 528typedef struct _devmode_cont 529{ 530 uint32 size; 531 uint32 devmode_ptr; 532 DEVICEMODE *devmode; 533} 534DEVMODE_CTR; 535 536typedef struct _printer_default 537{ 538 uint32 datatype_ptr; 539 UNISTR2 datatype; 540 DEVMODE_CTR devmode_cont; 541 uint32 access_required; 542} 543PRINTER_DEFAULT; 544 545/* SPOOL_Q_OPEN_PRINTER request to open a printer */ 546typedef struct spool_q_open_printer 547{ 548 uint32 printername_ptr; 549 UNISTR2 printername; 550 PRINTER_DEFAULT printer_default; 551} 552SPOOL_Q_OPEN_PRINTER; 553 554/* SPOOL_R_OPEN_PRINTER reply to an open printer */ 555typedef struct spool_r_open_printer 556{ 557 POLICY_HND handle; /* handle used along all transactions (20*uint8) */ 558 WERROR status; 559} 560SPOOL_R_OPEN_PRINTER; 561 562/* SPOOL_Q_OPEN_PRINTER_EX request to open a printer */ 563typedef struct spool_q_open_printer_ex 564{ 565 uint32 printername_ptr; 566 UNISTR2 printername; 567 PRINTER_DEFAULT printer_default; 568 uint32 user_switch; 569 SPOOL_USER_CTR user_ctr; 570} 571SPOOL_Q_OPEN_PRINTER_EX; 572 573/* SPOOL_R_OPEN_PRINTER_EX reply to an open printer */ 574typedef struct spool_r_open_printer_ex 575{ 576 POLICY_HND handle; /* handle used along all transactions (20*uint8) */ 577 WERROR status; 578} 579SPOOL_R_OPEN_PRINTER_EX; 580 581typedef struct spool_notify_option_type 582{ 583 uint16 type; 584 uint16 reserved0; 585 uint32 reserved1; 586 uint32 reserved2; 587 uint32 count; 588 uint32 fields_ptr; 589 uint32 count2; 590 uint16 fields[MAX_NOTIFY_TYPE_FOR_NOW]; 591} 592SPOOL_NOTIFY_OPTION_TYPE; 593 594typedef struct spool_notify_option_type_ctr 595{ 596 uint32 count; 597 SPOOL_NOTIFY_OPTION_TYPE *type; 598} 599SPOOL_NOTIFY_OPTION_TYPE_CTR; 600 601 602 603typedef struct s_header_type 604{ 605 uint32 type; 606 union 607 { 608 uint32 value; 609 UNISTR string; 610 } 611 data; 612} 613HEADER_TYPE; 614 615typedef struct new_buffer 616{ 617 uint32 ptr; 618 uint32 size; 619 prs_struct prs; 620 uint32 struct_start; 621 uint32 string_at_end; 622} 623NEW_BUFFER; 624 625typedef struct spool_q_getprinterdata 626{ 627 POLICY_HND handle; 628 UNISTR2 valuename; 629 uint32 size; 630} 631SPOOL_Q_GETPRINTERDATA; 632 633typedef struct spool_r_getprinterdata 634{ 635 uint32 type; 636 uint32 size; 637 uint8 *data; 638 uint32 needed; 639 WERROR status; 640} 641SPOOL_R_GETPRINTERDATA; 642 643typedef struct spool_q_deleteprinterdata 644{ 645 POLICY_HND handle; 646 UNISTR2 valuename; 647} 648SPOOL_Q_DELETEPRINTERDATA; 649 650typedef struct spool_r_deleteprinterdata 651{ 652 WERROR status; 653} 654SPOOL_R_DELETEPRINTERDATA; 655 656typedef struct spool_q_closeprinter 657{ 658 POLICY_HND handle; 659} 660SPOOL_Q_CLOSEPRINTER; 661 662typedef struct spool_r_closeprinter 663{ 664 POLICY_HND handle; 665 WERROR status; 666} 667SPOOL_R_CLOSEPRINTER; 668 669typedef struct spool_q_startpageprinter 670{ 671 POLICY_HND handle; 672} 673SPOOL_Q_STARTPAGEPRINTER; 674 675typedef struct spool_r_startpageprinter 676{ 677 WERROR status; 678} 679SPOOL_R_STARTPAGEPRINTER; 680 681typedef struct spool_q_endpageprinter 682{ 683 POLICY_HND handle; 684} 685SPOOL_Q_ENDPAGEPRINTER; 686 687typedef struct spool_r_endpageprinter 688{ 689 WERROR status; 690} 691SPOOL_R_ENDPAGEPRINTER; 692 693 694typedef struct spool_q_deleteprinterdriver 695{ 696 uint32 server_ptr; 697 UNISTR2 server; 698 UNISTR2 arch; 699 UNISTR2 driver; 700} 701SPOOL_Q_DELETEPRINTERDRIVER; 702 703typedef struct spool_r_deleteprinterdriver 704{ 705 WERROR status; 706} 707SPOOL_R_DELETEPRINTERDRIVER; 708 709typedef struct spool_q_deleteprinterdriverex 710{ 711 uint32 server_ptr; 712 UNISTR2 server; 713 UNISTR2 arch; 714 UNISTR2 driver; 715 uint32 delete_flags; 716 uint32 version; 717} 718SPOOL_Q_DELETEPRINTERDRIVEREX; 719 720typedef struct spool_r_deleteprinterdriverex 721{ 722 WERROR status; 723} 724SPOOL_R_DELETEPRINTERDRIVEREX; 725 726 727typedef struct spool_doc_info_1 728{ 729 uint32 p_docname; 730 uint32 p_outputfile; 731 uint32 p_datatype; 732 UNISTR2 docname; 733 UNISTR2 outputfile; 734 UNISTR2 datatype; 735} 736DOC_INFO_1; 737 738typedef struct spool_doc_info 739{ 740 uint32 switch_value; 741 DOC_INFO_1 doc_info_1; 742} 743DOC_INFO; 744 745typedef struct spool_doc_info_container 746{ 747 uint32 level; 748 DOC_INFO docinfo; 749} 750DOC_INFO_CONTAINER; 751 752typedef struct spool_q_startdocprinter 753{ 754 POLICY_HND handle; 755 DOC_INFO_CONTAINER doc_info_container; 756} 757SPOOL_Q_STARTDOCPRINTER; 758 759typedef struct spool_r_startdocprinter 760{ 761 uint32 jobid; 762 WERROR status; 763} 764SPOOL_R_STARTDOCPRINTER; 765 766typedef struct spool_q_enddocprinter 767{ 768 POLICY_HND handle; 769} 770SPOOL_Q_ENDDOCPRINTER; 771 772typedef struct spool_r_enddocprinter 773{ 774 WERROR status; 775} 776SPOOL_R_ENDDOCPRINTER; 777 778typedef struct spool_q_writeprinter 779{ 780 POLICY_HND handle; 781 uint32 buffer_size; 782 uint8 *buffer; 783 uint32 buffer_size2; 784} 785SPOOL_Q_WRITEPRINTER; 786 787typedef struct spool_r_writeprinter 788{ 789 uint32 buffer_written; 790 WERROR status; 791} 792SPOOL_R_WRITEPRINTER; 793 794typedef struct spool_notify_option 795{ 796 uint32 version; 797 uint32 flags; 798 uint32 count; 799 uint32 option_type_ptr; 800 SPOOL_NOTIFY_OPTION_TYPE_CTR ctr; 801} 802SPOOL_NOTIFY_OPTION; 803 804typedef struct spool_notify_info_data 805{ 806 uint16 type; 807 uint16 field; 808 uint32 reserved; 809 uint32 id; 810 union { 811 uint32 value[2]; 812 struct { 813 uint32 length; 814 uint16 *string; 815 } data; 816 struct { 817 uint32 size; 818 SEC_DESC *desc; 819 } sd; 820 } 821 notify_data; 822 uint32 size; 823 BOOL enc_type; 824} SPOOL_NOTIFY_INFO_DATA; 825 826typedef struct spool_notify_info 827{ 828 uint32 version; 829 uint32 flags; 830 uint32 count; 831 SPOOL_NOTIFY_INFO_DATA *data; 832} 833SPOOL_NOTIFY_INFO; 834 835/* If the struct name looks obscure, yes it is ! */ 836/* RemoteFindFirstPrinterChangeNotificationEx query struct */ 837typedef struct spoolss_q_rffpcnex 838{ 839 POLICY_HND handle; 840 uint32 flags; 841 uint32 options; 842 uint32 localmachine_ptr; 843 UNISTR2 localmachine; 844 uint32 printerlocal; 845 uint32 option_ptr; 846 SPOOL_NOTIFY_OPTION *option; 847} 848SPOOL_Q_RFFPCNEX; 849 850typedef struct spool_r_rffpcnex 851{ 852 WERROR status; 853} 854SPOOL_R_RFFPCNEX; 855 856/* Remote Find Next Printer Change Notify Ex */ 857typedef struct spool_q_rfnpcnex 858{ 859 POLICY_HND handle; 860 uint32 change; 861 uint32 option_ptr; 862 SPOOL_NOTIFY_OPTION *option; 863} 864SPOOL_Q_RFNPCNEX; 865 866typedef struct spool_r_rfnpcnex 867{ 868 uint32 info_ptr; 869 SPOOL_NOTIFY_INFO info; 870 WERROR status; 871} 872SPOOL_R_RFNPCNEX; 873 874/* Find Close Printer Notify */ 875typedef struct spool_q_fcpn 876{ 877 POLICY_HND handle; 878} 879SPOOL_Q_FCPN; 880 881typedef struct spool_r_fcpn 882{ 883 WERROR status; 884} 885SPOOL_R_FCPN; 886 887 888typedef struct printer_info_0 889{ 890 UNISTR printername; 891 UNISTR servername; 892 uint32 cjobs; 893 uint32 total_jobs; 894 uint32 total_bytes; 895 896 uint16 year; 897 uint16 month; 898 uint16 dayofweek; 899 uint16 day; 900 uint16 hour; 901 uint16 minute; 902 uint16 second; 903 uint16 milliseconds; 904 905 uint32 global_counter; 906 uint32 total_pages; 907 908 uint16 major_version; 909 uint16 build_version; 910 911 uint32 unknown7; 912 uint32 unknown8; 913 uint32 unknown9; 914 uint32 session_counter; 915 uint32 unknown11; 916 uint32 printer_errors; 917 uint32 unknown13; 918 uint32 unknown14; 919 uint32 unknown15; 920 uint32 unknown16; 921 uint32 change_id; 922 uint32 unknown18; 923 uint32 status; 924 uint32 unknown20; 925 uint32 c_setprinter; 926 927 uint16 unknown22; 928 uint16 unknown23; 929 uint16 unknown24; 930 uint16 unknown25; 931 uint16 unknown26; 932 uint16 unknown27; 933 uint16 unknown28; 934 uint16 unknown29; 935} PRINTER_INFO_0; 936 937typedef struct printer_info_1 938{ 939 uint32 flags; 940 UNISTR description; 941 UNISTR name; 942 UNISTR comment; 943} 944PRINTER_INFO_1; 945 946typedef struct printer_info_2 947{ 948 UNISTR servername; 949 UNISTR printername; 950 UNISTR sharename; 951 UNISTR portname; 952 UNISTR drivername; 953 UNISTR comment; 954 UNISTR location; 955 DEVICEMODE *devmode; 956 UNISTR sepfile; 957 UNISTR printprocessor; 958 UNISTR datatype; 959 UNISTR parameters; 960 SEC_DESC *secdesc; 961 uint32 attributes; 962 uint32 priority; 963 uint32 defaultpriority; 964 uint32 starttime; 965 uint32 untiltime; 966 uint32 status; 967 uint32 cjobs; 968 uint32 averageppm; 969} 970PRINTER_INFO_2; 971 972typedef struct printer_info_3 973{ 974 uint32 flags; 975 SEC_DESC *secdesc; 976} 977PRINTER_INFO_3; 978 979typedef struct printer_info_4 980{ 981 UNISTR printername; 982 UNISTR servername; 983 uint32 attributes; 984} 985PRINTER_INFO_4; 986 987typedef struct printer_info_5 988{ 989 UNISTR printername; 990 UNISTR portname; 991 uint32 attributes; 992 uint32 device_not_selected_timeout; 993 uint32 transmission_retry_timeout; 994} 995PRINTER_INFO_5; 996 997#define SPOOL_DS_PUBLISH 1 998#define SPOOL_DS_UPDATE 2 999#define SPOOL_DS_UNPUBLISH 4 1000#define SPOOL_DS_PENDING 0x80000000 1001 1002typedef struct printer_info_7 1003{ 1004 UNISTR guid; /* text form of printer guid */ 1005 uint32 action; 1006} 1007PRINTER_INFO_7; 1008 1009typedef struct spool_q_enumprinters 1010{ 1011 uint32 flags; 1012 uint32 servername_ptr; 1013 UNISTR2 servername; 1014 uint32 level; 1015 NEW_BUFFER *buffer; 1016 uint32 offered; 1017} 1018SPOOL_Q_ENUMPRINTERS; 1019 1020typedef struct printer_info_ctr_info 1021{ 1022 PRINTER_INFO_0 *printers_0; 1023 PRINTER_INFO_1 *printers_1; 1024 PRINTER_INFO_2 *printers_2; 1025 PRINTER_INFO_3 *printers_3; 1026 PRINTER_INFO_4 *printers_4; 1027 PRINTER_INFO_5 *printers_5; 1028} 1029PRINTER_INFO_CTR; 1030 1031typedef struct spool_r_enumprinters 1032{ 1033 NEW_BUFFER *buffer; 1034 uint32 needed; /* bytes needed */ 1035 uint32 returned; /* number of printers */ 1036 WERROR status; 1037} 1038SPOOL_R_ENUMPRINTERS; 1039 1040 1041typedef struct spool_q_getprinter 1042{ 1043 POLICY_HND handle; 1044 uint32 level; 1045 NEW_BUFFER *buffer; 1046 uint32 offered; 1047} 1048SPOOL_Q_GETPRINTER; 1049 1050typedef struct printer_info_info 1051{ 1052 union 1053 { 1054 PRINTER_INFO_0 *info0; 1055 PRINTER_INFO_1 *info1; 1056 PRINTER_INFO_2 *info2; 1057 void *info; 1058 } printer; 1059} PRINTER_INFO; 1060 1061typedef struct spool_r_getprinter 1062{ 1063 NEW_BUFFER *buffer; 1064 uint32 needed; 1065 WERROR status; 1066} SPOOL_R_GETPRINTER; 1067 1068typedef struct driver_info_1 1069{ 1070 UNISTR name; 1071} DRIVER_INFO_1; 1072 1073typedef struct driver_info_2 1074{ 1075 uint32 version; 1076 UNISTR name; 1077 UNISTR architecture; 1078 UNISTR driverpath; 1079 UNISTR datafile; 1080 UNISTR configfile; 1081} DRIVER_INFO_2; 1082 1083typedef struct driver_info_3 1084{ 1085 uint32 version; 1086 UNISTR name; 1087 UNISTR architecture; 1088 UNISTR driverpath; 1089 UNISTR datafile; 1090 UNISTR configfile; 1091 UNISTR helpfile; 1092 uint16 *dependentfiles; 1093 UNISTR monitorname; 1094 UNISTR defaultdatatype; 1095} 1096DRIVER_INFO_3; 1097 1098typedef struct driver_info_6 1099{ 1100 uint32 version; 1101 UNISTR name; 1102 UNISTR architecture; 1103 UNISTR driverpath; 1104 UNISTR datafile; 1105 UNISTR configfile; 1106 UNISTR helpfile; 1107 uint16 *dependentfiles; 1108 UNISTR monitorname; 1109 UNISTR defaultdatatype; 1110 uint16* previousdrivernames; 1111 NTTIME driver_date; 1112 uint32 padding; 1113 uint32 driver_version_low; 1114 uint32 driver_version_high; 1115 UNISTR mfgname; 1116 UNISTR oem_url; 1117 UNISTR hardware_id; 1118 UNISTR provider; 1119} 1120DRIVER_INFO_6; 1121 1122typedef struct driver_info_info 1123{ 1124 DRIVER_INFO_1 *info1; 1125 DRIVER_INFO_2 *info2; 1126 DRIVER_INFO_3 *info3; 1127 DRIVER_INFO_6 *info6; 1128} 1129PRINTER_DRIVER_CTR; 1130 1131typedef struct spool_q_getprinterdriver2 1132{ 1133 POLICY_HND handle; 1134 uint32 architecture_ptr; 1135 UNISTR2 architecture; 1136 uint32 level; 1137 NEW_BUFFER *buffer; 1138 uint32 offered; 1139 uint32 clientmajorversion; 1140 uint32 clientminorversion; 1141} 1142SPOOL_Q_GETPRINTERDRIVER2; 1143 1144typedef struct spool_r_getprinterdriver2 1145{ 1146 NEW_BUFFER *buffer; 1147 uint32 needed; 1148 uint32 servermajorversion; 1149 uint32 serverminorversion; 1150 WERROR status; 1151} 1152SPOOL_R_GETPRINTERDRIVER2; 1153 1154 1155typedef struct add_jobinfo_1 1156{ 1157 UNISTR path; 1158 uint32 job_number; 1159} 1160ADD_JOBINFO_1; 1161 1162 1163typedef struct spool_q_addjob 1164{ 1165 POLICY_HND handle; 1166 uint32 level; 1167 NEW_BUFFER *buffer; 1168 uint32 offered; 1169} 1170SPOOL_Q_ADDJOB; 1171 1172typedef struct spool_r_addjob 1173{ 1174 NEW_BUFFER *buffer; 1175 uint32 needed; 1176 WERROR status; 1177} 1178SPOOL_R_ADDJOB; 1179 1180/* 1181 * I'm really wondering how many different time formats 1182 * I will have to cope with 1183 * 1184 * JFM, 09/13/98 In a mad mood ;-( 1185*/ 1186typedef struct systemtime 1187{ 1188 uint16 year; 1189 uint16 month; 1190 uint16 dayofweek; 1191 uint16 day; 1192 uint16 hour; 1193 uint16 minute; 1194 uint16 second; 1195 uint16 milliseconds; 1196} 1197SYSTEMTIME; 1198 1199typedef struct s_job_info_1 1200{ 1201 uint32 jobid; 1202 UNISTR printername; 1203 UNISTR machinename; 1204 UNISTR username; 1205 UNISTR document; 1206 UNISTR datatype; 1207 UNISTR text_status; 1208 uint32 status; 1209 uint32 priority; 1210 uint32 position; 1211 uint32 totalpages; 1212 uint32 pagesprinted; 1213 SYSTEMTIME submitted; 1214} 1215JOB_INFO_1; 1216 1217typedef struct s_job_info_2 1218{ 1219 uint32 jobid; 1220 UNISTR printername; 1221 UNISTR machinename; 1222 UNISTR username; 1223 UNISTR document; 1224 UNISTR notifyname; 1225 UNISTR datatype; 1226 UNISTR printprocessor; 1227 UNISTR parameters; 1228 UNISTR drivername; 1229 DEVICEMODE *devmode; 1230 UNISTR text_status; 1231/* SEC_DESC sec_desc;*/ 1232 uint32 status; 1233 uint32 priority; 1234 uint32 position; 1235 uint32 starttime; 1236 uint32 untiltime; 1237 uint32 totalpages; 1238 uint32 size; 1239 SYSTEMTIME submitted; 1240 uint32 timeelapsed; 1241 uint32 pagesprinted; 1242} 1243JOB_INFO_2; 1244 1245typedef struct spool_q_enumjobs 1246{ 1247 POLICY_HND handle; 1248 uint32 firstjob; 1249 uint32 numofjobs; 1250 uint32 level; 1251 NEW_BUFFER *buffer; 1252 uint32 offered; 1253} 1254SPOOL_Q_ENUMJOBS; 1255 1256typedef struct job_info_ctr_info 1257{ 1258 union 1259 { 1260 JOB_INFO_1 *job_info_1; 1261 JOB_INFO_2 *job_info_2; 1262 void *info; 1263 } job; 1264 1265} JOB_INFO_CTR; 1266 1267typedef struct spool_r_enumjobs 1268{ 1269 NEW_BUFFER *buffer; 1270 uint32 needed; 1271 uint32 returned; 1272 WERROR status; 1273} 1274SPOOL_R_ENUMJOBS; 1275 1276typedef struct spool_q_schedulejob 1277{ 1278 POLICY_HND handle; 1279 uint32 jobid; 1280} 1281SPOOL_Q_SCHEDULEJOB; 1282 1283typedef struct spool_r_schedulejob 1284{ 1285 WERROR status; 1286} 1287SPOOL_R_SCHEDULEJOB; 1288 1289typedef struct s_port_info_1 1290{ 1291 UNISTR port_name; 1292} 1293PORT_INFO_1; 1294 1295typedef struct s_port_info_2 1296{ 1297 UNISTR port_name; 1298 UNISTR monitor_name; 1299 UNISTR description; 1300 uint32 port_type; 1301 uint32 reserved; 1302} 1303PORT_INFO_2; 1304 1305/* Port Type bits */ 1306#define PORT_TYPE_WRITE 0x0001 1307#define PORT_TYPE_READ 0x0002 1308#define PORT_TYPE_REDIRECTED 0x0004 1309#define PORT_TYPE_NET_ATTACHED 0x0008 1310 1311typedef struct spool_q_enumports 1312{ 1313 uint32 name_ptr; 1314 UNISTR2 name; 1315 uint32 level; 1316 NEW_BUFFER *buffer; 1317 uint32 offered; 1318} 1319SPOOL_Q_ENUMPORTS; 1320 1321typedef struct port_info_ctr_info 1322{ 1323 union 1324 { 1325 PORT_INFO_1 *info_1; 1326 PORT_INFO_2 *info_2; 1327 } 1328 port; 1329 1330} 1331PORT_INFO_CTR; 1332 1333typedef struct spool_r_enumports 1334{ 1335 NEW_BUFFER *buffer; 1336 uint32 needed; /* bytes needed */ 1337 uint32 returned; /* number of printers */ 1338 WERROR status; 1339} 1340SPOOL_R_ENUMPORTS; 1341 1342#define JOB_CONTROL_PAUSE 1 1343#define JOB_CONTROL_RESUME 2 1344#define JOB_CONTROL_CANCEL 3 1345#define JOB_CONTROL_RESTART 4 1346#define JOB_CONTROL_DELETE 5 1347 1348typedef struct job_info_info 1349{ 1350 union 1351 { 1352 JOB_INFO_1 job_info_1; 1353 JOB_INFO_2 job_info_2; 1354 } 1355 job; 1356 1357} 1358JOB_INFO; 1359 1360typedef struct spool_q_setjob 1361{ 1362 POLICY_HND handle; 1363 uint32 jobid; 1364 uint32 level; 1365 JOB_INFO ctr; 1366 uint32 command; 1367 1368} 1369SPOOL_Q_SETJOB; 1370 1371typedef struct spool_r_setjob 1372{ 1373 WERROR status; 1374 1375} 1376SPOOL_R_SETJOB; 1377 1378typedef struct spool_q_enumprinterdrivers 1379{ 1380 uint32 name_ptr; 1381 UNISTR2 name; 1382 uint32 environment_ptr; 1383 UNISTR2 environment; 1384 uint32 level; 1385 NEW_BUFFER *buffer; 1386 uint32 offered; 1387} 1388SPOOL_Q_ENUMPRINTERDRIVERS; 1389 1390typedef struct spool_r_enumprinterdrivers 1391{ 1392 NEW_BUFFER *buffer; 1393 uint32 needed; 1394 uint32 returned; 1395 WERROR status; 1396} 1397SPOOL_R_ENUMPRINTERDRIVERS; 1398 1399#define FORM_USER 0 1400#define FORM_BUILTIN 1 1401#define FORM_PRINTER 2 1402 1403typedef struct spool_form_1 1404{ 1405 uint32 flag; 1406 UNISTR name; 1407 uint32 width; 1408 uint32 length; 1409 uint32 left; 1410 uint32 top; 1411 uint32 right; 1412 uint32 bottom; 1413} 1414FORM_1; 1415 1416typedef struct spool_q_enumforms 1417{ 1418 POLICY_HND handle; 1419 uint32 level; 1420 NEW_BUFFER *buffer; 1421 uint32 offered; 1422} 1423SPOOL_Q_ENUMFORMS; 1424 1425typedef struct spool_r_enumforms 1426{ 1427 NEW_BUFFER *buffer; 1428 uint32 needed; 1429 uint32 numofforms; 1430 WERROR status; 1431} 1432SPOOL_R_ENUMFORMS; 1433 1434typedef struct spool_q_getform 1435{ 1436 POLICY_HND handle; 1437 UNISTR2 formname; 1438 uint32 level; 1439 NEW_BUFFER *buffer; 1440 uint32 offered; 1441} 1442SPOOL_Q_GETFORM; 1443 1444typedef struct spool_r_getform 1445{ 1446 NEW_BUFFER *buffer; 1447 uint32 needed; 1448 WERROR status; 1449} 1450SPOOL_R_GETFORM; 1451 1452typedef struct spool_printer_info_level_1 1453{ 1454 uint32 flags; 1455 uint32 description_ptr; 1456 uint32 name_ptr; 1457 uint32 comment_ptr; 1458 UNISTR2 description; 1459 UNISTR2 name; 1460 UNISTR2 comment; 1461} SPOOL_PRINTER_INFO_LEVEL_1; 1462 1463typedef struct spool_printer_info_level_2 1464{ 1465 uint32 servername_ptr; 1466 uint32 printername_ptr; 1467 uint32 sharename_ptr; 1468 uint32 portname_ptr; 1469 uint32 drivername_ptr; 1470 uint32 comment_ptr; 1471 uint32 location_ptr; 1472 uint32 devmode_ptr; 1473 uint32 sepfile_ptr; 1474 uint32 printprocessor_ptr; 1475 uint32 datatype_ptr; 1476 uint32 parameters_ptr; 1477 uint32 secdesc_ptr; 1478 uint32 attributes; 1479 uint32 priority; 1480 uint32 default_priority; 1481 uint32 starttime; 1482 uint32 untiltime; 1483 uint32 status; 1484 uint32 cjobs; 1485 uint32 averageppm; 1486 UNISTR2 servername; 1487 UNISTR2 printername; 1488 UNISTR2 sharename; 1489 UNISTR2 portname; 1490 UNISTR2 drivername; 1491 UNISTR2 comment; 1492 UNISTR2 location; 1493 UNISTR2 sepfile; 1494 UNISTR2 printprocessor; 1495 UNISTR2 datatype; 1496 UNISTR2 parameters; 1497} 1498SPOOL_PRINTER_INFO_LEVEL_2; 1499 1500typedef struct spool_printer_info_level_3 1501{ 1502 uint32 secdesc_ptr; 1503} 1504SPOOL_PRINTER_INFO_LEVEL_3; 1505 1506typedef struct spool_printer_info_level_7 1507{ 1508 uint32 guid_ptr; 1509 uint32 action; 1510 UNISTR2 guid; 1511} 1512SPOOL_PRINTER_INFO_LEVEL_7; 1513 1514typedef struct spool_printer_info_level 1515{ 1516 uint32 level; 1517 uint32 info_ptr; 1518 SPOOL_PRINTER_INFO_LEVEL_1 *info_1; 1519 SPOOL_PRINTER_INFO_LEVEL_2 *info_2; 1520 SPOOL_PRINTER_INFO_LEVEL_3 *info_3; 1521 SPOOL_PRINTER_INFO_LEVEL_7 *info_7; 1522} 1523SPOOL_PRINTER_INFO_LEVEL; 1524 1525typedef struct spool_printer_driver_info_level_3 1526{ 1527 uint32 cversion; 1528 uint32 name_ptr; 1529 uint32 environment_ptr; 1530 uint32 driverpath_ptr; 1531 uint32 datafile_ptr; 1532 uint32 configfile_ptr; 1533 uint32 helpfile_ptr; 1534 uint32 monitorname_ptr; 1535 uint32 defaultdatatype_ptr; 1536 uint32 dependentfilessize; 1537 uint32 dependentfiles_ptr; 1538 1539 UNISTR2 name; 1540 UNISTR2 environment; 1541 UNISTR2 driverpath; 1542 UNISTR2 datafile; 1543 UNISTR2 configfile; 1544 UNISTR2 helpfile; 1545 UNISTR2 monitorname; 1546 UNISTR2 defaultdatatype; 1547 BUFFER5 dependentfiles; 1548 1549} 1550SPOOL_PRINTER_DRIVER_INFO_LEVEL_3; 1551 1552/* SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 structure */ 1553typedef struct { 1554 uint32 version; 1555 uint32 name_ptr; 1556 uint32 environment_ptr; 1557 uint32 driverpath_ptr; 1558 uint32 datafile_ptr; 1559 uint32 configfile_ptr; 1560 uint32 helpfile_ptr; 1561 uint32 monitorname_ptr; 1562 uint32 defaultdatatype_ptr; 1563 uint32 dependentfiles_len; 1564 uint32 dependentfiles_ptr; 1565 uint32 previousnames_len; 1566 uint32 previousnames_ptr; 1567 NTTIME driverdate; 1568 UINT64_S driverversion; 1569 uint32 dummy4; 1570 uint32 mfgname_ptr; 1571 uint32 oemurl_ptr; 1572 uint32 hardwareid_ptr; 1573 uint32 provider_ptr; 1574 UNISTR2 name; 1575 UNISTR2 environment; 1576 UNISTR2 driverpath; 1577 UNISTR2 datafile; 1578 UNISTR2 configfile; 1579 UNISTR2 helpfile; 1580 UNISTR2 monitorname; 1581 UNISTR2 defaultdatatype; 1582 BUFFER5 dependentfiles; 1583 BUFFER5 previousnames; 1584 UNISTR2 mfgname; 1585 UNISTR2 oemurl; 1586 UNISTR2 hardwareid; 1587 UNISTR2 provider; 1588} SPOOL_PRINTER_DRIVER_INFO_LEVEL_6; 1589 1590 1591typedef struct spool_printer_driver_info_level 1592{ 1593 uint32 level; 1594 uint32 ptr; 1595 SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *info_3; 1596 SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *info_6; 1597} 1598SPOOL_PRINTER_DRIVER_INFO_LEVEL; 1599 1600 1601/* this struct is undocumented */ 1602/* thanks to the ddk ... */ 1603typedef struct spool_user_level_1 1604{ 1605 uint32 size; 1606 uint32 client_name_ptr; 1607 uint32 user_name_ptr; 1608 uint32 build; 1609 uint32 major; 1610 uint32 minor; 1611 uint32 processor; 1612 UNISTR2 client_name; 1613 UNISTR2 user_name; 1614} 1615SPOOL_USER_LEVEL_1; 1616 1617typedef struct spool_user_level 1618{ 1619 SPOOL_USER_LEVEL_1 *user_level_1; 1620} 1621SPOOL_USER_LEVEL; 1622 1623typedef struct spool_q_setprinter 1624{ 1625 POLICY_HND handle; 1626 uint32 level; 1627 SPOOL_PRINTER_INFO_LEVEL info; 1628 SEC_DESC_BUF *secdesc_ctr; 1629 DEVMODE_CTR devmode_ctr; 1630 1631 uint32 command; 1632 1633} 1634SPOOL_Q_SETPRINTER; 1635 1636typedef struct spool_r_setprinter 1637{ 1638 WERROR status; 1639} 1640SPOOL_R_SETPRINTER; 1641 1642typedef struct spool_q_addprinter 1643{ 1644 UNISTR2 server_name; 1645 uint32 level; 1646 SPOOL_PRINTER_INFO_LEVEL info; 1647 DEVMODE_CTR devmode_ctr; 1648 SEC_DESC_BUF *secdesc_ctr; 1649 uint32 user_level; 1650 SPOOL_USER_LEVEL user; 1651} 1652SPOOL_Q_ADDPRINTER; 1653 1654typedef struct spool_r_addprinter 1655{ 1656 WERROR status; 1657} 1658SPOOL_R_ADDPRINTER; 1659 1660typedef struct spool_q_deleteprinter 1661{ 1662 POLICY_HND handle; 1663} 1664SPOOL_Q_DELETEPRINTER; 1665 1666typedef struct spool_r_deleteprinter 1667{ 1668 POLICY_HND handle; 1669 WERROR status; 1670} 1671SPOOL_R_DELETEPRINTER; 1672 1673typedef struct spool_q_abortprinter 1674{ 1675 POLICY_HND handle; 1676} 1677SPOOL_Q_ABORTPRINTER; 1678 1679typedef struct spool_r_abortprinter 1680{ 1681 WERROR status; 1682} 1683SPOOL_R_ABORTPRINTER; 1684 1685 1686typedef struct spool_q_addprinterex 1687{ 1688 uint32 server_name_ptr; 1689 UNISTR2 server_name; 1690 uint32 level; 1691 SPOOL_PRINTER_INFO_LEVEL info; 1692 DEVMODE_CTR devmode_ctr; 1693 SEC_DESC_BUF *secdesc_ctr; 1694 uint32 user_switch; 1695 SPOOL_USER_CTR user_ctr; 1696} 1697SPOOL_Q_ADDPRINTEREX; 1698 1699typedef struct spool_r_addprinterex 1700{ 1701 POLICY_HND handle; 1702 WERROR status; 1703} 1704SPOOL_R_ADDPRINTEREX; 1705 1706 1707typedef struct spool_q_addprinterdriver 1708{ 1709 uint32 server_name_ptr; 1710 UNISTR2 server_name; 1711 uint32 level; 1712 SPOOL_PRINTER_DRIVER_INFO_LEVEL info; 1713} 1714SPOOL_Q_ADDPRINTERDRIVER; 1715 1716typedef struct spool_r_addprinterdriver 1717{ 1718 WERROR status; 1719} 1720SPOOL_R_ADDPRINTERDRIVER; 1721 1722typedef struct spool_q_addprinterdriverex 1723{ 1724 uint32 server_name_ptr; 1725 UNISTR2 server_name; 1726 uint32 level; 1727 SPOOL_PRINTER_DRIVER_INFO_LEVEL info; 1728 uint32 copy_flags; 1729} 1730SPOOL_Q_ADDPRINTERDRIVEREX; 1731 1732typedef struct spool_r_addprinterdriverex 1733{ 1734 WERROR status; 1735} 1736SPOOL_R_ADDPRINTERDRIVEREX; 1737 1738 1739typedef struct driver_directory_1 1740{ 1741 UNISTR name; 1742} 1743DRIVER_DIRECTORY_1; 1744 1745typedef struct driver_info_ctr_info 1746{ 1747 DRIVER_DIRECTORY_1 *info1; 1748} 1749DRIVER_DIRECTORY_CTR; 1750 1751typedef struct spool_q_getprinterdriverdirectory 1752{ 1753 uint32 name_ptr; 1754 UNISTR2 name; 1755 uint32 environment_ptr; 1756 UNISTR2 environment; 1757 uint32 level; 1758 NEW_BUFFER *buffer; 1759 uint32 offered; 1760} 1761SPOOL_Q_GETPRINTERDRIVERDIR; 1762 1763typedef struct spool_r_getprinterdriverdirectory 1764{ 1765 NEW_BUFFER *buffer; 1766 uint32 needed; 1767 WERROR status; 1768} 1769SPOOL_R_GETPRINTERDRIVERDIR; 1770 1771typedef struct spool_q_addprintprocessor 1772{ 1773 uint32 server_ptr; 1774 UNISTR2 server; 1775 UNISTR2 environment; 1776 UNISTR2 path; 1777 UNISTR2 name; 1778} 1779SPOOL_Q_ADDPRINTPROCESSOR; 1780 1781typedef struct spool_r_addprintprocessor 1782{ 1783 WERROR status; 1784} 1785SPOOL_R_ADDPRINTPROCESSOR; 1786 1787 1788typedef struct spool_q_enumprintprocessors 1789{ 1790 uint32 name_ptr; 1791 UNISTR2 name; 1792 uint32 environment_ptr; 1793 UNISTR2 environment; 1794 uint32 level; 1795 NEW_BUFFER *buffer; 1796 uint32 offered; 1797} 1798SPOOL_Q_ENUMPRINTPROCESSORS; 1799 1800typedef struct printprocessor_1 1801{ 1802 UNISTR name; 1803} 1804PRINTPROCESSOR_1; 1805 1806typedef struct spool_r_enumprintprocessors 1807{ 1808 NEW_BUFFER *buffer; 1809 uint32 needed; 1810 uint32 returned; 1811 WERROR status; 1812} 1813SPOOL_R_ENUMPRINTPROCESSORS; 1814 1815typedef struct spool_q_enumprintprocdatatypes 1816{ 1817 uint32 name_ptr; 1818 UNISTR2 name; 1819 uint32 processor_ptr; 1820 UNISTR2 processor; 1821 uint32 level; 1822 NEW_BUFFER *buffer; 1823 uint32 offered; 1824} 1825SPOOL_Q_ENUMPRINTPROCDATATYPES; 1826 1827typedef struct ppdatatype_1 1828{ 1829 UNISTR name; 1830} 1831PRINTPROCDATATYPE_1; 1832 1833typedef struct spool_r_enumprintprocdatatypes 1834{ 1835 NEW_BUFFER *buffer; 1836 uint32 needed; 1837 uint32 returned; 1838 WERROR status; 1839} 1840SPOOL_R_ENUMPRINTPROCDATATYPES; 1841 1842typedef struct printmonitor_1 1843{ 1844 UNISTR name; 1845} 1846PRINTMONITOR_1; 1847 1848typedef struct printmonitor_2 1849{ 1850 UNISTR name; 1851 UNISTR environment; 1852 UNISTR dll_name; 1853} 1854PRINTMONITOR_2; 1855 1856typedef struct spool_q_enumprintmonitors 1857{ 1858 uint32 name_ptr; 1859 UNISTR2 name; 1860 uint32 level; 1861 NEW_BUFFER *buffer; 1862 uint32 offered; 1863} 1864SPOOL_Q_ENUMPRINTMONITORS; 1865 1866typedef struct spool_r_enumprintmonitors 1867{ 1868 NEW_BUFFER *buffer; 1869 uint32 needed; 1870 uint32 returned; 1871 WERROR status; 1872} 1873SPOOL_R_ENUMPRINTMONITORS; 1874 1875 1876typedef struct spool_q_enumprinterdata 1877{ 1878 POLICY_HND handle; 1879 uint32 index; 1880 uint32 valuesize; 1881 uint32 datasize; 1882} 1883SPOOL_Q_ENUMPRINTERDATA; 1884 1885typedef struct spool_r_enumprinterdata 1886{ 1887 uint32 valuesize; 1888 uint16 *value; 1889 uint32 realvaluesize; 1890 uint32 type; 1891 uint32 datasize; 1892 uint8 *data; 1893 uint32 realdatasize; 1894 WERROR status; 1895} 1896SPOOL_R_ENUMPRINTERDATA; 1897 1898typedef struct spool_q_setprinterdata 1899{ 1900 POLICY_HND handle; 1901 UNISTR2 value; 1902 uint32 type; 1903 uint32 max_len; 1904 uint8 *data; 1905 uint32 real_len; 1906 uint32 numeric_data; 1907} 1908SPOOL_Q_SETPRINTERDATA; 1909 1910typedef struct spool_r_setprinterdata 1911{ 1912 WERROR status; 1913} 1914SPOOL_R_SETPRINTERDATA; 1915 1916typedef struct spool_q_resetprinter 1917{ 1918 POLICY_HND handle; 1919 uint32 datatype_ptr; 1920 UNISTR2 datatype; 1921 DEVMODE_CTR devmode_ctr; 1922 1923} SPOOL_Q_RESETPRINTER; 1924 1925typedef struct spool_r_resetprinter 1926{ 1927 WERROR status; 1928} 1929SPOOL_R_RESETPRINTER; 1930 1931 1932 1933typedef struct _form 1934{ 1935 uint32 flags; 1936 uint32 name_ptr; 1937 uint32 size_x; 1938 uint32 size_y; 1939 uint32 left; 1940 uint32 top; 1941 uint32 right; 1942 uint32 bottom; 1943 UNISTR2 name; 1944} 1945FORM; 1946 1947typedef struct spool_q_addform 1948{ 1949 POLICY_HND handle; 1950 uint32 level; 1951 uint32 level2; /* This should really be part of the FORM structure */ 1952 FORM form; 1953} 1954SPOOL_Q_ADDFORM; 1955 1956typedef struct spool_r_addform 1957{ 1958 WERROR status; 1959} 1960SPOOL_R_ADDFORM; 1961 1962typedef struct spool_q_setform 1963{ 1964 POLICY_HND handle; 1965 UNISTR2 name; 1966 uint32 level; 1967 uint32 level2; 1968 FORM form; 1969} 1970SPOOL_Q_SETFORM; 1971 1972typedef struct spool_r_setform 1973{ 1974 WERROR status; 1975} 1976SPOOL_R_SETFORM; 1977 1978typedef struct spool_q_deleteform 1979{ 1980 POLICY_HND handle; 1981 UNISTR2 name; 1982} 1983SPOOL_Q_DELETEFORM; 1984 1985typedef struct spool_r_deleteform 1986{ 1987 WERROR status; 1988} 1989SPOOL_R_DELETEFORM; 1990 1991typedef struct spool_q_getjob 1992{ 1993 POLICY_HND handle; 1994 uint32 jobid; 1995 uint32 level; 1996 NEW_BUFFER *buffer; 1997 uint32 offered; 1998} 1999SPOOL_Q_GETJOB; 2000 2001typedef struct pjob_info_info 2002{ 2003 union 2004 { 2005 JOB_INFO_1 *job_info_1; 2006 JOB_INFO_2 *job_info_2; 2007 void *info; 2008 } 2009 job; 2010 2011} 2012PJOB_INFO; 2013 2014typedef struct spool_r_getjob 2015{ 2016 NEW_BUFFER *buffer; 2017 uint32 needed; 2018 WERROR status; 2019} 2020SPOOL_R_GETJOB; 2021 2022typedef struct spool_q_replyopenprinter 2023{ 2024 UNISTR2 string; 2025 uint32 printer; 2026 uint32 type; 2027 uint32 unknown0; 2028 uint32 unknown1; 2029} 2030SPOOL_Q_REPLYOPENPRINTER; 2031 2032typedef struct spool_r_replyopenprinter 2033{ 2034 POLICY_HND handle; 2035 WERROR status; 2036} 2037SPOOL_R_REPLYOPENPRINTER; 2038 2039typedef struct spool_q_routerreplyprinter 2040{ 2041 POLICY_HND handle; 2042 uint32 condition; 2043 uint32 unknown1; /* 0x00000001 */ 2044 uint32 change_id; 2045 uint8 unknown2[5]; /* 0x0000000001 */ 2046} 2047SPOOL_Q_ROUTERREPLYPRINTER; 2048 2049typedef struct spool_r_routerreplyprinter 2050{ 2051 WERROR status; 2052} 2053SPOOL_R_ROUTERREPLYPRINTER; 2054 2055typedef struct spool_q_replycloseprinter 2056{ 2057 POLICY_HND handle; 2058} 2059SPOOL_Q_REPLYCLOSEPRINTER; 2060 2061typedef struct spool_r_replycloseprinter 2062{ 2063 POLICY_HND handle; 2064 WERROR status; 2065} 2066SPOOL_R_REPLYCLOSEPRINTER; 2067 2068typedef struct spool_q_rrpcn 2069{ 2070 POLICY_HND handle; 2071 uint32 change_low; 2072 uint32 change_high; 2073 uint32 unknown0; 2074 uint32 unknown1; 2075 uint32 info_ptr; 2076 SPOOL_NOTIFY_INFO info; 2077} 2078SPOOL_Q_REPLY_RRPCN; 2079 2080typedef struct spool_r_rrpcn 2081{ 2082 uint32 unknown0; 2083 WERROR status; 2084} 2085SPOOL_R_REPLY_RRPCN; 2086 2087typedef struct spool_q_getprinterdataex 2088{ 2089 POLICY_HND handle; 2090 UNISTR2 keyname; 2091 UNISTR2 valuename; 2092 uint32 size; 2093} 2094SPOOL_Q_GETPRINTERDATAEX; 2095 2096typedef struct spool_r_getprinterdataex 2097{ 2098 uint32 type; 2099 uint32 size; 2100 uint8 *data; 2101 uint32 needed; 2102 WERROR status; 2103} 2104SPOOL_R_GETPRINTERDATAEX; 2105 2106typedef struct spool_q_setprinterdataex 2107{ 2108 POLICY_HND handle; 2109 UNISTR2 key; 2110 UNISTR2 value; 2111 uint32 type; 2112 uint32 max_len; 2113 uint8 *data; 2114 uint32 real_len; 2115 uint32 numeric_data; 2116} 2117SPOOL_Q_SETPRINTERDATAEX; 2118 2119typedef struct spool_r_setprinterdataex 2120{ 2121 WERROR status; 2122} 2123SPOOL_R_SETPRINTERDATAEX; 2124 2125 2126typedef struct spool_q_deleteprinterdataex 2127{ 2128 POLICY_HND handle; 2129 UNISTR2 keyname; 2130 UNISTR2 valuename; 2131} 2132SPOOL_Q_DELETEPRINTERDATAEX; 2133 2134typedef struct spool_r_deleteprinterdataex 2135{ 2136 WERROR status; 2137} 2138SPOOL_R_DELETEPRINTERDATAEX; 2139 2140 2141typedef struct spool_q_enumprinterkey 2142{ 2143 POLICY_HND handle; 2144 UNISTR2 key; 2145 uint32 size; 2146} 2147SPOOL_Q_ENUMPRINTERKEY; 2148 2149typedef struct spool_r_enumprinterkey 2150{ 2151 BUFFER5 keys; 2152 uint32 needed; /* in bytes */ 2153 WERROR status; 2154} 2155SPOOL_R_ENUMPRINTERKEY; 2156 2157typedef struct spool_q_deleteprinterkey 2158{ 2159 POLICY_HND handle; 2160 UNISTR2 keyname; 2161} 2162SPOOL_Q_DELETEPRINTERKEY; 2163 2164typedef struct spool_r_deleteprinterkey 2165{ 2166 WERROR status; 2167} 2168SPOOL_R_DELETEPRINTERKEY; 2169 2170typedef struct printer_enum_values 2171{ 2172 UNISTR valuename; 2173 uint32 value_len; 2174 uint32 type; 2175 uint8 *data; 2176 uint32 data_len; 2177 2178} 2179PRINTER_ENUM_VALUES; 2180 2181typedef struct printer_enum_values_ctr 2182{ 2183 uint32 size; 2184 uint32 size_of_array; 2185 PRINTER_ENUM_VALUES *values; 2186} 2187PRINTER_ENUM_VALUES_CTR; 2188 2189typedef struct spool_q_enumprinterdataex 2190{ 2191 POLICY_HND handle; 2192 UNISTR2 key; 2193 uint32 size; 2194} 2195SPOOL_Q_ENUMPRINTERDATAEX; 2196 2197typedef struct spool_r_enumprinterdataex 2198{ 2199 PRINTER_ENUM_VALUES_CTR ctr; 2200 uint32 needed; 2201 uint32 returned; 2202 WERROR status; 2203} 2204SPOOL_R_ENUMPRINTERDATAEX; 2205 2206typedef struct printprocessor_directory_1 2207{ 2208 UNISTR name; 2209} 2210PRINTPROCESSOR_DIRECTORY_1; 2211 2212typedef struct spool_q_getprintprocessordirectory 2213{ 2214 UNISTR2 name; 2215 UNISTR2 environment; 2216 uint32 level; 2217 NEW_BUFFER *buffer; 2218 uint32 offered; 2219} 2220SPOOL_Q_GETPRINTPROCESSORDIRECTORY; 2221 2222typedef struct spool_r_getprintprocessordirectory 2223{ 2224 NEW_BUFFER *buffer; 2225 uint32 needed; 2226 WERROR status; 2227} 2228SPOOL_R_GETPRINTPROCESSORDIRECTORY; 2229 2230#define PRINTER_DRIVER_VERSION 2 2231#define PRINTER_DRIVER_ARCHITECTURE "Windows NT x86" 2232 2233#endif /* _RPC_SPOOLSS_H */ 2234 2235