s3-spoolss: move PRINTER_ENUM_ICONMASK to IDL.
[samba.git] / source3 / include / rpc_spoolss.h
old mode 100755 (executable)
new mode 100644 (file)
index 067acd6..feabd3f
@@ -1,15 +1,14 @@
 /* 
    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.
+   Copyright (C) Gerald Carter                2001-2006.
    
    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
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    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.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#include "librpc/gen_ndr/spoolss.h"
+
 #ifndef _RPC_SPOOLSS_H         /* _RPC_SPOOLSS_H */
 #define _RPC_SPOOLSS_H
 
 #define SPOOLSS_DELETEPRINTERDATAEX                    0x51
 #define SPOOLSS_DELETEPRINTERKEY                       0x52
 #define SPOOLSS_DELETEPRINTERDRIVEREX                  0x54
+#define SPOOLSS_XCVDATAPORT                            0x58
 #define SPOOLSS_ADDPRINTERDRIVEREX                     0x59
 
+/* 
+ * Special strings for the OpenPrinter() call.  See the MSDN DDK
+ * docs on the XcvDataPort() for more details.
+ */
+
+#define SPL_LOCAL_PORT            "Local Port"
+#define SPL_TCPIP_PORT            "Standard TCP/IP Port"
+#define SPL_XCV_MONITOR_LOCALMON  ",XcvMonitor Local Port"
+#define SPL_XCV_MONITOR_TCPMON    ",XcvMonitor Standard TCP/IP Port"
+
 
 #define PRINTER_CONTROL_UNPAUSE                0x00000000
 #define PRINTER_CONTROL_PAUSE          0x00000001
 #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
-#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
+#define JOB_ACCESS_READ                        0x00000020
 
 /* JOB status codes. */
 
 #define JOB_STATUS_BLOCKED             0x0200
 #define JOB_STATUS_USER_INTERVENTION   0x0400
 
-/* 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
-
 /* Notify field types */
 
 #define NOTIFY_ONE_VALUE 1             /* Notify data is stored in value1 */
 
 #define PRINTER_NOTIFY_TYPE 0x00
 #define JOB_NOTIFY_TYPE     0x01
+#define PRINT_TABLE_END     0xFF
 
 #define MAX_PRINTER_NOTIFY 26
 #define MAX_JOB_NOTIFY 24
 
 #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
 
 /*
@@ -355,57 +255,17 @@ PRINTER_MESSAGE_INFO;
  * 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 PRINTER_ATTRIBUTE_SAMBA                        (PRINTER_ATTRIBUTE_RAW_ONLY|\
+                                                PRINTER_ATTRIBUTE_SHARED|\
+                                                PRINTER_ATTRIBUTE_LOCAL)
+#define PRINTER_ATTRIBUTE_NOT_SAMBA            (PRINTER_ATTRIBUTE_NETWORK)
 
 #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
-
-/* 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
@@ -420,27 +280,22 @@ PRINTER_MESSAGE_INFO;
 
 /* this struct is undocumented */
 /* thanks to the ddk ... */
-typedef struct spool_user_1
-{
+typedef struct {
        uint32 size;            /* length of user_name & client_name + 2? */
-       uint32 client_name_ptr;
-       uint32 user_name_ptr;
+       UNISTR2 *client_name;
+       UNISTR2 *user_name;
        uint32 build;
        uint32 major;
        uint32 minor;
        uint32 processor;
-       UNISTR2 client_name;
-       UNISTR2 user_name;
-}
-SPOOL_USER_1;
+} SPOOL_USER_1;
 
-typedef struct spool_user_ctr_info
-{
+typedef struct {
        uint32 level;
-       uint32 ptr;
-       SPOOL_USER_1 user1;
-}
-SPOOL_USER_CTR;
+       union {
+               SPOOL_USER_1 *user1;
+       } user;
+SPOOL_USER_CTR;
 
 /*
  * various bits in the DEVICEMODE.fields member
@@ -516,7 +371,7 @@ typedef struct devicemode
        uint32 reserved2;
        uint32 panningwidth;
        uint32 panningheight;
-       uint8 *private;
+       uint8 *dev_private;
 }
 DEVICEMODE;
 
@@ -537,41 +392,33 @@ 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;
+/********************************************/
+
+typedef struct {
+       UNISTR2 *printername;
        PRINTER_DEFAULT printer_default;
-}
-SPOOL_Q_OPEN_PRINTER;
+} SPOOL_Q_OPEN_PRINTER;
 
-/* SPOOL_R_OPEN_PRINTER reply to an open printer */
-typedef struct spool_r_open_printer
-{
+typedef struct {
        POLICY_HND handle;      /* handle used along all transactions (20*uint8) */
        WERROR status;
-}
-SPOOL_R_OPEN_PRINTER;
+} 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;
+/********************************************/
+
+typedef struct {
+       UNISTR2 *printername;
        PRINTER_DEFAULT printer_default;
        uint32 user_switch;
        SPOOL_USER_CTR user_ctr;
-}
-SPOOL_Q_OPEN_PRINTER_EX;
+} SPOOL_Q_OPEN_PRINTER_EX;
 
