This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'.
[tprouty/samba.git] / source / include / rpc_spoolss.h
index 82d7d70d4ffea9e6b53d5a75e29600a9bb0c59bd..f96b4fa96ab340ce5ab020131a9c17920d1dab8d 100755 (executable)
@@ -5,6 +5,7 @@
    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
 #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_OPENPRINTER                            0x01
 #define SPOOLSS_GETPRINTERDRIVER                       0x0b
-#define SPOOLSS_GETPRINTPROCESSORDIRECTORY             0x10
 #define SPOOLSS_READPRINTER                            0x16
 #define SPOOLSS_WAITFORPRINTERCHANGE                   0x1c
 #define SPOOLSS_ADDPORT                                        0x25
 #define SPOOLSS_DELETEPRINTPROCESSOR                   0x30
 #define SPOOLSS_ADDPRINTPROVIDOR                       0x31
 #define SPOOLSS_DELETEPRINTPROVIDOR                    0x32
-#define SPOOLSS_RESETPRINTER                           0x34
 #define SPOOLSS_FINDFIRSTPRINTERCHANGENOTIFICATION     0x36
 #define SPOOLSS_FINDNEXTPRINTERCHANGENOTIFICATION      0x37
 #define SPOOLSS_ROUTERFINDFIRSTPRINTERNOTIFICATIONOLD  0x39
-#define SPOOLSS_ROUTERREPLYPRINTER                     0x3b
 #define SPOOLSS_ADDPORTEX                              0x3d
 #define SPOOLSS_REMOTEFINDFIRSTPRINTERCHANGENOTIFICATION0x3e
 #define SPOOLSS_SPOOLERINIT                            0x3f
 #define SPOOLSS_RESETPRINTEREX                         0x40
-#define SPOOLSS_ROUTERREFRESHPRINTERCHANGENOTIFICATION 0x42
-#define SPOOLSS_GETPRINTERDATAEX                       0x4e
 */
 
 /* those are implemented */
 #define SPOOLSS_ENUMPRINTERS                           0x00
+#define SPOOLSS_OPENPRINTER                            0x01
 #define SPOOLSS_SETJOB                                 0x02
 #define SPOOLSS_GETJOB                                 0x03
 #define SPOOLSS_ENUMJOBS                               0x04
@@ -75,6 +68,7 @@
 #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_ENUMPORTS                              0x23
 #define SPOOLSS_ENUMMONITORS                           0x24
 #define SPOOLSS_ENUMPRINTPROCDATATYPES                 0x33
+#define SPOOLSS_RESETPRINTER                           0x34
 #define SPOOLSS_GETPRINTERDRIVER2                      0x35
-/* find close printer notification */
-#define SPOOLSS_FCPN                                   0x38
+#define SPOOLSS_FCPN                                   0x38    /* FindClosePrinterNotify */
 #define SPOOLSS_REPLYOPENPRINTER                       0x3a
+#define SPOOLSS_ROUTERREPLYPRINTER                     0x3b
 #define SPOOLSS_REPLYCLOSEPRINTER                      0x3c
-/* remote find first printer change notifyEx */
-#define SPOOLSS_RFFPCNEX                               0x41
-/*SPOOLSS_ROUTERREFRESHPRINTERCHANGENOTIFICATION */
-#define SPOOLSS_RRPCN                                  0x42
-/* remote find next printer change notifyEx */
-#define SPOOLSS_RFNPCNEX                               0x43
+#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 SPOOLSS_DELETEPRINTERDATAEX                    0x51
+#define SPOOLSS_DELETEPRINTERKEY                       0x52
+#define SPOOLSS_DELETEPRINTERDRIVEREX                  0x54
+#define SPOOLSS_ADDPRINTERDRIVEREX                     0x59
+
 
 #define PRINTER_CONTROL_UNPAUSE                0x00000000
 #define PRINTER_CONTROL_PAUSE          0x00000001
 #define PRINTER_CONTROL_PURGE          0x00000003
 #define PRINTER_CONTROL_SET_STATUS     0x00000004
 
+#define PRINTER_STATUS_OK               0x00000000
 #define PRINTER_STATUS_PAUSED          0x00000001
 #define PRINTER_STATUS_ERROR           0x00000002
 #define PRINTER_STATUS_PENDING_DELETION        0x00000004
 
 /* 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
+#define JOB_STATUS_QUEUED               0x0000
+#define JOB_STATUS_PAUSED              0x0001
+#define JOB_STATUS_ERROR               0x0002
+#define JOB_STATUS_DELETING            0x0004
+#define JOB_STATUS_SPOOLING            0x0008
+#define JOB_STATUS_PRINTING            0x0010
+#define JOB_STATUS_OFFLINE             0x0020
+#define JOB_STATUS_PAPEROUT            0x0040
+#define JOB_STATUS_PRINTED             0x0080
+#define JOB_STATUS_DELETED             0x0100
+#define JOB_STATUS_BLOCKED             0x0200
+#define JOB_STATUS_USER_INTERVENTION   0x0400
 
 /* ACE masks for the various print permissions */
 
 #define JOB_WRITE      STANDARD_RIGHTS_WRITE_ACCESS|JOB_ACCESS_ADMINISTER
 #define JOB_EXECUTE    STANDARD_RIGHTS_EXECUTE_ACCESS|JOB_ACCESS_ADMINISTER
 
