Logo Search packages:      
Sourcecode: samba-doc-ja version File versions

rpc_spoolss.h

/* 
   Unix SMB/Netbios implementation.
   Version 1.9.
   SMB parameters and setup
   Copyright (C) Andrew Tridgell              1992-2000,
   Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
   Copyright (C) Jean Francois Micouleau      1998-2000.
   Copyright (C) Gerald Carter                2001-2002.
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#ifndef _RPC_SPOOLSS_H        /* _RPC_SPOOLSS_H */
#define _RPC_SPOOLSS_H

#define INTEGER 1
#define STRING 2

/* spoolss pipe: this are the calls which are not implemented ...
#define SPOOLSS_GETPRINTERDRIVER                0x0b
#define SPOOLSS_READPRINTER                     0x16
#define SPOOLSS_WAITFORPRINTERCHANGE                  0x1c
#define SPOOLSS_ADDPORT                         0x25
#define SPOOLSS_CONFIGUREPORT                   0x26
#define SPOOLSS_DELETEPORT                      0x27
#define SPOOLSS_CREATEPRINTERIC                       0x28
#define SPOOLSS_PLAYGDISCRIPTONPRINTERIC        0x29
#define SPOOLSS_DELETEPRINTERIC                       0x2a
#define SPOOLSS_ADDPRINTERCONNECTION                  0x2b
#define SPOOLSS_DELETEPRINTERCONNECTION               0x2c
#define SPOOLSS_PRINTERMESSAGEBOX               0x2d
#define SPOOLSS_ADDMONITOR                      0x2e
#define SPOOLSS_DELETEMONITOR                   0x2f
#define SPOOLSS_DELETEPRINTPROCESSOR                  0x30
#define SPOOLSS_ADDPRINTPROVIDOR                0x31
#define SPOOLSS_DELETEPRINTPROVIDOR             0x32
#define SPOOLSS_FINDFIRSTPRINTERCHANGENOTIFICATION    0x36
#define SPOOLSS_FINDNEXTPRINTERCHANGENOTIFICATION     0x37
#define SPOOLSS_ROUTERFINDFIRSTPRINTERNOTIFICATIONOLD 0x39
#define SPOOLSS_ADDPORTEX                       0x3d
#define SPOOLSS_REMOTEFINDFIRSTPRINTERCHANGENOTIFICATION0x3e
#define SPOOLSS_SPOOLERINIT                     0x3f
#define SPOOLSS_RESETPRINTEREX                        0x40
#define SPOOLSS_DELETEPRINTERDATAEX             0x51
#define SPOOLSS_DELETEPRINTERDRIVEREX                 0x54
#define SPOOLSS_ADDPRINTERDRIVEREX              0x59
*/

/* those are implemented */
#define SPOOLSS_ENUMPRINTERS                    0x00
#define SPOOLSS_OPENPRINTER                     0x01
#define SPOOLSS_SETJOB                          0x02
#define SPOOLSS_GETJOB                          0x03
#define SPOOLSS_ENUMJOBS                        0x04
#define SPOOLSS_ADDPRINTER                      0x05
#define SPOOLSS_DELETEPRINTER                   0x06
#define SPOOLSS_SETPRINTER                      0x07
#define SPOOLSS_GETPRINTER                      0x08
#define SPOOLSS_ADDPRINTERDRIVER                0x09
#define SPOOLSS_ENUMPRINTERDRIVERS              0x0a
#define SPOOLSS_GETPRINTERDRIVERDIRECTORY       0x0c
#define SPOOLSS_DELETEPRINTERDRIVER             0x0d
#define SPOOLSS_ADDPRINTPROCESSOR               0x0e
#define SPOOLSS_ENUMPRINTPROCESSORS             0x0f
#define SPOOLSS_GETPRINTPROCESSORDIRECTORY            0x10
#define SPOOLSS_STARTDOCPRINTER                       0x11
#define SPOOLSS_STARTPAGEPRINTER                0x12
#define SPOOLSS_WRITEPRINTER                    0x13
#define SPOOLSS_ENDPAGEPRINTER                        0x14
#define SPOOLSS_ABORTPRINTER                    0x15
#define SPOOLSS_ENDDOCPRINTER                   0x17
#define SPOOLSS_ADDJOB                          0x18
#define SPOOLSS_SCHEDULEJOB                     0x19
#define SPOOLSS_GETPRINTERDATA                        0x1a
#define SPOOLSS_SETPRINTERDATA                        0x1b
#define SPOOLSS_CLOSEPRINTER                    0x1d
#define SPOOLSS_ADDFORM                         0x1e
#define SPOOLSS_DELETEFORM                      0x1f
#define SPOOLSS_GETFORM                         0x20
#define SPOOLSS_SETFORM                         0x21
#define SPOOLSS_ENUMFORMS                       0x22
#define SPOOLSS_ENUMPORTS                       0x23
#define SPOOLSS_ENUMMONITORS                    0x24
#define SPOOLSS_ENUMPRINTPROCDATATYPES                0x33
#define SPOOLSS_RESETPRINTER                    0x34
#define SPOOLSS_GETPRINTERDRIVER2               0x35
#define SPOOLSS_FCPN                            0x38  /* FindClosePrinterNotify */
#define SPOOLSS_REPLYOPENPRINTER                0x3a
#define SPOOLSS_ROUTERREPLYPRINTER              0x3b
#define SPOOLSS_REPLYCLOSEPRINTER               0x3c
#define SPOOLSS_RFFPCNEX                        0x41  /* RemoteFindFirstPrinterChangeNotifyEx */
#define SPOOLSS_RRPCN                           0x42  /* RouteRefreshPrinterChangeNotification */
#define SPOOLSS_RFNPCNEX                        0x43  /* RemoteFindNextPrinterChangeNotifyEx */
#define SPOOLSS_OPENPRINTEREX                   0x45
#define SPOOLSS_ADDPRINTEREX                    0x46
#define SPOOLSS_ENUMPRINTERDATA                       0x48
#define SPOOLSS_DELETEPRINTERDATA               0x49
#define SPOOLSS_SETPRINTERDATAEX                0x4d
#define SPOOLSS_GETPRINTERDATAEX                0x4e
#define SPOOLSS_ENUMPRINTERDATAEX               0x4f
#define SPOOLSS_ENUMPRINTERKEY                        0x50


#define PRINTER_CONTROL_UNPAUSE           0x00000000
#define PRINTER_CONTROL_PAUSE       0x00000001
#define PRINTER_CONTROL_RESUME            0x00000002
#define PRINTER_CONTROL_PURGE       0x00000003
#define PRINTER_CONTROL_SET_STATUS  0x00000004

#define PRINTER_STATUS_PAUSED       0x00000001
#define PRINTER_STATUS_ERROR        0x00000002
#define PRINTER_STATUS_PENDING_DELETION   0x00000004
#define PRINTER_STATUS_PAPER_JAM    0x00000008

#define PRINTER_STATUS_PAPER_OUT    0x00000010
#define PRINTER_STATUS_MANUAL_FEED  0x00000020
#define PRINTER_STATUS_PAPER_PROBLEM      0x00000040
#define PRINTER_STATUS_OFFLINE            0x00000080

#define PRINTER_STATUS_IO_ACTIVE    0x00000100
#define PRINTER_STATUS_BUSY         0x00000200
#define PRINTER_STATUS_PRINTING           0x00000400
#define PRINTER_STATUS_OUTPUT_BIN_FULL    0x00000800

#define PRINTER_STATUS_NOT_AVAILABLE      0x00001000
#define PRINTER_STATUS_WAITING            0x00002000
#define PRINTER_STATUS_PROCESSING   0x00004000
#define PRINTER_STATUS_INITIALIZING 0x00008000

#define PRINTER_STATUS_WARMING_UP   0x00010000
#define PRINTER_STATUS_TONER_LOW    0x00020000
#define PRINTER_STATUS_NO_TONER           0x00040000
#define PRINTER_STATUS_PAGE_PUNT    0x00080000