-/* SPOOL_R_OPEN_PRINTER_EX reply to an open printer */
-typedef struct spool_r_open_printer_ex
-{
+typedef struct {
        POLICY_HND handle;      /* handle used along all transactions (20*uint8) */
        WERROR status;
-}
-SPOOL_R_OPEN_PRINTER_EX;
+} SPOOL_R_OPEN_PRINTER_EX;
+
+/********************************************/
 
 typedef struct spool_notify_option_type
 {
@@ -607,15 +454,6 @@ typedef struct s_header_type
 }
 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
 {
@@ -635,90 +473,6 @@ typedef struct spool_r_getprinterdata
 }
 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_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
 {
        uint32 p_docname;
@@ -758,34 +512,6 @@ typedef struct spool_r_startdocprinter
 }
 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;
@@ -815,7 +541,7 @@ typedef struct spool_notify_info_data
        }
        notify_data;
        uint32 size;
-       BOOL enc_type;
+       uint32 enc_type;
 } SPOOL_NOTIFY_INFO_DATA;
 
 typedef struct spool_notify_info
@@ -866,20 +592,6 @@ typedef struct spool_r_rfnpcnex
 }
 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;
@@ -966,7 +678,6 @@ PRINTER_INFO_2;
 
 typedef struct printer_info_3
 {
-       uint32 flags;
        SEC_DESC *secdesc;
 }
 PRINTER_INFO_3;
@@ -989,6 +700,17 @@ typedef struct printer_info_5
 }
 PRINTER_INFO_5;
 
+typedef struct printer_info_6
+{
+       uint32 status;
+}
+PRINTER_INFO_6;
+
+#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 */
@@ -1002,7 +724,7 @@ typedef struct spool_q_enumprinters
        uint32 servername_ptr;
        UNISTR2 servername;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ENUMPRINTERS;
@@ -1015,12 +737,13 @@ typedef struct printer_info_ctr_info
        PRINTER_INFO_3 *printers_3;
        PRINTER_INFO_4 *printers_4;
        PRINTER_INFO_5 *printers_5;
+       PRINTER_INFO_7 *printers_7;
 }
 PRINTER_INFO_CTR;
 
 typedef struct spool_r_enumprinters
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;          /* bytes needed */
        uint32 returned;        /* number of printers */
        WERROR status;
@@ -1032,7 +755,7 @@ typedef struct spool_q_getprinter
 {
        POLICY_HND handle;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_GETPRINTER;
@@ -1050,7 +773,7 @@ typedef struct printer_info_info
 
 typedef struct spool_r_getprinter
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        WERROR status;
 } SPOOL_R_GETPRINTER;
@@ -1124,7 +847,7 @@ typedef struct spool_q_getprinterdriver2
        uint32 architecture_ptr;
        UNISTR2 architecture;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
        uint32 clientmajorversion;
        uint32 clientminorversion;
@@ -1133,7 +856,7 @@ SPOOL_Q_GETPRINTERDRIVER2;
 
 typedef struct spool_r_getprinterdriver2
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        uint32 servermajorversion;
        uint32 serverminorversion;
@@ -1154,14 +877,14 @@ typedef struct spool_q_addjob
 {
        POLICY_HND handle;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ADDJOB;
 
 typedef struct spool_r_addjob
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        WERROR status;
 }
@@ -1238,7 +961,7 @@ typedef struct spool_q_enumjobs
        uint32 firstjob;
        uint32 numofjobs;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ENUMJOBS;
@@ -1256,7 +979,7 @@ typedef struct job_info_ctr_info
 
 typedef struct spool_r_enumjobs
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        uint32 returned;
        WERROR status;
@@ -1292,12 +1015,18 @@ 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;
        UNISTR2 name;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ENUMPORTS;
@@ -1316,7 +1045,7 @@ PORT_INFO_CTR;
 
 typedef struct spool_r_enumports
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;          /* bytes needed */
        uint32 returned;        /* number of printers */
        WERROR status;
@@ -1366,14 +1095,14 @@ typedef struct spool_q_enumprinterdrivers
        uint32 environment_ptr;
        UNISTR2 environment;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ENUMPRINTERDRIVERS;
 
 typedef struct spool_r_enumprinterdrivers
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        uint32 returned;
        WERROR status;