-#define ONE_VALUE 01
-#define TWO_VALUE 02
-#define POINTER   03
+/* Notify field types */
+
+#define NOTIFY_ONE_VALUE 1             /* Notify data is stored in value1 */
+#define NOTIFY_TWO_VALUE 2             /* Notify data is stored in value2 */
+#define NOTIFY_POINTER   3             /* Data is a pointer to a buffer */
+#define NOTIFY_STRING    4             /* Data is a pointer to a buffer w/length */
+#define NOTIFY_SECDESC   5             /* Data is a security descriptor */
 
 #define PRINTER_NOTIFY_TYPE 0x00
 #define JOB_NOTIFY_TYPE     0x01
 #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_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)
 #define PRINTER_ATTRIBUTE_ENABLE_BIDI          0x00000800
 
 #define PRINTER_ATTRIBUTE_RAW_ONLY             0x00001000
+#define PRINTER_ATTRIBUTE_PUBLISHED            0x00002000
+
+#define PRINTER_ATTRIBUTE_SAMBA                        (PRINTER_ATTRIBUTE_RAW_ONLY|\
+                                                PRINTER_ATTRIBUTE_SHARED|\
+                                                PRINTER_ATTRIBUTE_NETWORK)
 
 #define NO_PRIORITY     0
 #define MAX_PRIORITY   99
 #define PRINTER_ENUM_ICON7             0x00400000
 #define PRINTER_ENUM_ICON8             0x00800000
 
+/* FLAGS for SPOOLSS_DELETEPRINTERDRIVEREX */
+
+#define DPD_DELETE_UNUSED_FILES                0x00000001
+#define DPD_DELETE_SPECIFIC_VERSION    0x00000002
+#define DPD_DELETE_ALL_FILES           0x00000004
+
+#define DRIVER_ANY_VERSION             0xffffffff
+#define DRIVER_MAX_VERSION             4
+
+/* FLAGS for SPOOLSS_ADDPRINTERDRIVEREX */
+
+#define APD_STRICT_UPGRADE             0x00000001
+#define APD_STRICT_DOWNGRADE           0x00000002
+#define APD_COPY_ALL_FILES             0x00000004
+#define APD_COPY_NEW_FILES             0x00000008
+
+
 /* this struct is undocumented */
 /* thanks to the ddk ... */
 typedef struct spool_user_1
@@ -388,6 +447,44 @@ typedef struct spool_user_ctr_info
 }
 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;
@@ -445,6 +542,23 @@ typedef struct _printer_default
 }
 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
 {
@@ -592,6 +706,23 @@ typedef struct spool_r_deleteprinterdriver
 }
 SPOOL_R_DELETEPRINTERDRIVER;
 