#define PRINTER_STATUS_USER_INTERVENTION  0x00100000
#define PRINTER_STATUS_OUT_OF_MEMORY      0x00200000
#define PRINTER_STATUS_DOOR_OPEN    0x00400000
#define PRINTER_STATUS_SERVER_UNKNOWN     0x00800000

#define PRINTER_STATUS_POWER_SAVE   0x01000000

#define SERVER_ACCESS_ADMINISTER    0x00000001
#define SERVER_ACCESS_ENUMERATE           0x00000002
#define PRINTER_ACCESS_ADMINISTER   0x00000004
#define PRINTER_ACCESS_USE          0x00000008
#define JOB_ACCESS_ADMINISTER       0x00000010

/* JOB status codes. */

#define JOB_STATUS_PAUSED           0x001
#define JOB_STATUS_ERROR            0x002
#define JOB_STATUS_DELETING         0x004
#define JOB_STATUS_SPOOLING         0x008
#define JOB_STATUS_PRINTING         0x010
#define JOB_STATUS_OFFLINE          0x020
#define JOB_STATUS_PAPEROUT         0x040
#define JOB_STATUS_PRINTED          0x080
#define JOB_STATUS_DELETED          0x100
#define JOB_STATUS_BLOCKED          0x200
#define JOB_STATUS_USER_INTERVENTION      0x400

/* ACE masks for the various print permissions */

#define PRINTER_ACE_FULL_CONTROL      GENERIC_ALL_ACCESS
#define PRINTER_ACE_MANAGE_DOCUMENTS  READ_CONTROL_ACCESS
#define PRINTER_ACE_PRINT             \
    (GENERIC_READ_ACCESS | GENERIC_WRITE_ACCESS | GENERIC_EXECUTE_ACCESS)

/* Access rights for print servers */
#define SERVER_ALL_ACCESS     STANDARD_RIGHTS_REQUIRED_ACCESS|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE
#define SERVER_READ           STANDARD_RIGHTS_READ_ACCESS|SERVER_ACCESS_ENUMERATE
#define SERVER_WRITE          STANDARD_RIGHTS_WRITE_ACCESS|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE
#define SERVER_EXECUTE        STANDARD_RIGHTS_EXECUTE_ACCESS|SERVER_ACCESS_ENUMERATE

/* Access rights for printers */
#define PRINTER_ALL_ACCESS    STANDARD_RIGHTS_REQUIRED_ACCESS|PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE
#define PRINTER_READ          STANDARD_RIGHTS_READ_ACCESS|PRINTER_ACCESS_USE
#define PRINTER_WRITE         STANDARD_RIGHTS_WRITE_ACCESS|PRINTER_ACCESS_USE
#define PRINTER_EXECUTE       STANDARD_RIGHTS_EXECUTE_ACCESS|PRINTER_ACCESS_USE

/* Access rights for jobs */
#define JOB_ALL_ACCESS  STANDARD_RIGHTS_REQUIRED_ACCESS|JOB_ACCESS_ADMINISTER
#define JOB_READ  STANDARD_RIGHTS_READ_ACCESS|JOB_ACCESS_ADMINISTER
#define JOB_WRITE STANDARD_RIGHTS_WRITE_ACCESS|JOB_ACCESS_ADMINISTER
#define JOB_EXECUTE     STANDARD_RIGHTS_EXECUTE_ACCESS|JOB_ACCESS_ADMINISTER

#define ONE_VALUE 1
#define TWO_VALUE 2
#define POINTER   3

#define PRINTER_NOTIFY_TYPE 0x00
#define JOB_NOTIFY_TYPE     0x01

#define MAX_PRINTER_NOTIFY 26
#define MAX_JOB_NOTIFY 24

#define MAX_NOTIFY_TYPE_FOR_NOW 26

#define PRINTER_NOTIFY_SERVER_NAME        0x00
#define PRINTER_NOTIFY_PRINTER_NAME       0x01
#define PRINTER_NOTIFY_SHARE_NAME         0x02
#define PRINTER_NOTIFY_PORT_NAME          0x03
#define PRINTER_NOTIFY_DRIVER_NAME        0x04
#define PRINTER_NOTIFY_COMMENT                  0x05
#define PRINTER_NOTIFY_LOCATION                 0x06
#define PRINTER_NOTIFY_DEVMODE                  0x07
#define PRINTER_NOTIFY_SEPFILE                  0x08
#define PRINTER_NOTIFY_PRINT_PROCESSOR          0x09
#define PRINTER_NOTIFY_PARAMETERS         0x0A
#define PRINTER_NOTIFY_DATATYPE                 0x0B
#define PRINTER_NOTIFY_SECURITY_DESCRIPTOR      0x0C
#define PRINTER_NOTIFY_ATTRIBUTES         0x0D
#define PRINTER_NOTIFY_PRIORITY                 0x0E
#define PRINTER_NOTIFY_DEFAULT_PRIORITY         0x0F
#define PRINTER_NOTIFY_START_TIME         0x10
#define PRINTER_NOTIFY_UNTIL_TIME         0x11
#define PRINTER_NOTIFY_STATUS             0x12
#define PRINTER_NOTIFY_STATUS_STRING            0x13
#define PRINTER_NOTIFY_CJOBS              0x14
#define PRINTER_NOTIFY_AVERAGE_PPM        0x15
#define PRINTER_NOTIFY_TOTAL_PAGES        0x16
#define PRINTER_NOTIFY_PAGES_PRINTED            0x17
#define PRINTER_NOTIFY_TOTAL_BYTES        0x18
#define PRINTER_NOTIFY_BYTES_PRINTED            0x19

#define JOB_NOTIFY_PRINTER_NAME                 0x00
#define JOB_NOTIFY_MACHINE_NAME                 0x01
#define JOB_NOTIFY_PORT_NAME              0x02
#define JOB_NOTIFY_USER_NAME              0x03
#define JOB_NOTIFY_NOTIFY_NAME                  0x04
#define JOB_NOTIFY_DATATYPE               0x05
#define JOB_NOTIFY_PRINT_PROCESSOR        0x06
#define JOB_NOTIFY_PARAMETERS             0x07
#define JOB_NOTIFY_DRIVER_NAME                  0x08
#define JOB_NOTIFY_DEVMODE                0x09
#define JOB_NOTIFY_STATUS                 0x0A
#define JOB_NOTIFY_STATUS_STRING          0x0B
#define JOB_NOTIFY_SECURITY_DESCRIPTOR          0x0C
#define JOB_NOTIFY_DOCUMENT               0x0D
#define JOB_NOTIFY_PRIORITY               0x0E
#define JOB_NOTIFY_POSITION               0x0F
#define JOB_NOTIFY_SUBMITTED              0x10
#define JOB_NOTIFY_START_TIME             0x11
#define JOB_NOTIFY_UNTIL_TIME             0x12
#define JOB_NOTIFY_TIME                   0x13
#define JOB_NOTIFY_TOTAL_PAGES                  0x14
#define JOB_NOTIFY_PAGES_PRINTED          0x15
#define JOB_NOTIFY_TOTAL_BYTES                  0x16
#define JOB_NOTIFY_BYTES_PRINTED          0x17

#define PRINTER_NOTIFY_OPTIONS_REFRESH    0x01

#define PRINTER_CHANGE_ADD_PRINTER              0x00000001
#define PRINTER_CHANGE_SET_PRINTER              0x00000002
#define PRINTER_CHANGE_DELETE_PRINTER                 0x00000004
#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER      0x00000008
#define PRINTER_CHANGE_PRINTER      (PRINTER_CHANGE_ADD_PRINTER | \
                         PRINTER_CHANGE_SET_PRINTER | \
                         PRINTER_CHANGE_DELETE_PRINTER | \
                         PRINTER_CHANGE_FAILED_CONNECTION_PRINTER )

