s3: re-run make samba3-idl.
[jra/samba/.git] / librpc / gen_ndr / cli_spoolss.c
index 0255d00b0f4ac08c838bc779279a0a7ac44e7c91..02a05b94ff85a1ce918cbd519cfd40ab83fb35ca 100644 (file)
@@ -13,9 +13,9 @@ NTSTATUS rpccli_spoolss_EnumPrinters(struct rpc_pipe_client *cli,
                                     uint32_t level /* [in]  */,
                                     DATA_BLOB *buffer /* [in] [unique] */,
                                     uint32_t offered /* [in]  */,
-                                    union spoolss_PrinterInfo *info /* [out] [unique,switch_is(level),size_is(count)] */,
+                                    uint32_t *count /* [out] [ref] */,
+                                    union spoolss_PrinterInfo *info /* [out] [unique,switch_is(level),size_is(*count)] */,
                                     uint32_t *needed /* [out] [ref] */,
-                                    uint32_t count /* [out]  */,
                                     WERROR *werror)
 {
        struct spoolss_EnumPrinters r;
@@ -51,11 +51,11 @@ NTSTATUS rpccli_spoolss_EnumPrinters(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *count = *r.out.count;
        if (info && r.out.info) {
-               memcpy(info, r.out.info, count * sizeof(*info));
+               memcpy(info, r.out.info, *count * sizeof(*info));
        }
        *needed = *r.out.needed;
-       return NT_STATUS_NOT_SUPPORTED;
 
        /* Return result */
        if (werror) {
@@ -230,9 +230,9 @@ NTSTATUS rpccli_spoolss_EnumJobs(struct rpc_pipe_client *cli,
                                 uint32_t level /* [in]  */,
                                 DATA_BLOB *buffer /* [in] [unique] */,
                                 uint32_t offered /* [in]  */,
-                                union spoolss_JobInfo *info /* [out] [unique,switch_is(level),size_is(count)] */,
+                                uint32_t *count /* [out] [ref] */,
+                                union spoolss_JobInfo *info /* [out] [unique,switch_is(level),size_is(*count)] */,
                                 uint32_t *needed /* [out] [ref] */,
-                                uint32_t count /* [out]  */,
                                 WERROR *werror)
 {
        struct spoolss_EnumJobs r;
@@ -269,11 +269,11 @@ NTSTATUS rpccli_spoolss_EnumJobs(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *count = *r.out.count;
        if (info && r.out.info) {
-               memcpy(info, r.out.info, count * sizeof(*info));
+               memcpy(info, r.out.info, *count * sizeof(*info));
        }
        *needed = *r.out.needed;
-       return NT_STATUS_NOT_SUPPORTED;
 
        /* Return result */
        if (werror) {
@@ -370,10 +370,9 @@ NTSTATUS rpccli_spoolss_DeletePrinter(struct rpc_pipe_client *cli,
 NTSTATUS rpccli_spoolss_SetPrinter(struct rpc_pipe_client *cli,
                                   TALLOC_CTX *mem_ctx,
                                   struct policy_handle *handle /* [in] [ref] */,
-                                  uint32_t level /* [in]  */,
-                                  union spoolss_SetPrinterInfo info /* [in] [switch_is(level)] */,
-                                  struct spoolss_DevmodeContainer devmode_ctr /* [in]  */,
-                                  struct sec_desc_buf secdesc_ctr /* [in]  */,
+                                  struct spoolss_SetPrinterInfoCtr *info_ctr /* [in] [ref] */,
+                                  struct spoolss_DevmodeContainer *devmode_ctr /* [in] [ref] */,
+                                  struct sec_desc_buf *secdesc_ctr /* [in] [ref] */,
                                   enum spoolss_PrinterControl command /* [in]  */,
                                   WERROR *werror)
 {
@@ -382,8 +381,7 @@ NTSTATUS rpccli_spoolss_SetPrinter(struct rpc_pipe_client *cli,
 
        /* In parameters */
        r.in.handle = handle;
-       r.in.level = level;
-       r.in.info = info;
+       r.in.info_ctr = info_ctr;
        r.in.devmode_ctr = devmode_ctr;
        r.in.secdesc_ctr = secdesc_ctr;
        r.in.command = command;
@@ -477,12 +475,16 @@ NTSTATUS rpccli_spoolss_GetPrinter(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_AddPrinterDriver(struct rpc_pipe_client *cli,
                                         TALLOC_CTX *mem_ctx,
+                                        const char *servername /* [in] [unique,charset(UTF16)] */,
+                                        struct spoolss_AddDriverInfoCtr *info_ctr /* [in] [ref] */,
                                         WERROR *werror)
 {
        struct spoolss_AddPrinterDriver r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.servername = servername;
+       r.in.info_ctr = info_ctr;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_AddPrinterDriver, &r);
@@ -523,9 +525,9 @@ NTSTATUS rpccli_spoolss_EnumPrinterDrivers(struct rpc_pipe_client *cli,
                                           uint32_t level /* [in]  */,
                                           DATA_BLOB *buffer /* [in] [unique] */,
                                           uint32_t offered /* [in]  */,
-                                          union spoolss_DriverInfo *info /* [out] [unique,switch_is(level),size_is(count)] */,
+                                          uint32_t *count /* [out] [ref] */,
+                                          union spoolss_DriverInfo *info /* [out] [unique,switch_is(level),size_is(*count)] */,
                                           uint32_t *needed /* [out] [ref] */,
-                                          uint32_t count /* [out]  */,
                                           WERROR *werror)
 {
        struct spoolss_EnumPrinterDrivers r;
@@ -561,11 +563,11 @@ NTSTATUS rpccli_spoolss_EnumPrinterDrivers(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *count = *r.out.count;
        if (info && r.out.info) {
-               memcpy(info, r.out.info, count * sizeof(*info));
+               memcpy(info, r.out.info, *count * sizeof(*info));
        }
        *needed = *r.out.needed;
-       return NT_STATUS_NOT_SUPPORTED;
 
        /* Return result */
        if (werror) {
@@ -675,7 +677,6 @@ NTSTATUS rpccli_spoolss_GetPrinterDriverDirectory(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_DeletePrinterDriver(struct rpc_pipe_client *cli,
                                            TALLOC_CTX *mem_ctx,
-                                           struct policy_handle *handle /* [in] [ref] */,
                                            const char *server /* [in] [unique,charset(UTF16)] */,
                                            const char *architecture /* [in] [charset(UTF16)] */,
                                            const char *driver /* [in] [charset(UTF16)] */,
@@ -685,7 +686,6 @@ NTSTATUS rpccli_spoolss_DeletePrinterDriver(struct rpc_pipe_client *cli,
        NTSTATUS status;
 
        /* In parameters */
-       r.in.handle = handle;
        r.in.server = server;
        r.in.architecture = architecture;
        r.in.driver = driver;
@@ -724,12 +724,20 @@ NTSTATUS rpccli_spoolss_DeletePrinterDriver(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_AddPrintProcessor(struct rpc_pipe_client *cli,
                                          TALLOC_CTX *mem_ctx,
+                                         const char *server /* [in] [unique,charset(UTF16)] */,
+                                         const char *architecture /* [in] [charset(UTF16)] */,
+                                         const char *path_name /* [in] [charset(UTF16)] */,
+                                         const char *print_processor_name /* [in] [charset(UTF16)] */,
                                          WERROR *werror)
 {
        struct spoolss_AddPrintProcessor r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.server = server;
+       r.in.architecture = architecture;
+       r.in.path_name = path_name;
+       r.in.print_processor_name = print_processor_name;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_AddPrintProcessor, &r);
@@ -770,9 +778,9 @@ NTSTATUS rpccli_spoolss_EnumPrintProcessors(struct rpc_pipe_client *cli,
                                            uint32_t level /* [in]  */,
                                            DATA_BLOB *buffer /* [in] [unique] */,
                                            uint32_t offered /* [in]  */,
-                                           union spoolss_PrintProcessorInfo *info /* [out] [unique,switch_is(level),size_is(count)] */,
+                                           uint32_t *count /* [out] [ref] */,
+                                           union spoolss_PrintProcessorInfo *info /* [out] [unique,switch_is(level),size_is(*count)] */,
                                            uint32_t *needed /* [out] [ref] */,
-                                           uint32_t count /* [out]  */,
                                            WERROR *werror)
 {
        struct spoolss_EnumPrintProcessors r;
@@ -808,11 +816,11 @@ NTSTATUS rpccli_spoolss_EnumPrintProcessors(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *count = *r.out.count;
        if (info && r.out.info) {
-               memcpy(info, r.out.info, count * sizeof(*info));
+               memcpy(info, r.out.info, *count * sizeof(*info));
        }
        *needed = *r.out.needed;
-       return NT_STATUS_NOT_SUPPORTED;
 
        /* Return result */
        if (werror) {
@@ -824,12 +832,24 @@ NTSTATUS rpccli_spoolss_EnumPrintProcessors(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_GetPrintProcessorDirectory(struct rpc_pipe_client *cli,
                                                   TALLOC_CTX *mem_ctx,
+                                                  const char *server /* [in] [unique,charset(UTF16)] */,
+                                                  const char *environment /* [in] [unique,charset(UTF16)] */,
+                                                  uint32_t level /* [in]  */,
+                                                  DATA_BLOB *buffer /* [in] [unique] */,
+                                                  uint32_t offered /* [in]  */,
+                                                  union spoolss_PrintProcessorDirectoryInfo *info /* [out] [unique,subcontext_size(offered),subcontext(4),switch_is(level)] */,
+                                                  uint32_t *needed /* [out] [ref] */,
                                                   WERROR *werror)
 {
        struct spoolss_GetPrintProcessorDirectory r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.server = server;
+       r.in.environment = environment;
+       r.in.level = level;
+       r.in.buffer = buffer;
+       r.in.offered = offered;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_GetPrintProcessorDirectory, &r);
@@ -854,6 +874,10 @@ NTSTATUS rpccli_spoolss_GetPrintProcessorDirectory(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       if (info && r.out.info) {
+               *info = *r.out.info;
+       }
+       *needed = *r.out.needed;
 
        /* Return result */
        if (werror) {
@@ -1184,12 +1208,21 @@ NTSTATUS rpccli_spoolss_EndDocPrinter(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_AddJob(struct rpc_pipe_client *cli,
                               TALLOC_CTX *mem_ctx,
+                              struct policy_handle *handle /* [in] [ref] */,
+                              uint32_t level /* [in]  */,
+                              uint8_t *buffer /* [in,out] [unique,size_is(offered)] */,
+                              uint32_t offered /* [in]  */,
+                              uint32_t *needed /* [out] [ref] */,
                               WERROR *werror)
 {
        struct spoolss_AddJob r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.handle = handle;
+       r.in.level = level;
+       r.in.buffer = buffer;
+       r.in.offered = offered;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_AddJob, &r);
@@ -1214,6 +1247,10 @@ NTSTATUS rpccli_spoolss_AddJob(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       if (buffer && r.out.buffer) {
+               memcpy(buffer, r.out.buffer, r.in.offered * sizeof(*buffer));
+       }
+       *needed = *r.out.needed;
 
        /* Return result */
        if (werror) {
@@ -1225,12 +1262,16 @@ NTSTATUS rpccli_spoolss_AddJob(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_ScheduleJob(struct rpc_pipe_client *cli,
                                    TALLOC_CTX *mem_ctx,
+                                   struct policy_handle *handle /* [in] [ref] */,
+                                   uint32_t jobid /* [in]  */,
                                    WERROR *werror)
 {
        struct spoolss_ScheduleJob r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.handle = handle;
+       r.in.jobid = jobid;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_ScheduleJob, &r);
@@ -1657,9 +1698,9 @@ NTSTATUS rpccli_spoolss_EnumForms(struct rpc_pipe_client *cli,
                                  uint32_t level /* [in]  */,
                                  DATA_BLOB *buffer /* [in] [unique] */,
                                  uint32_t offered /* [in]  */,
-                                 union spoolss_FormInfo *info /* [out] [unique,switch_is(level),size_is(count)] */,
+                                 uint32_t *count /* [out] [ref] */,
+                                 union spoolss_FormInfo *info /* [out] [unique,switch_is(level),size_is(*count)] */,
                                  uint32_t *needed /* [out] [ref] */,
-                                 uint32_t count /* [out]  */,
                                  WERROR *werror)
 {
        struct spoolss_EnumForms r;
@@ -1694,11 +1735,11 @@ NTSTATUS rpccli_spoolss_EnumForms(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *count = *r.out.count;
        if (info && r.out.info) {
-               memcpy(info, r.out.info, count * sizeof(*info));
+               memcpy(info, r.out.info, *count * sizeof(*info));
        }
        *needed = *r.out.needed;
-       return NT_STATUS_NOT_SUPPORTED;
 
        /* Return result */
        if (werror) {
@@ -1714,9 +1755,9 @@ NTSTATUS rpccli_spoolss_EnumPorts(struct rpc_pipe_client *cli,
                                  uint32_t level /* [in]  */,
                                  DATA_BLOB *buffer /* [in] [unique] */,
                                  uint32_t offered /* [in]  */,
-                                 union spoolss_PortInfo *info /* [out] [unique,switch_is(level),size_is(count)] */,
+                                 uint32_t *count /* [out] [ref] */,
+                                 union spoolss_PortInfo *info /* [out] [unique,switch_is(level),size_is(*count)] */,
                                  uint32_t *needed /* [out] [ref] */,
-                                 uint32_t count /* [out]  */,
                                  WERROR *werror)
 {
        struct spoolss_EnumPorts r;
@@ -1751,11 +1792,11 @@ NTSTATUS rpccli_spoolss_EnumPorts(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *count = *r.out.count;
        if (info && r.out.info) {
-               memcpy(info, r.out.info, count * sizeof(*info));
+               memcpy(info, r.out.info, *count * sizeof(*info));
        }
        *needed = *r.out.needed;
-       return NT_STATUS_NOT_SUPPORTED;
 
        /* Return result */
        if (werror) {
@@ -1771,9 +1812,9 @@ NTSTATUS rpccli_spoolss_EnumMonitors(struct rpc_pipe_client *cli,
                                     uint32_t level /* [in]  */,
                                     DATA_BLOB *buffer /* [in] [unique] */,
                                     uint32_t offered /* [in]  */,
-                                    union spoolss_MonitorInfo *info /* [out] [unique,switch_is(level),size_is(count)] */,
+                                    uint32_t *count /* [out] [ref] */,
+                                    union spoolss_MonitorInfo *info /* [out] [unique,switch_is(level),size_is(*count)] */,
                                     uint32_t *needed /* [out] [ref] */,
-                                    uint32_t count /* [out]  */,
                                     WERROR *werror)
 {
        struct spoolss_EnumMonitors r;
@@ -1808,11 +1849,11 @@ NTSTATUS rpccli_spoolss_EnumMonitors(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *count = *r.out.count;
        if (info && r.out.info) {
-               memcpy(info, r.out.info, count * sizeof(*info));
+               memcpy(info, r.out.info, *count * sizeof(*info));
        }
        *needed = *r.out.needed;
-       return NT_STATUS_NOT_SUPPORTED;
 
        /* Return result */
        if (werror) {
@@ -2445,12 +2486,18 @@ NTSTATUS rpccli_spoolss_EnumPrintProcDataTypes(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_ResetPrinter(struct rpc_pipe_client *cli,
                                     TALLOC_CTX *mem_ctx,
+                                    struct policy_handle *handle /* [in] [ref] */,
+                                    const char *data_type /* [in] [unique,charset(UTF16)] */,
+                                    struct spoolss_DevmodeContainer *devmode_ctr /* [in] [ref] */,
                                     WERROR *werror)
 {
        struct spoolss_ResetPrinter r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.handle = handle;
+       r.in.data_type = data_type;
+       r.in.devmode_ctr = devmode_ctr;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_ResetPrinter, &r);
@@ -2720,8 +2767,8 @@ NTSTATUS rpccli_spoolss_ReplyOpenPrinter(struct rpc_pipe_client *cli,
                                         const char *server_name /* [in] [charset(UTF16)] */,
                                         uint32_t printer_local /* [in]  */,
                                         enum winreg_Type type /* [in]  */,
-                                        uint32_t unknown1 /* [in]  */,
-                                        uint32_t unknown2 /* [in]  */,
+                                        uint32_t bufsize /* [in] [range(0,512)] */,
+                                        uint8_t *buffer /* [in] [unique,size_is(bufsize)] */,
                                         struct policy_handle *handle /* [out] [ref] */,
                                         WERROR *werror)
 {
@@ -2732,8 +2779,8 @@ NTSTATUS rpccli_spoolss_ReplyOpenPrinter(struct rpc_pipe_client *cli,
        r.in.server_name = server_name;
        r.in.printer_local = printer_local;
        r.in.type = type;
-       r.in.unknown1 = unknown1;
-       r.in.unknown2 = unknown2;
+       r.in.bufsize = bufsize;
+       r.in.buffer = buffer;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_ReplyOpenPrinter, &r);
@@ -2770,12 +2817,20 @@ NTSTATUS rpccli_spoolss_ReplyOpenPrinter(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_RouterReplyPrinter(struct rpc_pipe_client *cli,
                                           TALLOC_CTX *mem_ctx,
+                                          struct policy_handle *handle /* [in] [ref] */,
+                                          uint32_t flags /* [in]  */,
+                                          uint32_t bufsize /* [in] [range(0,512)] */,
+                                          uint8_t *buffer /* [in] [unique,size_is(bufsize)] */,
                                           WERROR *werror)
 {
        struct spoolss_RouterReplyPrinter r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.handle = handle;
+       r.in.flags = flags;
+       r.in.bufsize = bufsize;
+       r.in.buffer = buffer;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_RouterReplyPrinter, &r);
@@ -3022,9 +3077,9 @@ NTSTATUS rpccli_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct rpc_pipe_cli
                                                             struct policy_handle *handle /* [in] [ref] */,
                                                             uint32_t flags /* [in]  */,
                                                             uint32_t options /* [in]  */,
-                                                            const char *str /* [in] [unique,charset(UTF16)] */,
+                                                            const char *local_machine /* [in] [unique,charset(UTF16)] */,
                                                             uint32_t printer_local /* [in]  */,
-                                                            struct spoolss_NotifyOptionsContainer *t1 /* [in] [unique] */,
+                                                            struct spoolss_NotifyOption *notify_options /* [in] [unique] */,
                                                             WERROR *werror)
 {
        struct spoolss_RemoteFindFirstPrinterChangeNotifyEx r;
@@ -3034,9 +3089,9 @@ NTSTATUS rpccli_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct rpc_pipe_cli
        r.in.handle = handle;
        r.in.flags = flags;
        r.in.options = options;
-       r.in.str = str;
+       r.in.local_machine = local_machine;
        r.in.printer_local = printer_local;
-       r.in.t1 = t1;
+       r.in.notify_options = notify_options;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_RemoteFindFirstPrinterChangeNotifyEx, &r);
@@ -3070,23 +3125,34 @@ NTSTATUS rpccli_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct rpc_pipe_cli
        return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_spoolss_RouterRefreshPrinterChangeNotification(struct rpc_pipe_client *cli,
-                                                              TALLOC_CTX *mem_ctx,
-                                                              WERROR *werror)
+NTSTATUS rpccli_spoolss_RouterReplyPrinterEx(struct rpc_pipe_client *cli,
+                                            TALLOC_CTX *mem_ctx,
+                                            struct policy_handle *handle /* [in] [ref] */,
+                                            uint32_t color /* [in]  */,
+                                            uint32_t flags /* [in]  */,
+                                            uint32_t *reply_result /* [out] [ref] */,
+                                            uint32_t reply_type /* [in]  */,
+                                            union spoolss_ReplyPrinterInfo info /* [in] [switch_is(reply_type)] */,
+                                            WERROR *werror)
 {
-       struct spoolss_RouterRefreshPrinterChangeNotification r;
+       struct spoolss_RouterReplyPrinterEx r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.handle = handle;
+       r.in.color = color;
+       r.in.flags = flags;
+       r.in.reply_type = reply_type;
+       r.in.info = info;
 
        if (DEBUGLEVEL >= 10) {
-               NDR_PRINT_IN_DEBUG(spoolss_RouterRefreshPrinterChangeNotification, &r);
+               NDR_PRINT_IN_DEBUG(spoolss_RouterReplyPrinterEx, &r);
        }
 
        status = cli->dispatch(cli,
                                mem_ctx,
                                &ndr_table_spoolss,
-                               NDR_SPOOLSS_ROUTERREFRESHPRINTERCHANGENOTIFICATION,
+                               NDR_SPOOLSS_ROUTERREPLYPRINTEREX,
                                &r);
 
        if (!NT_STATUS_IS_OK(status)) {
@@ -3094,7 +3160,7 @@ NTSTATUS rpccli_spoolss_RouterRefreshPrinterChangeNotification(struct rpc_pipe_c
        }
 
        if (DEBUGLEVEL >= 10) {
-               NDR_PRINT_OUT_DEBUG(spoolss_RouterRefreshPrinterChangeNotification, &r);
+               NDR_PRINT_OUT_DEBUG(spoolss_RouterReplyPrinterEx, &r);
        }
 
        if (NT_STATUS_IS_ERR(status)) {
@@ -3102,6 +3168,7 @@ NTSTATUS rpccli_spoolss_RouterRefreshPrinterChangeNotification(struct rpc_pipe_c
        }
 
        /* Return variables */
+       *reply_result = *r.out.reply_result;
 
        /* Return result */
        if (werror) {
@@ -3111,30 +3178,30 @@ NTSTATUS rpccli_spoolss_RouterRefreshPrinterChangeNotification(struct rpc_pipe_c
        return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_spoolss_RemoteFindNextPrinterChangeNotifyEx(struct rpc_pipe_client *cli,
-                                                           TALLOC_CTX *mem_ctx,
-                                                           struct policy_handle *handle /* [in] [ref] */,
-                                                           uint32_t change_low /* [in]  */,
-                                                           struct spoolss_NotifyOptionsContainer *container /* [in] [unique] */,
-                                                           struct spoolss_NotifyInfo **info /* [out] [ref] */,
-                                                           WERROR *werror)
+NTSTATUS rpccli_spoolss_RouterRefreshPrinterChangeNotify(struct rpc_pipe_client *cli,
+                                                        TALLOC_CTX *mem_ctx,
+                                                        struct policy_handle *handle /* [in] [ref] */,
+                                                        uint32_t change_low /* [in]  */,
+                                                        struct spoolss_NotifyOption *options /* [in] [unique] */,
+                                                        struct spoolss_NotifyInfo **info /* [out] [ref] */,
+                                                        WERROR *werror)
 {
-       struct spoolss_RemoteFindNextPrinterChangeNotifyEx r;
+       struct spoolss_RouterRefreshPrinterChangeNotify r;
        NTSTATUS status;
 
        /* In parameters */
        r.in.handle = handle;
        r.in.change_low = change_low;
-       r.in.container = container;
+       r.in.options = options;
 
        if (DEBUGLEVEL >= 10) {
-               NDR_PRINT_IN_DEBUG(spoolss_RemoteFindNextPrinterChangeNotifyEx, &r);
+               NDR_PRINT_IN_DEBUG(spoolss_RouterRefreshPrinterChangeNotify, &r);
        }
 
        status = cli->dispatch(cli,
                                mem_ctx,
                                &ndr_table_spoolss,
-                               NDR_SPOOLSS_REMOTEFINDNEXTPRINTERCHANGENOTIFYEX,
+                               NDR_SPOOLSS_ROUTERREFRESHPRINTERCHANGENOTIFY,
                                &r);
 
        if (!NT_STATUS_IS_OK(status)) {
@@ -3142,7 +3209,7 @@ NTSTATUS rpccli_spoolss_RemoteFindNextPrinterChangeNotifyEx(struct rpc_pipe_clie
        }
 
        if (DEBUGLEVEL >= 10) {
-               NDR_PRINT_OUT_DEBUG(spoolss_RemoteFindNextPrinterChangeNotifyEx, &r);
+               NDR_PRINT_OUT_DEBUG(spoolss_RouterRefreshPrinterChangeNotify, &r);
        }
 
        if (NT_STATUS_IS_ERR(status)) {
@@ -3259,12 +3326,11 @@ NTSTATUS rpccli_spoolss_OpenPrinterEx(struct rpc_pipe_client *cli,
 NTSTATUS rpccli_spoolss_AddPrinterEx(struct rpc_pipe_client *cli,
                                     TALLOC_CTX *mem_ctx,
                                     const char *server /* [in] [unique,charset(UTF16)] */,
-                                    uint32_t level /* [in]  */,
-                                    union spoolss_PrinterInfo *info /* [in] [unique,switch_is(level)] */,
-                                    struct spoolss_DevmodeContainer devmode_ctr /* [in]  */,
-                                    struct security_descriptor *secdesc /* [in] [unique] */,
-                                    uint32_t ulevel /* [in]  */,
-                                    union spoolss_UserLevel userlevel /* [in] [switch_is(ulevel)] */,
+                                    struct spoolss_SetPrinterInfoCtr *info_ctr /* [in] [ref] */,
+                                    struct spoolss_DevmodeContainer *devmode_ctr /* [in] [ref] */,
+                                    struct sec_desc_buf *secdesc_ctr /* [in] [ref] */,
+                                    struct spoolss_UserLevelCtr *userlevel_ctr /* [in] [ref] */,
+                                    struct policy_handle *handle /* [out] [ref] */,
                                     WERROR *werror)
 {
        struct spoolss_AddPrinterEx r;
@@ -3272,12 +3338,10 @@ NTSTATUS rpccli_spoolss_AddPrinterEx(struct rpc_pipe_client *cli,
 
        /* In parameters */
        r.in.server = server;
-       r.in.level = level;
-       r.in.info = info;
+       r.in.info_ctr = info_ctr;
        r.in.devmode_ctr = devmode_ctr;
-       r.in.secdesc = secdesc;
-       r.in.ulevel = ulevel;
-       r.in.userlevel = userlevel;
+       r.in.secdesc_ctr = secdesc_ctr;
+       r.in.userlevel_ctr = userlevel_ctr;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_AddPrinterEx, &r);
@@ -3302,6 +3366,7 @@ NTSTATUS rpccli_spoolss_AddPrinterEx(struct rpc_pipe_client *cli,
        }
 
        /* Return variables */
+       *handle = *r.out.handle;
 
        /* Return result */
        if (werror) {
@@ -3356,7 +3421,7 @@ NTSTATUS rpccli_spoolss_EnumPrinterData(struct rpc_pipe_client *cli,
                                        TALLOC_CTX *mem_ctx,
                                        struct policy_handle *handle /* [in] [ref] */,
                                        uint32_t enum_index /* [in]  */,
-                                       const char *value_name /* [out] [ref,charset(UTF16),size_is(value_offered/2)] */,
+                                       const char *value_name /* [out] [charset(UTF16),size_is(value_offered/2)] */,
                                        uint32_t value_offered /* [in]  */,
                                        uint32_t *value_needed /* [out] [ref] */,
                                        uint32_t *printerdata_type /* [out] [ref] */,
@@ -3585,7 +3650,7 @@ NTSTATUS rpccli_spoolss_SetPrinterDataEx(struct rpc_pipe_client *cli,
                                         const char *key_name /* [in] [charset(UTF16)] */,
                                         const char *value_name /* [in] [charset(UTF16)] */,
                                         uint32_t type /* [in]  */,
-                                        DATA_BLOB buffer /* [in]  */,
+                                        uint8_t *buffer /* [in] [ref,size_is(offered)] */,
                                         uint32_t offered /* [in]  */,
                                         WERROR *werror)
 {
@@ -3840,12 +3905,16 @@ NTSTATUS rpccli_spoolss_DeletePrinterDataEx(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_DeletePrinterKey(struct rpc_pipe_client *cli,
                                         TALLOC_CTX *mem_ctx,
+                                        struct policy_handle *handle /* [in] [ref] */,
+                                        const char *key_name /* [in] [charset(UTF16)] */,
                                         WERROR *werror)
 {
        struct spoolss_DeletePrinterKey r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.handle = handle;
+       r.in.key_name = key_name;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_DeletePrinterKey, &r);
@@ -3922,12 +3991,22 @@ NTSTATUS rpccli_spoolss_53(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_DeletePrinterDriverEx(struct rpc_pipe_client *cli,
                                              TALLOC_CTX *mem_ctx,
+                                             const char *server /* [in] [unique,charset(UTF16)] */,
+                                             const char *architecture /* [in] [charset(UTF16)] */,
+                                             const char *driver /* [in] [charset(UTF16)] */,
+                                             uint32_t delete_flags /* [in]  */,
+                                             uint32_t version /* [in]  */,
                                              WERROR *werror)
 {
        struct spoolss_DeletePrinterDriverEx r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.server = server;
+       r.in.architecture = architecture;
+       r.in.driver = driver;
+       r.in.delete_flags = delete_flags;
+       r.in.version = version;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_DeletePrinterDriverEx, &r);
@@ -4144,12 +4223,18 @@ NTSTATUS rpccli_spoolss_XcvData(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_AddPrinterDriverEx(struct rpc_pipe_client *cli,
                                           TALLOC_CTX *mem_ctx,
+                                          const char *servername /* [in] [unique,charset(UTF16)] */,
+                                          struct spoolss_AddDriverInfoCtr *info_ctr /* [in] [ref] */,
+                                          uint32_t flags /* [in]  */,
                                           WERROR *werror)
 {
        struct spoolss_AddPrinterDriverEx r;
        NTSTATUS status;
 
        /* In parameters */
+       r.in.servername = servername;
+       r.in.info_ctr = info_ctr;
+       r.in.flags = flags;
 
        if (DEBUGLEVEL >= 10) {
                NDR_PRINT_IN_DEBUG(spoolss_AddPrinterDriverEx, &r);