+typedef struct spool_q_deleteprinterdriverex
+{
+       uint32 server_ptr;
+       UNISTR2 server;
+       UNISTR2 arch;
+       UNISTR2 driver;
+       uint32 delete_flags;
+       uint32 version;
+}
+SPOOL_Q_DELETEPRINTERDRIVEREX;
+
+typedef struct spool_r_deleteprinterdriverex
+{
+       WERROR status;
+}
+SPOOL_R_DELETEPRINTERDRIVEREX;
+
 
 typedef struct spool_doc_info_1
 {
@@ -676,15 +807,16 @@ typedef struct spool_notify_info_data
        uint16 field;
        uint32 reserved;
        uint32 id;
-       union
-       {
+       union {
                uint32 value[2];
-               struct
-               {
+               struct {
                        uint32 length;
                        uint16 *string;
-               }
-               data;
+               } data;
+               struct {
+                       uint32  size;
+                       SEC_DESC *desc;
+               } sd;
        }
        notify_data;
        uint32 size;
@@ -844,6 +976,36 @@ typedef struct printer_info_3
 }
 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;
+
+#define SPOOL_DS_PUBLISH       1
+#define SPOOL_DS_UPDATE                2
+#define SPOOL_DS_UNPUBLISH     4
+#define SPOOL_DS_PENDING        0x80000000
+
+typedef struct printer_info_7
+{
+       UNISTR guid; /* text form of printer guid */
+       uint32 action;
+}
+PRINTER_INFO_7;
+
 typedef struct spool_q_enumprinters
 {
        uint32 flags;
@@ -861,6 +1023,8 @@ typedef struct printer_info_ctr_info
        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;
 
@@ -1093,8 +1257,8 @@ typedef struct job_info_ctr_info
 {
        union
        {
-               JOB_INFO_1 **job_info_1;
-               JOB_INFO_2 **job_info_2;
+               JOB_INFO_1 *job_info_1;
+               JOB_INFO_2 *job_info_2;
                void *info;
        } job;
 
@@ -1138,6 +1302,12 @@ typedef struct s_port_info_2
 }
 PORT_INFO_2;
 
+/* Port Type bits */
+#define PORT_TYPE_WRITE         0x0001
+#define PORT_TYPE_READ          0x0002
+#define PORT_TYPE_REDIRECTED    0x0004
+#define PORT_TYPE_NET_ATTACHED  0x0008
+
 typedef struct spool_q_enumports
 {
        uint32 name_ptr;
@@ -1226,6 +1396,10 @@ typedef struct spool_r_enumprinterdrivers
 }
 SPOOL_R_ENUMPRINTERDRIVERS;
 
+#define FORM_USER    0
+#define FORM_BUILTIN 1
+#define FORM_PRINTER 2
+
 typedef struct spool_form_1
 {
        uint32 flag;
@@ -1306,7 +1480,7 @@ typedef struct spool_printer_info_level_2
        uint32 default_priority;
        uint32 starttime;
        uint32 untiltime;
-       WERROR status;
+       uint32 status;
        uint32 cjobs;
        uint32 averageppm;
        UNISTR2 servername;
@@ -1320,7 +1494,6 @@ typedef struct spool_printer_info_level_2
        UNISTR2 printprocessor;
        UNISTR2 datatype;
        UNISTR2 parameters;
-       SEC_DESC_BUF *secdesc;
 }
 SPOOL_PRINTER_INFO_LEVEL_2;
 
@@ -1330,6 +1503,14 @@ typedef struct spool_printer_info_level_3
 }
 SPOOL_PRINTER_INFO_LEVEL_3;
 
+typedef struct spool_printer_info_level_7
+{
+       uint32 guid_ptr;
+       uint32 action;
+       UNISTR2 guid;
+}
+SPOOL_PRINTER_INFO_LEVEL_7;
+
 typedef struct spool_printer_info_level
 {
        uint32 level;
@@ -1337,6 +1518,7 @@ typedef struct spool_printer_info_level
        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_7 *info_7;
 }
 SPOOL_PRINTER_INFO_LEVEL;
 
@@ -1462,10 +1644,8 @@ typedef struct spool_q_addprinter
        UNISTR2 server_name;
        uint32 level;
        SPOOL_PRINTER_INFO_LEVEL info;
-       uint32 unk0;
-       uint32 unk1;
-       uint32 unk2;
-       uint32 unk3;
+       DEVMODE_CTR devmode_ctr;
+       SEC_DESC_BUF *secdesc_ctr;
        uint32 user_level;
        SPOOL_USER_LEVEL user;
 }
@@ -1509,10 +1689,8 @@ typedef struct spool_q_addprinterex
        UNISTR2 server_name;
        uint32 level;
        SPOOL_PRINTER_INFO_LEVEL info;
-       uint32 unk0;
-       uint32 unk1;
-       uint32 unk2;
-       uint32 unk3;
+       DEVMODE_CTR devmode_ctr;
+       SEC_DESC_BUF *secdesc_ctr;
        uint32 user_switch;
        SPOOL_USER_CTR user_ctr;
 }
@@ -1541,6 +1719,22 @@ typedef struct spool_r_addprinterdriver
 }
 SPOOL_R_ADDPRINTERDRIVER;
 
+typedef struct spool_q_addprinterdriverex
+{
+       uint32 server_name_ptr;
+       UNISTR2 server_name;
+       uint32 level;
+       SPOOL_PRINTER_DRIVER_INFO_LEVEL info;
+       uint32 copy_flags;
+}
+SPOOL_Q_ADDPRINTERDRIVEREX;
+
+typedef struct spool_r_addprinterdriverex
+{
+       WERROR status;
+}
+SPOOL_R_ADDPRINTERDRIVEREX;
+
 
 typedef struct driver_directory_1
 {
@@ -1719,6 +1913,23 @@ typedef struct spool_r_setprinterdata
 }
 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;
@@ -1737,7 +1948,7 @@ typedef struct spool_q_addform
 {
        POLICY_HND handle;
        uint32 level;
-       uint32 level2;
+       uint32 level2;          /* This should really be part of the FORM structure */
        FORM form;
 }
 SPOOL_Q_ADDFORM;
@@ -1825,6 +2036,22 @@ typedef struct spool_r_replyopenprinter
 }
 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;
@@ -1857,7 +2084,151 @@ typedef struct spool_r_rrpcn
 }
 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_deleteprinterdataex
+{
+       POLICY_HND handle;
+       UNISTR2 keyname;
+       UNISTR2 valuename;
+}
+SPOOL_Q_DELETEPRINTERDATAEX;
+
+typedef struct spool_r_deleteprinterdataex
+{
+       WERROR status;
+}
+SPOOL_R_DELETEPRINTERDATAEX;
+
+
+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 spool_q_deleteprinterkey
+{
+       POLICY_HND handle;
+       UNISTR2 keyname;
+}
+SPOOL_Q_DELETEPRINTERKEY;
+
+typedef struct spool_r_deleteprinterkey
+{
+       WERROR status;
+}
+SPOOL_R_DELETEPRINTERKEY;
+
+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 */
+