#define PRINTER_CHANGE_ADD_JOB                        0x00000100
#define PRINTER_CHANGE_SET_JOB                        0x00000200
#define PRINTER_CHANGE_DELETE_JOB               0x00000400
#define PRINTER_CHANGE_WRITE_JOB                0x00000800
#define PRINTER_CHANGE_JOB    (PRINTER_CHANGE_ADD_JOB | \
                         PRINTER_CHANGE_SET_JOB | \
                         PRINTER_CHANGE_DELETE_JOB | \
                         PRINTER_CHANGE_WRITE_JOB )

#define PRINTER_CHANGE_ADD_FORM                       0x00010000
#define PRINTER_CHANGE_SET_FORM                       0x00020000
#define PRINTER_CHANGE_DELETE_FORM              0x00040000
#define PRINTER_CHANGE_FORM   (PRINTER_CHANGE_ADD_FORM | \
                         PRINTER_CHANGE_SET_FORM | \
                         PRINTER_CHANGE_DELETE_FORM )

#define PRINTER_CHANGE_ADD_PORT                       0x00100000
#define PRINTER_CHANGE_CONFIGURE_PORT                 0x00200000
#define PRINTER_CHANGE_DELETE_PORT              0x00400000
#define PRINTER_CHANGE_PORT   (PRINTER_CHANGE_ADD_PORT | \
                         PRINTER_CHANGE_CONFIGURE_PORT | \
                         PRINTER_CHANGE_DELETE_PORT )

#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR            0x01000000
#define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR         0x04000000
#define PRINTER_CHANGE_PRINT_PROCESSOR    (PRINTER_CHANGE_ADD_PRINT_PROCESSOR | \
                               PRINTER_CHANGE_DELETE_PRINT_PROCESSOR )

#define PRINTER_CHANGE_ADD_PRINTER_DRIVER       0x10000000
#define PRINTER_CHANGE_SET_PRINTER_DRIVER       0x20000000
#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER          0x40000000
#define PRINTER_CHANGE_PRINTER_DRIVER     (PRINTER_CHANGE_ADD_PRINTER_DRIVER | \
                               PRINTER_CHANGE_SET_PRINTER_DRIVER | \
                               PRINTER_CHANGE_DELETE_PRINTER_DRIVER )

#define PRINTER_CHANGE_TIMEOUT                        0x80000000
#define PRINTER_CHANGE_ALL    (PRINTER_CHANGE_JOB | \
                         PRINTER_CHANGE_FORM | \
                         PRINTER_CHANGE_PORT | \
                         PRINTER_CHANGE_PRINT_PROCESSOR | \
                         PRINTER_CHANGE_PRINTER_DRIVER )

#define PRINTER_NOTIFY_INFO_DISCARDED     0x1

/*
 * Set of macros for flagging what changed in the PRINTER_INFO_2 struct
 * when sending messages to other smbd's
 */
#define PRINTER_MESSAGE_NULL            0x00000000
#define PRINTER_MESSAGE_DRIVER            0x00000001
#define PRINTER_MESSAGE_COMMENT           0x00000002
#define PRINTER_MESSAGE_PRINTERNAME 0x00000004
#define PRINTER_MESSAGE_LOCATION    0x00000008
#define PRINTER_MESSAGE_DEVMODE           0x00000010  /* not curently supported */
#define PRINTER_MESSAGE_SEPFILE           0x00000020
#define PRINTER_MESSAGE_PRINTPROC   0x00000040
#define PRINTER_MESSAGE_PARAMS            0x00000080
#define PRINTER_MESSAGE_DATATYPE    0x00000100
#define PRINTER_MESSAGE_SECDESC           0x00000200
#define PRINTER_MESSAGE_CJOBS       0x00000400
#define PRINTER_MESSAGE_PORT        0x00000800
#define PRINTER_MESSAGE_SHARENAME   0x00001000
#define PRINTER_MESSAGE_ATTRIBUTES  0x00002000

typedef struct printer_message_info {
      uint32 low;       /* PRINTER_CHANGE_XXX */
      uint32 high;            /* PRINTER_CHANGE_XXX */
      fstring printer_name;
      uint32 flags;           /* PRINTER_MESSAGE_XXX */
}
PRINTER_MESSAGE_INFO;

/*
 * The printer attributes.
 * I #defined all of them (grabbed form MSDN)
 * I'm only using:
 * ( SHARED | NETWORK | RAW_ONLY )
 * RAW_ONLY _MUST_ be present otherwise NT will send an EMF file
 */

#define PRINTER_ATTRIBUTE_QUEUED          0x00000001
#define PRINTER_ATTRIBUTE_DIRECT          0x00000002
#define PRINTER_ATTRIBUTE_DEFAULT         0x00000004
#define PRINTER_ATTRIBUTE_SHARED          0x00000008

#define PRINTER_ATTRIBUTE_NETWORK         0x00000010
#define PRINTER_ATTRIBUTE_HIDDEN          0x00000020
#define PRINTER_ATTRIBUTE_LOCAL                 0x00000040
#define PRINTER_ATTRIBUTE_ENABLE_DEVQ           0x00000080

#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS 0x00000100
#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST     0x00000200
#define PRINTER_ATTRIBUTE_WORK_OFFLINE          0x00000400
#define PRINTER_ATTRIBUTE_ENABLE_BIDI           0x00000800

#define PRINTER_ATTRIBUTE_RAW_ONLY        0x00001000

#define NO_PRIORITY      0
#define MAX_PRIORITY    99
#define MIN_PRIORITY     1
#define DEF_PRIORITY     1

/* the flags of the query */
#define PRINTER_ENUM_DEFAULT        0x00000001
#define PRINTER_ENUM_LOCAL          0x00000002
#define PRINTER_ENUM_CONNECTIONS    0x00000004
#define PRINTER_ENUM_FAVORITE       0x00000004
#define PRINTER_ENUM_NAME           0x00000008
#define PRINTER_ENUM_REMOTE         0x00000010
#define PRINTER_ENUM_SHARED         0x00000020
#define PRINTER_ENUM_NETWORK        0x00000040

/* the flags of each printers */
#define PRINTER_ENUM_UNKNOWN_8            0x00000008
#define PRINTER_ENUM_EXPAND         0x00004000
#define PRINTER_ENUM_CONTAINER            0x00008000
#define PRINTER_ENUM_ICONMASK       0x00ff0000
#define PRINTER_ENUM_ICON1          0x00010000
#define PRINTER_ENUM_ICON2          0x00020000
#define PRINTER_ENUM_ICON3          0x00040000
#define PRINTER_ENUM_ICON4          0x00080000
#define PRINTER_ENUM_ICON5          0x00100000
#define PRINTER_ENUM_ICON6          0x00200000
#define PRINTER_ENUM_ICON7          0x00400000
#define PRINTER_ENUM_ICON8          0x00800000

#define DRIVER_ANY_VERSION          0xffffffff
#define DRIVER_MAX_VERSION          4
/* this struct is undocumented */
/* thanks to the ddk ... */
typedef struct spool_user_1
{
      uint32 size;            /* length of user_name & client_name + 2? */
      uint32 client_name_ptr;
      uint32 user_name_ptr;
      uint32 build;
      uint32 ver_major;
      uint32 ver_minor;
      uint32 processor;
      UNISTR2 client_name;
      UNISTR2 user_name;
}
SPOOL_USER_1;

typedef struct spool_user_ctr_info
{
      uint32 level;
      uint32 ptr;
      SPOOL_USER_1 user1;
}
SPOOL_USER_CTR;

/*
 * various bits in the DEVICEMODE.fields member
 */