@@ -1401,38 +1130,20 @@ typedef struct spool_q_enumforms
 {
        POLICY_HND handle;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ENUMFORMS;
 
 typedef struct spool_r_enumforms
 {
-       NEW_BUFFER *buffer;
+       RPC_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;
@@ -1549,7 +1260,7 @@ typedef struct {
        uint32 previousnames_len;
        uint32 previousnames_ptr;
        NTTIME  driverdate;
-       UINT64_S        driverversion;
+       uint64  driverversion;
        uint32  dummy4;
        uint32 mfgname_ptr;
        uint32 oemurl_ptr;
@@ -1582,28 +1293,6 @@ typedef struct spool_printer_driver_info_level
 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 major;
-       uint32 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;
@@ -1623,70 +1312,24 @@ typedef struct spool_r_setprinter
 }
 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;
+typedef struct {
+       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;
+} SPOOL_Q_ADDPRINTEREX;
 
-typedef struct spool_r_addprinterex
-{
+typedef struct {
        POLICY_HND handle;
        WERROR status;
-}
-SPOOL_R_ADDPRINTEREX;
+} SPOOL_R_ADDPRINTEREX;
 
+/********************************************/
 
 typedef struct spool_q_addprinterdriver
 {
@@ -1739,14 +1382,14 @@ typedef struct spool_q_getprinterdriverdirectory
        uint32 environment_ptr;
        UNISTR2 environment;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_GETPRINTERDRIVERDIR;
 
 typedef struct spool_r_getprinterdriverdirectory
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        WERROR status;
 }
@@ -1776,7 +1419,7 @@ typedef struct spool_q_enumprintprocessors
        uint32 environment_ptr;
        UNISTR2 environment;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ENUMPRINTPROCESSORS;
@@ -1789,7 +1432,7 @@ PRINTPROCESSOR_1;
 
 typedef struct spool_r_enumprintprocessors
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        uint32 returned;
        WERROR status;
@@ -1803,7 +1446,7 @@ typedef struct spool_q_enumprintprocdatatypes
        uint32 processor_ptr;
        UNISTR2 processor;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ENUMPRINTPROCDATATYPES;
@@ -1816,7 +1459,7 @@ PRINTPROCDATATYPE_1;
 
 typedef struct spool_r_enumprintprocdatatypes
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        uint32 returned;
        WERROR status;
@@ -1842,14 +1485,14 @@ typedef struct spool_q_enumprintmonitors
        uint32 name_ptr;
        UNISTR2 name;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_ENUMPRINTMONITORS;
 
 typedef struct spool_r_enumprintmonitors
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        uint32 returned;
        WERROR status;
@@ -1928,56 +1571,12 @@ typedef struct _form
 }
 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;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_GETJOB;
@@ -1997,7 +1596,7 @@ PJOB_INFO;
 
 typedef struct spool_r_getjob
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        WERROR status;
 }
@@ -2107,21 +1706,6 @@ typedef struct spool_r_setprinterdataex
 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;
@@ -2138,19 +1722,6 @@ typedef struct spool_r_enumprinterkey
 }
 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;
@@ -2198,19 +1769,59 @@ typedef struct spool_q_getprintprocessordirectory
        UNISTR2 name;
        UNISTR2 environment;
        uint32 level;
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 offered;
 }
 SPOOL_Q_GETPRINTPROCESSORDIRECTORY;
 
 typedef struct spool_r_getprintprocessordirectory
 {
-       NEW_BUFFER *buffer;
+       RPC_BUFFER *buffer;
        uint32 needed;
        WERROR status;
 }
 SPOOL_R_GETPRINTPROCESSORDIRECTORY;
 
+/**************************************/
+
+#define MAX_PORTNAME           64
+#define MAX_NETWORK_NAME       49
+#define MAX_SNMP_COMM_NAME     33
+#define        MAX_QUEUE_NAME          33
+#define MAX_IPADDR_STRING      17
+               
+typedef struct {
+       uint16 portname[MAX_PORTNAME];
+       uint32 version;
+       uint32 protocol;
+       uint32 size;
+       uint32 reserved;
+       uint16 hostaddress[MAX_NETWORK_NAME];
+       uint16 snmpcommunity[MAX_SNMP_COMM_NAME];
+       uint32 dblspool;
+       uint16 queue[MAX_QUEUE_NAME];
+       uint16 ipaddress[MAX_IPADDR_STRING];
+       uint32 port;
+       uint32 snmpenabled;
+       uint32 snmpdevindex;
+} SPOOL_PORT_DATA_1;
+
+typedef struct {
+       POLICY_HND handle;
+       UNISTR2 dataname;
+       RPC_BUFFER indata;
+       uint32 indata_len;
+       uint32 offered;
+       uint32 unknown;
+} SPOOL_Q_XCVDATAPORT;
+
+typedef struct {
+       RPC_BUFFER outdata;
+       uint32 needed;
+       uint32 unknown;
+       WERROR status;
+} SPOOL_R_XCVDATAPORT;
+
 #define PRINTER_DRIVER_VERSION 2
 #define PRINTER_DRIVER_ARCHITECTURE "Windows NT x86"