#define DEVMODE_ORIENTATION         0x00000001
#define DEVMODE_PAPERSIZE           0x00000002
#define DEVMODE_PAPERLENGTH         0x00000004
#define DEVMODE_PAPERWIDTH          0x00000008
#define DEVMODE_SCALE               0x00000010
#define DEVMODE_POSITION            0x00000020
#define DEVMODE_NUP                 0x00000040
#define DEVMODE_COPIES              0x00000100
#define DEVMODE_DEFAULTSOURCE       0x00000200
#define DEVMODE_PRINTQUALITY        0x00000400
#define DEVMODE_COLOR               0x00000800
#define DEVMODE_DUPLEX              0x00001000
#define DEVMODE_YRESOLUTION         0x00002000
#define DEVMODE_TTOPTION            0x00004000
#define DEVMODE_COLLATE             0x00008000
#define DEVMODE_FORMNAME            0x00010000
#define DEVMODE_LOGPIXELS           0x00020000
#define DEVMODE_BITSPERPEL          0x00040000
#define DEVMODE_PELSWIDTH           0x00080000
#define DEVMODE_PELSHEIGHT          0x00100000
#define DEVMODE_DISPLAYFLAGS        0x00200000
#define DEVMODE_DISPLAYFREQUENCY    0x00400000
#define DEVMODE_ICMMETHOD           0x00800000
#define DEVMODE_ICMINTENT           0x01000000
#define DEVMODE_MEDIATYPE           0x02000000
#define DEVMODE_DITHERTYPE          0x04000000
#define DEVMODE_PANNINGWIDTH        0x08000000
#define DEVMODE_PANNINGHEIGHT       0x10000000


/* 
 * Devicemode structure
 */

typedef struct devicemode
{
      UNISTR devicename;
      uint16 specversion;
      uint16 driverversion;
      uint16 size;
      uint16 driverextra;
      uint32 fields;
      uint16 orientation;
      uint16 papersize;
      uint16 paperlength;
      uint16 paperwidth;
      uint16 scale;
      uint16 copies;
      uint16 defaultsource;
      uint16 printquality;
      uint16 color;
      uint16 duplex;
      uint16 yresolution;
      uint16 ttoption;
      uint16 collate;
      UNISTR formname;
      uint16 logpixels;
      uint32 bitsperpel;
      uint32 pelswidth;
      uint32 pelsheight;
      uint32 displayflags;
      uint32 displayfrequency;
      uint32 icmmethod;
      uint32 icmintent;
      uint32 mediatype;
      uint32 dithertype;
      uint32 reserved1;
      uint32 reserved2;
      uint32 panningwidth;
      uint32 panningheight;
      uint8 *private;
}
DEVICEMODE;

typedef struct _devmode_cont
{
      uint32 size;
      uint32 devmode_ptr;
      DEVICEMODE *devmode;
}
DEVMODE_CTR;

typedef struct _printer_default
{
      uint32 datatype_ptr;
      UNISTR2 datatype;
      DEVMODE_CTR devmode_cont;
      uint32 access_required;
}
PRINTER_DEFAULT;

/* SPOOL_Q_OPEN_PRINTER request to open a printer */
typedef struct spool_q_open_printer
{
      uint32 printername_ptr;
      UNISTR2 printername;
      PRINTER_DEFAULT printer_default;
}
SPOOL_Q_OPEN_PRINTER;

/* SPOOL_R_OPEN_PRINTER reply to an open printer */
typedef struct spool_r_open_printer
{
      POLICY_HND handle;      /* handle used along all transactions (20*uint8) */
      WERROR status;
}
SPOOL_R_OPEN_PRINTER;

/* SPOOL_Q_OPEN_PRINTER_EX request to open a printer */
typedef struct spool_q_open_printer_ex
{
      uint32 printername_ptr;
      UNISTR2 printername;
      PRINTER_DEFAULT printer_default;
      uint32 user_switch;
      SPOOL_USER_CTR user_ctr;
}
SPOOL_Q_OPEN_PRINTER_EX;

/* SPOOL_R_OPEN_PRINTER_EX reply to an open printer */
typedef struct spool_r_open_printer_ex
{
      POLICY_HND handle;      /* handle used along all transactions (20*uint8) */
      WERROR status;
}
SPOOL_R_OPEN_PRINTER_EX;

typedef struct spool_notify_option_type
{
      uint16 type;
      uint16 reserved0;
      uint32 reserved1;
      uint32 reserved2;
      uint32 count;
      uint32 fields_ptr;
      uint32 count2;
      uint16 fields[MAX_NOTIFY_TYPE_FOR_NOW];
}
SPOOL_NOTIFY_OPTION_TYPE;

typedef struct spool_notify_option_type_ctr
{
      uint32 count;
      SPOOL_NOTIFY_OPTION_TYPE *type;
}
SPOOL_NOTIFY_OPTION_TYPE_CTR;



typedef struct s_header_type
{
      uint32 type;
      union
      {
            uint32 value;
            UNISTR string;
      }
      data;
}
HEADER_TYPE;

typedef struct new_buffer
{
      uint32 ptr;
      uint32 size;
      prs_struct prs;
      uint32 struct_start;
      uint32 string_at_end;
}
NEW_BUFFER;

typedef struct spool_q_getprinterdata
{
      POLICY_HND handle;
      UNISTR2 valuename;
      uint32 size;
}
SPOOL_Q_GETPRINTERDATA;

typedef struct spool_r_getprinterdata
{
      uint32 type;
      uint32 size;
      uint8 *data;
      uint32 needed;
      WERROR status;
}
SPOOL_R_GETPRINTERDATA;

typedef struct spool_q_deleteprinterdata
{
      POLICY_HND handle;
      UNISTR2 valuename;
}
SPOOL_Q_DELETEPRINTERDATA;

typedef struct spool_r_deleteprinterdata
{
      WERROR status;
}
SPOOL_R_DELETEPRINTERDATA;

typedef struct spool_q_closeprinter
{
      POLICY_HND handle;
}
SPOOL_Q_CLOSEPRINTER;

typedef struct spool_r_closeprinter
{
      POLICY_HND handle;
      WERROR status;
}
SPOOL_R_CLOSEPRINTER;

typedef struct spool_q_startpageprinter
{
      POLICY_HND handle;
}
SPOOL_Q_STARTPAGEPRINTER;

typedef struct spool_r_startpageprinter
{
      WERROR status;
}
SPOOL_R_STARTPAGEPRINTER;

typedef struct spool_q_endpageprinter
{
      POLICY_HND handle;
}
SPOOL_Q_ENDPAGEPRINTER;

typedef struct spool_r_endpageprinter
{
      WERROR status;
}
SPOOL_R_ENDPAGEPRINTER;


typedef struct spool_q_deleteprinterdriver
{
      uint32 server_ptr;
      UNISTR2 server;
      UNISTR2 arch;
      UNISTR2 driver;
}
SPOOL_Q_DELETEPRINTERDRIVER;

typedef struct spool_r_deleteprinterdriver
{
      WERROR status;
}
SPOOL_R_DELETEPRINTERDRIVER;


typedef struct spool_doc_info_1
{
      uint32 p_docname;
      uint32 p_outputfile;
      uint32 p_datatype;
      UNISTR2 docname;
      UNISTR2 outputfile;
      UNISTR2 datatype;
}
DOC_INFO_1;

typedef struct spool_doc_info
{
      uint32 switch_value;
      DOC_INFO_1 doc_info_1;
}
DOC_INFO;

typedef struct spool_doc_info_container
{
      uint32 level;
      DOC_INFO docinfo;
}
DOC_INFO_CONTAINER;

typedef struct spool_q_startdocprinter
{
      POLICY_HND handle;
      DOC_INFO_CONTAINER doc_info_container;
}
SPOOL_Q_STARTDOCPRINTER;

typedef struct spool_r_startdocprinter
{
      uint32 jobid;
      WERROR status;
}
SPOOL_R_STARTDOCPRINTER;

typedef struct spool_q_enddocprinter
{
      POLICY_HND handle;
}
SPOOL_Q_ENDDOCPRINTER;

typedef struct spool_r_enddocprinter
{
      WERROR status;
}
SPOOL_R_ENDDOCPRINTER;

typedef struct spool_q_writeprinter
{
      POLICY_HND handle;
      uint32 buffer_size;
      uint8 *buffer;
      uint32 buffer_size2;
}
SPOOL_Q_WRITEPRINTER;

typedef struct spool_r_writeprinter
{
      uint32 buffer_written;
      WERROR status;
}
SPOOL_R_WRITEPRINTER;

typedef struct spool_notify_option
{
      uint32 version;
      uint32 flags;
      uint32 count;
      uint32 option_type_ptr;
      SPOOL_NOTIFY_OPTION_TYPE_CTR ctr;
}
SPOOL_NOTIFY_OPTION;

typedef struct spool_notify_info_data
{
      uint16 type;
      uint16 field;
      uint32 reserved;
      uint32 id;
      union
      {
            uint32 value[2];
            struct
            {
                  uint32 length;
                  uint16 *string;
            }
            data;
      }
      notify_data;
      uint32 size;
      BOOL enc_type;
} SPOOL_NOTIFY_INFO_DATA;

typedef struct spool_notify_info
{
      uint32 version;
      uint32 flags;
      uint32 count;
      SPOOL_NOTIFY_INFO_DATA *data;
}
SPOOL_NOTIFY_INFO;

/* If the struct name looks obscure, yes it is ! */
/* RemoteFindFirstPrinterChangeNotificationEx query struct */
typedef struct spoolss_q_rffpcnex
{
      POLICY_HND handle;
      uint32 flags;
      uint32 options;
      uint32 localmachine_ptr;
      UNISTR2 localmachine;
      uint32 printerlocal;
      uint32 option_ptr;
      SPOOL_NOTIFY_OPTION *option;
}
SPOOL_Q_RFFPCNEX;

typedef struct spool_r_rffpcnex
{
      WERROR status;
}
SPOOL_R_RFFPCNEX;

/* Remote Find Next Printer Change Notify Ex */
typedef struct spool_q_rfnpcnex
{
      POLICY_HND handle;
      uint32 change;
      uint32 option_ptr;
      SPOOL_NOTIFY_OPTION *option;
}
SPOOL_Q_RFNPCNEX;

typedef struct spool_r_rfnpcnex
{
      uint32 info_ptr;
      SPOOL_NOTIFY_INFO info;
      WERROR status;
}
SPOOL_R_RFNPCNEX;

/* Find Close Printer Notify */
typedef struct spool_q_fcpn
{
      POLICY_HND handle;
}
SPOOL_Q_FCPN;

typedef struct spool_r_fcpn
{
      WERROR status;
}
SPOOL_R_FCPN;


typedef struct printer_info_0
{
      UNISTR printername;
      UNISTR servername;
      uint32 cjobs;
      uint32 total_jobs;
      uint32 total_bytes;
      
      uint16 year;
      uint16 month;
      uint16 dayofweek;
      uint16 day;
      uint16 hour;
      uint16 minute;
      uint16 second;
      uint16 milliseconds;

      uint32 global_counter;
      uint32 total_pages;

      uint16 major_version;
      uint16 build_version;

      uint32 unknown7;
      uint32 unknown8;
      uint32 unknown9;
      uint32 session_counter;
      uint32 unknown11;
      uint32 printer_errors;
      uint32 unknown13;
      uint32 unknown14;
      uint32 unknown15;
      uint32 unknown16;
      uint32 change_id;
      uint32 unknown18;
      uint32 status;
      uint32 unknown20;
      uint32 c_setprinter;

      uint16 unknown22;
      uint16 unknown23;
      uint16 unknown24;
      uint16 unknown25;
      uint16 unknown26;
      uint16 unknown27;
      uint16 unknown28;
      uint16 unknown29;
} PRINTER_INFO_0;

typedef struct printer_info_1
{
      uint32 flags;
      UNISTR description;
      UNISTR name;
      UNISTR comment;
}
PRINTER_INFO_1;

typedef struct printer_info_2
{
      UNISTR servername;
      UNISTR printername;
      UNISTR sharename;
      UNISTR portname;
      UNISTR drivername;
      UNISTR comment;
      UNISTR location;
      DEVICEMODE *devmode;
      UNISTR sepfile;
      UNISTR printprocessor;
      UNISTR datatype;
      UNISTR parameters;
      SEC_DESC *secdesc;
      uint32 attributes;
      uint32 priority;
      uint32 defaultpriority;
      uint32 starttime;
      uint32 untiltime;
      uint32 status;
      uint32 cjobs;
      uint32 averageppm;
}
PRINTER_INFO_2;

typedef struct printer_info_3
{
      uint32 flags;
      SEC_DESC *secdesc;
}
PRINTER_INFO_3;

typedef struct printer_info_4
{
      UNISTR printername;
      UNISTR servername;
      uint32 attributes;
}
PRINTER_INFO_4;

typedef struct printer_info_5
{
      UNISTR printername;
      UNISTR portname;
      uint32 attributes;
      uint32 device_not_selected_timeout;
      uint32 transmission_retry_timeout;
}
PRINTER_INFO_5;

typedef struct spool_q_enumprinters
{
      uint32 flags;
      uint32 servername_ptr;
      UNISTR2 servername;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ENUMPRINTERS;

typedef struct printer_info_ctr_info
{
      PRINTER_INFO_0 *printers_0;
      PRINTER_INFO_1 *printers_1;
      PRINTER_INFO_2 *printers_2;
      PRINTER_INFO_3 *printers_3;
      PRINTER_INFO_4 *printers_4;
      PRINTER_INFO_5 *printers_5;
}
PRINTER_INFO_CTR;

typedef struct spool_r_enumprinters
{
      NEW_BUFFER *buffer;
      uint32 needed;          /* bytes needed */
      uint32 returned;  /* number of printers */
      WERROR status;
}
SPOOL_R_ENUMPRINTERS;


typedef struct spool_q_getprinter
{
      POLICY_HND handle;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_GETPRINTER;

typedef struct printer_info_info
{
      union
      {
            PRINTER_INFO_0 *info0;
            PRINTER_INFO_1 *info1;
            PRINTER_INFO_2 *info2;
            void *info;
      } printer;
} PRINTER_INFO;

typedef struct spool_r_getprinter
{
      NEW_BUFFER *buffer;
      uint32 needed;
      WERROR status;
} SPOOL_R_GETPRINTER;

typedef struct driver_info_1
{
      UNISTR name;
} DRIVER_INFO_1;

typedef struct driver_info_2
{
      uint32 version;
      UNISTR name;
      UNISTR architecture;
      UNISTR driverpath;
      UNISTR datafile;
      UNISTR configfile;
} DRIVER_INFO_2;

typedef struct driver_info_3
{
      uint32 version;
      UNISTR name;
      UNISTR architecture;
      UNISTR driverpath;
      UNISTR datafile;
      UNISTR configfile;
      UNISTR helpfile;
      uint16 *dependentfiles;
      UNISTR monitorname;
      UNISTR defaultdatatype;
}
DRIVER_INFO_3;

typedef struct driver_info_6
{
      uint32 version;
      UNISTR name;
      UNISTR architecture;
      UNISTR driverpath;
      UNISTR datafile;
      UNISTR configfile;
      UNISTR helpfile;
      uint16 *dependentfiles;
      UNISTR monitorname;
      UNISTR defaultdatatype;
      uint16* previousdrivernames;
      NTTIME driver_date;
      uint32 padding;
      uint32 driver_version_low;
      uint32 driver_version_high;
      UNISTR mfgname;
      UNISTR oem_url;
      UNISTR hardware_id;
      UNISTR provider;
}
DRIVER_INFO_6;

typedef struct driver_info_info
{
      DRIVER_INFO_1 *info1;
      DRIVER_INFO_2 *info2;
      DRIVER_INFO_3 *info3;
      DRIVER_INFO_6 *info6;
}
PRINTER_DRIVER_CTR;

typedef struct spool_q_getprinterdriver2
{
      POLICY_HND handle;
      uint32 architecture_ptr;
      UNISTR2 architecture;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
      uint32 clientmajorversion;
      uint32 clientminorversion;
}
SPOOL_Q_GETPRINTERDRIVER2;

typedef struct spool_r_getprinterdriver2
{
      NEW_BUFFER *buffer;
      uint32 needed;
      uint32 servermajorversion;
      uint32 serverminorversion;
      WERROR status;
}
SPOOL_R_GETPRINTERDRIVER2;


typedef struct add_jobinfo_1
{
      UNISTR path;
      uint32 job_number;
}
ADD_JOBINFO_1;


typedef struct spool_q_addjob
{
      POLICY_HND handle;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ADDJOB;

typedef struct spool_r_addjob
{
      NEW_BUFFER *buffer;
      uint32 needed;
      WERROR status;
}
SPOOL_R_ADDJOB;

/*
 * I'm really wondering how many different time formats
 * I will have to cope with
 *
 * JFM, 09/13/98 In a mad mood ;-(
*/
typedef struct systemtime
{
      uint16 year;
      uint16 month;
      uint16 dayofweek;
      uint16 day;
      uint16 hour;
      uint16 minute;
      uint16 second;
      uint16 milliseconds;
}
SYSTEMTIME;

typedef struct s_job_info_1
{
      uint32 jobid;
      UNISTR printername;
      UNISTR machinename;
      UNISTR username;
      UNISTR document;
      UNISTR datatype;
      UNISTR text_status;
      uint32 status;
      uint32 priority;
      uint32 position;
      uint32 totalpages;
      uint32 pagesprinted;
      SYSTEMTIME submitted;
}
JOB_INFO_1;

typedef struct s_job_info_2
{
      uint32 jobid;
      UNISTR printername;
      UNISTR machinename;
      UNISTR username;
      UNISTR document;
      UNISTR notifyname;
      UNISTR datatype;
      UNISTR printprocessor;
      UNISTR parameters;
      UNISTR drivername;
      DEVICEMODE *devmode;
      UNISTR text_status;
/*    SEC_DESC sec_desc;*/
      uint32 status;
      uint32 priority;
      uint32 position;
      uint32 starttime;
      uint32 untiltime;
      uint32 totalpages;
      uint32 size;
      SYSTEMTIME submitted;
      uint32 timeelapsed;
      uint32 pagesprinted;
}
JOB_INFO_2;

typedef struct spool_q_enumjobs
{
      POLICY_HND handle;
      uint32 firstjob;
      uint32 numofjobs;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ENUMJOBS;

typedef struct job_info_ctr_info
{
      union
      {
            JOB_INFO_1 **job_info_1;
            JOB_INFO_2 **job_info_2;
            void *info;
      } job;

} JOB_INFO_CTR;

typedef struct spool_r_enumjobs
{
      NEW_BUFFER *buffer;
      uint32 needed;
      uint32 returned;
      WERROR status;
}
SPOOL_R_ENUMJOBS;

typedef struct spool_q_schedulejob
{
      POLICY_HND handle;
      uint32 jobid;
}
SPOOL_Q_SCHEDULEJOB;

typedef struct spool_r_schedulejob
{
      WERROR status;
}
SPOOL_R_SCHEDULEJOB;

typedef struct s_port_info_1
{
      UNISTR port_name;
}
PORT_INFO_1;

typedef struct s_port_info_2
{
      UNISTR port_name;
      UNISTR monitor_name;
      UNISTR description;
      uint32 port_type;
      uint32 reserved;
}
PORT_INFO_2;

typedef struct spool_q_enumports
{
      uint32 name_ptr;
      UNISTR2 name;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ENUMPORTS;

typedef struct port_info_ctr_info
{
      union
      {
            PORT_INFO_1 *info_1;
            PORT_INFO_2 *info_2;
      }
      port;

}
PORT_INFO_CTR;

typedef struct spool_r_enumports
{
      NEW_BUFFER *buffer;
      uint32 needed;          /* bytes needed */
      uint32 returned;  /* number of printers */
      WERROR status;
}
SPOOL_R_ENUMPORTS;

#define JOB_CONTROL_PAUSE              1
#define JOB_CONTROL_RESUME             2
#define JOB_CONTROL_CANCEL             3
#define JOB_CONTROL_RESTART            4
#define JOB_CONTROL_DELETE             5

typedef struct job_info_info
{
      union
      {
            JOB_INFO_1 job_info_1;
            JOB_INFO_2 job_info_2;
      }
      job;

}
JOB_INFO;

typedef struct spool_q_setjob
{
      POLICY_HND handle;
      uint32 jobid;
      uint32 level;
      JOB_INFO ctr;
      uint32 command;

}
SPOOL_Q_SETJOB;

typedef struct spool_r_setjob
{
      WERROR status;

}
SPOOL_R_SETJOB;

typedef struct spool_q_enumprinterdrivers
{
      uint32 name_ptr;
      UNISTR2 name;
      uint32 environment_ptr;
      UNISTR2 environment;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ENUMPRINTERDRIVERS;

typedef struct spool_r_enumprinterdrivers
{
      NEW_BUFFER *buffer;
      uint32 needed;
      uint32 returned;
      WERROR status;
}
SPOOL_R_ENUMPRINTERDRIVERS;

#define FORM_USER    0
#define FORM_BUILTIN 1
#define FORM_PRINTER 2

typedef struct spool_form_1
{
      uint32 flag;
      UNISTR name;
      uint32 width;
      uint32 length;
      uint32 left;
      uint32 top;
      uint32 right;
      uint32 bottom;
}
FORM_1;

typedef struct spool_q_enumforms
{
      POLICY_HND handle;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ENUMFORMS;

typedef struct spool_r_enumforms
{
      NEW_BUFFER *buffer;
      uint32 needed;
      uint32 numofforms;
      WERROR status;
}
SPOOL_R_ENUMFORMS;

typedef struct spool_q_getform
{
      POLICY_HND handle;
      UNISTR2 formname;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_GETFORM;

typedef struct spool_r_getform
{
      NEW_BUFFER *buffer;
      uint32 needed;
      WERROR status;
}
SPOOL_R_GETFORM;

typedef struct spool_printer_info_level_1
{
      uint32 flags;
      uint32 description_ptr;
      uint32 name_ptr;
      uint32 comment_ptr;
      UNISTR2 description;
      UNISTR2 name;
      UNISTR2 comment;  
} SPOOL_PRINTER_INFO_LEVEL_1;

typedef struct spool_printer_info_level_2
{
      uint32 servername_ptr;
      uint32 printername_ptr;
      uint32 sharename_ptr;
      uint32 portname_ptr;
      uint32 drivername_ptr;
      uint32 comment_ptr;
      uint32 location_ptr;
      uint32 devmode_ptr;
      uint32 sepfile_ptr;
      uint32 printprocessor_ptr;
      uint32 datatype_ptr;
      uint32 parameters_ptr;
      uint32 secdesc_ptr;
      uint32 attributes;
      uint32 priority;
      uint32 default_priority;
      uint32 starttime;
      uint32 untiltime;
      uint32 status;
      uint32 cjobs;
      uint32 averageppm;
      UNISTR2 servername;
      UNISTR2 printername;
      UNISTR2 sharename;
      UNISTR2 portname;
      UNISTR2 drivername;
      UNISTR2 comment;
      UNISTR2 location;
      UNISTR2 sepfile;
      UNISTR2 printprocessor;
      UNISTR2 datatype;
      UNISTR2 parameters;
}
SPOOL_PRINTER_INFO_LEVEL_2;

typedef struct spool_printer_info_level_3
{
      uint32 secdesc_ptr;
}
SPOOL_PRINTER_INFO_LEVEL_3;

typedef struct spool_printer_info_level
{
      uint32 level;
      uint32 info_ptr;
      SPOOL_PRINTER_INFO_LEVEL_1 *info_1;
      SPOOL_PRINTER_INFO_LEVEL_2 *info_2;
      SPOOL_PRINTER_INFO_LEVEL_3 *info_3;
}
SPOOL_PRINTER_INFO_LEVEL;

typedef struct spool_printer_driver_info_level_3
{
      uint32 cversion;
      uint32 name_ptr;
      uint32 environment_ptr;
      uint32 driverpath_ptr;
      uint32 datafile_ptr;
      uint32 configfile_ptr;
      uint32 helpfile_ptr;
      uint32 monitorname_ptr;
      uint32 defaultdatatype_ptr;
      uint32 dependentfilessize;
      uint32 dependentfiles_ptr;

      UNISTR2 name;
      UNISTR2 environment;
      UNISTR2 driverpath;
      UNISTR2 datafile;
      UNISTR2 configfile;
      UNISTR2 helpfile;
      UNISTR2 monitorname;
      UNISTR2 defaultdatatype;
      BUFFER5 dependentfiles;

}
SPOOL_PRINTER_DRIVER_INFO_LEVEL_3;

/* SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 structure */
typedef struct {
      uint32 version;
      uint32 name_ptr;
      uint32 environment_ptr;
      uint32 driverpath_ptr;
      uint32 datafile_ptr;
      uint32 configfile_ptr;
      uint32 helpfile_ptr;
      uint32 monitorname_ptr;
      uint32 defaultdatatype_ptr;
      uint32 dependentfiles_len;
      uint32 dependentfiles_ptr;
      uint32 previousnames_len;
      uint32 previousnames_ptr;
      NTTIME      driverdate;
      UINT64_S    driverversion;
      uint32      dummy4;
      uint32 mfgname_ptr;
      uint32 oemurl_ptr;
      uint32 hardwareid_ptr;
      uint32 provider_ptr;
      UNISTR2     name;
      UNISTR2     environment;
      UNISTR2     driverpath;
      UNISTR2     datafile;
      UNISTR2     configfile;
      UNISTR2     helpfile;
      UNISTR2     monitorname;
      UNISTR2     defaultdatatype;
      BUFFER5     dependentfiles;
      BUFFER5     previousnames;
      UNISTR2     mfgname;
      UNISTR2     oemurl;
      UNISTR2     hardwareid;
      UNISTR2     provider;
} SPOOL_PRINTER_DRIVER_INFO_LEVEL_6;


typedef struct spool_printer_driver_info_level
{
      uint32 level;
      uint32 ptr;
      SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *info_3;
      SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *info_6;
}
SPOOL_PRINTER_DRIVER_INFO_LEVEL;


/* this struct is undocumented */
/* thanks to the ddk ... */
typedef struct spool_user_level_1
{
      uint32 size;
      uint32 client_name_ptr;
      uint32 user_name_ptr;
      uint32 build;
      uint32 ver_major;
      uint32 ver_minor;
      uint32 processor;
      UNISTR2 client_name;
      UNISTR2 user_name;
}
SPOOL_USER_LEVEL_1;

typedef struct spool_user_level
{
      SPOOL_USER_LEVEL_1 *user_level_1;
}
SPOOL_USER_LEVEL;

typedef struct spool_q_setprinter
{
      POLICY_HND handle;
      uint32 level;
      SPOOL_PRINTER_INFO_LEVEL info;
      SEC_DESC_BUF *secdesc_ctr;
      DEVMODE_CTR devmode_ctr;

      uint32 command;

}
SPOOL_Q_SETPRINTER;

typedef struct spool_r_setprinter
{
      WERROR status;
}
SPOOL_R_SETPRINTER;

typedef struct spool_q_addprinter
{
      UNISTR2 server_name;
      uint32 level;
      SPOOL_PRINTER_INFO_LEVEL info;
      DEVMODE_CTR devmode_ctr;
      SEC_DESC_BUF *secdesc_ctr;
      uint32 user_level;
      SPOOL_USER_LEVEL user;
}
SPOOL_Q_ADDPRINTER;

typedef struct spool_r_addprinter
{
      WERROR status;
}
SPOOL_R_ADDPRINTER;

typedef struct spool_q_deleteprinter
{
      POLICY_HND handle;
}
SPOOL_Q_DELETEPRINTER;

typedef struct spool_r_deleteprinter
{
      POLICY_HND handle;
      WERROR status;
}
SPOOL_R_DELETEPRINTER;

typedef struct spool_q_abortprinter
{
      POLICY_HND handle;
}
SPOOL_Q_ABORTPRINTER;

typedef struct spool_r_abortprinter
{
      WERROR status;
}
SPOOL_R_ABORTPRINTER;


typedef struct spool_q_addprinterex
{
      uint32 server_name_ptr;
      UNISTR2 server_name;
      uint32 level;
      SPOOL_PRINTER_INFO_LEVEL info;
      DEVMODE_CTR devmode_ctr;
      SEC_DESC_BUF *secdesc_ctr;
      uint32 user_switch;
      SPOOL_USER_CTR user_ctr;
}
SPOOL_Q_ADDPRINTEREX;

typedef struct spool_r_addprinterex
{
      POLICY_HND handle;
      WERROR status;
}
SPOOL_R_ADDPRINTEREX;


typedef struct spool_q_addprinterdriver
{
      uint32 server_name_ptr;
      UNISTR2 server_name;
      uint32 level;
      SPOOL_PRINTER_DRIVER_INFO_LEVEL info;
}
SPOOL_Q_ADDPRINTERDRIVER;

typedef struct spool_r_addprinterdriver
{
      WERROR status;
}
SPOOL_R_ADDPRINTERDRIVER;


typedef struct driver_directory_1
{
      UNISTR name;
}
DRIVER_DIRECTORY_1;

typedef struct driver_info_ctr_info
{
      DRIVER_DIRECTORY_1 *info1;
}
DRIVER_DIRECTORY_CTR;

typedef struct spool_q_getprinterdriverdirectory
{
      uint32 name_ptr;
      UNISTR2 name;
      uint32 environment_ptr;
      UNISTR2 environment;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_GETPRINTERDRIVERDIR;

typedef struct spool_r_getprinterdriverdirectory
{
      NEW_BUFFER *buffer;
      uint32 needed;
      WERROR status;
}
SPOOL_R_GETPRINTERDRIVERDIR;

typedef struct spool_q_addprintprocessor
{
      uint32 server_ptr;
      UNISTR2 server;
      UNISTR2 environment;
      UNISTR2 path;
      UNISTR2 name;
}
SPOOL_Q_ADDPRINTPROCESSOR;

typedef struct spool_r_addprintprocessor
{
      WERROR status;
}
SPOOL_R_ADDPRINTPROCESSOR;


typedef struct spool_q_enumprintprocessors
{
      uint32 name_ptr;
      UNISTR2 name;
      uint32 environment_ptr;
      UNISTR2 environment;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ENUMPRINTPROCESSORS;

typedef struct printprocessor_1
{
      UNISTR name;
}
PRINTPROCESSOR_1;

typedef struct spool_r_enumprintprocessors
{
      NEW_BUFFER *buffer;
      uint32 needed;
      uint32 returned;
      WERROR status;
}
SPOOL_R_ENUMPRINTPROCESSORS;

typedef struct spool_q_enumprintprocdatatypes
{
      uint32 name_ptr;
      UNISTR2 name;
      uint32 processor_ptr;
      UNISTR2 processor;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ENUMPRINTPROCDATATYPES;

typedef struct ppdatatype_1
{
      UNISTR name;
}
PRINTPROCDATATYPE_1;

typedef struct spool_r_enumprintprocdatatypes
{
      NEW_BUFFER *buffer;
      uint32 needed;
      uint32 returned;
      WERROR status;
}
SPOOL_R_ENUMPRINTPROCDATATYPES;

typedef struct printmonitor_1
{
      UNISTR name;
}
PRINTMONITOR_1;

typedef struct printmonitor_2
{
      UNISTR name;
      UNISTR environment;
      UNISTR dll_name;
}
PRINTMONITOR_2;

typedef struct spool_q_enumprintmonitors
{
      uint32 name_ptr;
      UNISTR2 name;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_ENUMPRINTMONITORS;

typedef struct spool_r_enumprintmonitors
{
      NEW_BUFFER *buffer;
      uint32 needed;
      uint32 returned;
      WERROR status;
}
SPOOL_R_ENUMPRINTMONITORS;


typedef struct spool_q_enumprinterdata
{
      POLICY_HND handle;
      uint32 index;
      uint32 valuesize;
      uint32 datasize;
}
SPOOL_Q_ENUMPRINTERDATA;

typedef struct spool_r_enumprinterdata
{
      uint32 valuesize;
      uint16 *value;
      uint32 realvaluesize;
      uint32 type;
      uint32 datasize;
      uint8 *data;
      uint32 realdatasize;
      WERROR status;
}
SPOOL_R_ENUMPRINTERDATA;

typedef struct spool_q_setprinterdata
{
      POLICY_HND handle;
      UNISTR2 value;
      uint32 type;
      uint32 max_len;
      uint8 *data;
      uint32 real_len;
      uint32 numeric_data;
}
SPOOL_Q_SETPRINTERDATA;

typedef struct spool_r_setprinterdata
{
      WERROR status;
}
SPOOL_R_SETPRINTERDATA;

typedef struct spool_q_resetprinter
{
      POLICY_HND handle;
      uint32 datatype_ptr;
      UNISTR2 datatype;
      DEVMODE_CTR devmode_ctr;

} SPOOL_Q_RESETPRINTER;

typedef struct spool_r_resetprinter
{
      WERROR status;
} 
SPOOL_R_RESETPRINTER;



typedef struct _form
{
      uint32 flags;
      uint32 name_ptr;
      uint32 size_x;
      uint32 size_y;
      uint32 left;
      uint32 top;
      uint32 right;
      uint32 bottom;
      UNISTR2 name;
}
FORM;

typedef struct spool_q_addform
{
      POLICY_HND handle;
      uint32 level;
      uint32 level2;          /* This should really be part of the FORM structure */
      FORM form;
}
SPOOL_Q_ADDFORM;

typedef struct spool_r_addform
{
      WERROR status;
}
SPOOL_R_ADDFORM;

typedef struct spool_q_setform
{
      POLICY_HND handle;
      UNISTR2 name;
      uint32 level;
      uint32 level2;
      FORM form;
}
SPOOL_Q_SETFORM;

typedef struct spool_r_setform
{
      WERROR status;
}
SPOOL_R_SETFORM;

typedef struct spool_q_deleteform
{
      POLICY_HND handle;
      UNISTR2 name;
}
SPOOL_Q_DELETEFORM;

typedef struct spool_r_deleteform
{
      WERROR status;
}
SPOOL_R_DELETEFORM;

typedef struct spool_q_getjob
{
      POLICY_HND handle;
      uint32 jobid;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_GETJOB;

typedef struct pjob_info_info
{
      union
      {
            JOB_INFO_1 *job_info_1;
            JOB_INFO_2 *job_info_2;
            void *info;
      }
      job;

}
PJOB_INFO;

typedef struct spool_r_getjob
{
      NEW_BUFFER *buffer;
      uint32 needed;
      WERROR status;
}
SPOOL_R_GETJOB;

typedef struct spool_q_replyopenprinter
{
      UNISTR2 string;
      uint32 printer;
      uint32 type;
      uint32 unknown0;
      uint32 unknown1;
}
SPOOL_Q_REPLYOPENPRINTER;

typedef struct spool_r_replyopenprinter
{
      POLICY_HND handle;
      WERROR status;
}
SPOOL_R_REPLYOPENPRINTER;

typedef struct spool_q_routerreplyprinter
{
      POLICY_HND handle;
      uint32 condition;
      uint32 unknown1;  /* 0x00000001 */
      uint32 change_id;
      uint8  unknown2[5];     /* 0x0000000001 */
}
SPOOL_Q_ROUTERREPLYPRINTER;

typedef struct spool_r_routerreplyprinter
{
      WERROR status;
}
SPOOL_R_ROUTERREPLYPRINTER;

typedef struct spool_q_replycloseprinter
{
      POLICY_HND handle;
}
SPOOL_Q_REPLYCLOSEPRINTER;

typedef struct spool_r_replycloseprinter
{
      POLICY_HND handle;
      WERROR status;
}
SPOOL_R_REPLYCLOSEPRINTER;

typedef struct spool_q_rrpcn
{
      POLICY_HND handle;
      uint32 change_low;
      uint32 change_high;
      uint32 unknown0;
      uint32 unknown1;
      uint32 info_ptr;
      SPOOL_NOTIFY_INFO info; 
}
SPOOL_Q_REPLY_RRPCN;

typedef struct spool_r_rrpcn
{
      uint32 unknown0;
      WERROR status;
}
SPOOL_R_REPLY_RRPCN;

typedef struct spool_q_getprinterdataex
{
      POLICY_HND handle;
      UNISTR2 keyname;
        UNISTR2 valuename;
      uint32 size;
}
SPOOL_Q_GETPRINTERDATAEX;

typedef struct spool_r_getprinterdataex
{
      uint32 type;
      uint32 size;
      uint8 *data;
      uint32 needed;
      WERROR status;
}
SPOOL_R_GETPRINTERDATAEX;

typedef struct spool_q_setprinterdataex
{
      POLICY_HND handle;
      UNISTR2 key;
      UNISTR2 value;
      uint32 type;
      uint32 max_len;
      uint8 *data;
      uint32 real_len;
      uint32 numeric_data;
}
SPOOL_Q_SETPRINTERDATAEX;

typedef struct spool_r_setprinterdataex
{
      WERROR status;
}
SPOOL_R_SETPRINTERDATAEX;


typedef struct spool_q_enumprinterkey
{
      POLICY_HND handle;
      UNISTR2 key;
      uint32 size;
}
SPOOL_Q_ENUMPRINTERKEY;

typedef struct spool_r_enumprinterkey
{
      BUFFER5 keys;
      uint32 needed;    /* in bytes */
      WERROR status;
}
SPOOL_R_ENUMPRINTERKEY;

typedef struct printer_enum_values
{
      UNISTR valuename;
      uint32 value_len;
      uint32 type;
      uint8  *data;
      uint32 data_len; 
      
}
PRINTER_ENUM_VALUES;

typedef struct printer_enum_values_ctr
{
      uint32 size;
      uint32 size_of_array;
      PRINTER_ENUM_VALUES *values;
}
PRINTER_ENUM_VALUES_CTR;

typedef struct spool_q_enumprinterdataex
{
      POLICY_HND handle;
      UNISTR2 key;
      uint32 size;
}
SPOOL_Q_ENUMPRINTERDATAEX;

typedef struct spool_r_enumprinterdataex
{
      PRINTER_ENUM_VALUES_CTR ctr;
      uint32 needed;
      uint32 returned;
      WERROR status;
}
SPOOL_R_ENUMPRINTERDATAEX;

typedef struct printprocessor_directory_1
{
      UNISTR name;
}
PRINTPROCESSOR_DIRECTORY_1;

typedef struct spool_q_getprintprocessordirectory
{
      UNISTR2 name;
      UNISTR2 environment;
      uint32 level;
      NEW_BUFFER *buffer;
      uint32 offered;
}
SPOOL_Q_GETPRINTPROCESSORDIRECTORY;

typedef struct spool_r_getprintprocessordirectory
{
      NEW_BUFFER *buffer;
      uint32 needed;
      WERROR status;
}
SPOOL_R_GETPRINTPROCESSORDIRECTORY;

#define PRINTER_DRIVER_VERSION 2
#define PRINTER_DRIVER_ARCHITECTURE "Windows NT x86"

#endif /* _RPC_SPOOLSS_H */


Generated by  Doxygen 1.6.0   Back to index