s3: re-run make samba3-idl.
[samba.git] / librpc / gen_ndr / ndr_spoolss.c
index 035444b2fde5aaa1ec22da5757c6845361d8c439..8868ec0f550f4dfaaa507c864e9779801d23020b 100644 (file)
@@ -531,6 +531,303 @@ _PUBLIC_ size_t ndr_size_spoolss_PrinterInfo0(const struct spoolss_PrinterInfo0
        return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo0, ic);
 }
 
+static enum ndr_err_code ndr_push_spoolss_DM_Signature(struct ndr_push *ndr, int ndr_flags, enum spoolss_DM_Signature r)
+{
+       NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_DM_Signature(struct ndr_pull *ndr, int ndr_flags, enum spoolss_DM_Signature *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_DM_Signature(struct ndr_print *ndr, const char *name, enum spoolss_DM_Signature r)
+{
+       const char *val = NULL;
+
+       switch (r) {
+               case SPOOLSS_DM_SIGNATURE_UNIDRVEXTRA: val = "SPOOLSS_DM_SIGNATURE_UNIDRVEXTRA"; break;
+               case SPOOLSS_DM_SIGNATURE_JTEXP: val = "SPOOLSS_DM_SIGNATURE_JTEXP"; break;
+               case SPOOLSS_DM_SIGNATURE_PSEXTRA: val = "SPOOLSS_DM_SIGNATURE_PSEXTRA"; break;
+       }
+       ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+static enum ndr_err_code ndr_push_spoolss_DM_Layout(struct ndr_push *ndr, int ndr_flags, enum spoolss_DM_Layout r)
+{
+       NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_DM_Layout(struct ndr_pull *ndr, int ndr_flags, enum spoolss_DM_Layout *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_DM_Layout(struct ndr_print *ndr, const char *name, enum spoolss_DM_Layout r)
+{
+       const char *val = NULL;
+
+       switch (r) {
+               case SPOOLSS_DM_LAYOUT_NUP_DISABLED: val = "SPOOLSS_DM_LAYOUT_NUP_DISABLED"; break;
+               case SPOOLSS_DM_LAYOUT_NUP_2: val = "SPOOLSS_DM_LAYOUT_NUP_2"; break;
+               case SPOOLSS_DM_LAYOUT_NUP_4: val = "SPOOLSS_DM_LAYOUT_NUP_4"; break;
+               case SPOOLSS_DM_LAYOUT_NUP_6: val = "SPOOLSS_DM_LAYOUT_NUP_6"; break;
+               case SPOOLSS_DM_LAYOUT_NUP_9: val = "SPOOLSS_DM_LAYOUT_NUP_9"; break;
+               case SPOOLSS_DM_LAYOUT_NUP_16: val = "SPOOLSS_DM_LAYOUT_NUP_16"; break;
+               case SPOOLSS_DM_LAYOUT_BOOKLET: val = "SPOOLSS_DM_LAYOUT_BOOKLET"; break;
+       }
+       ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+static enum ndr_err_code ndr_push_spoolss_DM_NupDirection(struct ndr_push *ndr, int ndr_flags, enum spoolss_DM_NupDirection r)
+{
+       NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_DM_NupDirection(struct ndr_pull *ndr, int ndr_flags, enum spoolss_DM_NupDirection *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_DM_NupDirection(struct ndr_print *ndr, const char *name, enum spoolss_DM_NupDirection r)
+{
+       const char *val = NULL;
+
+       switch (r) {
+               case SPOOLSS_DM_NUP_DIRECTION_L2R_T2B: val = "SPOOLSS_DM_NUP_DIRECTION_L2R_T2B"; break;
+               case SPOOLSS_DM_NUP_DIRECTION_T2B_L2R: val = "SPOOLSS_DM_NUP_DIRECTION_T2B_L2R"; break;
+               case SPOOLSS_DM_NUP_DIRECTION_R2L_T2B: val = "SPOOLSS_DM_NUP_DIRECTION_R2L_T2B"; break;
+               case SPOOLSS_DM_NUP_DIRECTION_T2B_R2L: val = "SPOOLSS_DM_NUP_DIRECTION_T2B_R2L"; break;
+       }
+       ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+static enum ndr_err_code ndr_push_spoolss_DM_NupBorderFlags(struct ndr_push *ndr, int ndr_flags, enum spoolss_DM_NupBorderFlags r)
+{
+       NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_DM_NupBorderFlags(struct ndr_pull *ndr, int ndr_flags, enum spoolss_DM_NupBorderFlags *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_DM_NupBorderFlags(struct ndr_print *ndr, const char *name, enum spoolss_DM_NupBorderFlags r)
+{
+       const char *val = NULL;
+
+       switch (r) {
+               case SPOOLSS_DM_NUP_BORDER_PRINT: val = "SPOOLSS_DM_NUP_BORDER_PRINT"; break;
+               case SPOOLSS_DM_NUP_BORDER_NONE: val = "SPOOLSS_DM_NUP_BORDER_NONE"; break;
+       }
+       ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+static enum ndr_err_code ndr_push_spoolss_DM_BookletFlags(struct ndr_push *ndr, int ndr_flags, enum spoolss_DM_BookletFlags r)
+{
+       NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_DM_BookletFlags(struct ndr_pull *ndr, int ndr_flags, enum spoolss_DM_BookletFlags *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_DM_BookletFlags(struct ndr_print *ndr, const char *name, enum spoolss_DM_BookletFlags r)
+{
+       const char *val = NULL;
+
+       switch (r) {
+               case SPOOLSS_DM_BOOKLET_LEFT_FLIP: val = "SPOOLSS_DM_BOOKLET_LEFT_FLIP"; break;
+               case SPOOLSS_DM_BOOKLET_RIGHT_FLIP: val = "SPOOLSS_DM_BOOKLET_RIGHT_FLIP"; break;
+       }
+       ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+static enum ndr_err_code ndr_push_spoolss_DMUNI_Quality(struct ndr_push *ndr, int ndr_flags, enum spoolss_DMUNI_Quality r)
+{
+       NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_DMUNI_Quality(struct ndr_pull *ndr, int ndr_flags, enum spoolss_DMUNI_Quality *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_DMUNI_Quality(struct ndr_print *ndr, const char *name, enum spoolss_DMUNI_Quality r)
+{
+       const char *val = NULL;
+
+       switch (r) {
+               case SPOOLSS_DM_UNI_QUALITY_BEST: val = "SPOOLSS_DM_UNI_QUALITY_BEST"; break;
+               case SPOOLSS_DM_UNI_QUALITY_MEDIUM: val = "SPOOLSS_DM_UNI_QUALITY_MEDIUM"; break;
+               case SPOOLSS_DM_UNI_QUALITY_DRAFT: val = "SPOOLSS_DM_UNI_QUALITY_DRAFT"; break;
+       }
+       ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+static enum ndr_err_code ndr_push_spoolss_DMUNI_Flags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
+{
+       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_DMUNI_Flags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_DMUNI_Flags(struct ndr_print *ndr, const char *name, uint32_t r)
+{
+       ndr_print_uint32(ndr, name, r);
+       ndr->depth++;
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SPOOLSS_DM_UNI_FLAGS_PRINT_TEXT_AS_GRAPHICS", SPOOLSS_DM_UNI_FLAGS_PRINT_TEXT_AS_GRAPHICS, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SPOOLSS_DM_UNI_FLAGS_AVOID_EMFSPOOL", SPOOLSS_DM_UNI_FLAGS_AVOID_EMFSPOOL, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SPOOLSS_DM_UNI_FLAGS_CUSTOM_HALFTONING", SPOOLSS_DM_UNI_FLAGS_CUSTOM_HALFTONING, r);
+       ndr->depth--;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_UNIDRVEXTRA(struct ndr_push *ndr, int ndr_flags, const struct spoolss_UNIDRVEXTRA *r)
+{
+       uint32_t cntr_wReserved_0;
+       uint32_t cntr_aOptions_0;
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 4));
+               NDR_CHECK(ndr_push_spoolss_DM_Signature(ndr, NDR_SCALARS, SPOOLSS_DM_SIGNATURE_UNIDRVEXTRA));
+               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 0x0022));
+               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->wCoreJTExpSize));
+               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_spoolss_UNIDRVEXTRA(r, ndr->iconv_convenience, ndr->flags) + r->wCoreJTExpSize));
+               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->wOEMExtra));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dwChecksum32));
+               NDR_CHECK(ndr_push_spoolss_DMUNI_Flags(ndr, NDR_SCALARS, r->dwFlags));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bReversePrint));
+               NDR_CHECK(ndr_push_spoolss_DM_Layout(ndr, NDR_SCALARS, r->iLayout));
+               NDR_CHECK(ndr_push_spoolss_DMUNI_Quality(ndr, NDR_SCALARS, r->iQuality));
+               for (cntr_wReserved_0 = 0; cntr_wReserved_0 < 6; cntr_wReserved_0++) {
+                       NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->wReserved[cntr_wReserved_0]));
+               }
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dwOptions));
+               for (cntr_aOptions_0 = 0; cntr_aOptions_0 < 128; cntr_aOptions_0++) {
+                       NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->aOptions[cntr_aOptions_0]));
+               }
+               NDR_CHECK(ndr_push_spoolss_DM_NupDirection(ndr, NDR_SCALARS, r->dwNupDirection));
+               NDR_CHECK(ndr_push_spoolss_DM_NupBorderFlags(ndr, NDR_SCALARS, r->dwNupBorderFlags));
+               NDR_CHECK(ndr_push_spoolss_DM_BookletFlags(ndr, NDR_SCALARS, r->dwBookletFlags));
+               NDR_CHECK(ndr_push_trailer_align(ndr, 4));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_spoolss_UNIDRVEXTRA(struct ndr_pull *ndr, int ndr_flags, struct spoolss_UNIDRVEXTRA *r)
+{
+       uint32_t cntr_wReserved_0;
+       uint32_t cntr_aOptions_0;
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 4));
+               NDR_CHECK(ndr_pull_spoolss_DM_Signature(ndr, NDR_SCALARS, &r->dwSignature));
+               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->wVer));
+               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->wCoreJTExpSize));
+               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->wCoreFullSize));
+               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->wOEMExtra));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dwChecksum32));
+               NDR_CHECK(ndr_pull_spoolss_DMUNI_Flags(ndr, NDR_SCALARS, &r->dwFlags));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bReversePrint));
+               NDR_CHECK(ndr_pull_spoolss_DM_Layout(ndr, NDR_SCALARS, &r->iLayout));
+               NDR_CHECK(ndr_pull_spoolss_DMUNI_Quality(ndr, NDR_SCALARS, &r->iQuality));
+               for (cntr_wReserved_0 = 0; cntr_wReserved_0 < 6; cntr_wReserved_0++) {
+                       NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->wReserved[cntr_wReserved_0]));
+               }
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dwOptions));
+               for (cntr_aOptions_0 = 0; cntr_aOptions_0 < 128; cntr_aOptions_0++) {
+                       NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->aOptions[cntr_aOptions_0]));
+               }
+               NDR_CHECK(ndr_pull_spoolss_DM_NupDirection(ndr, NDR_SCALARS, &r->dwNupDirection));
+               NDR_CHECK(ndr_pull_spoolss_DM_NupBorderFlags(ndr, NDR_SCALARS, &r->dwNupBorderFlags));
+               NDR_CHECK(ndr_pull_spoolss_DM_BookletFlags(ndr, NDR_SCALARS, &r->dwBookletFlags));
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_UNIDRVEXTRA(struct ndr_print *ndr, const char *name, const struct spoolss_UNIDRVEXTRA *r)
+{
+       uint32_t cntr_wReserved_0;
+       uint32_t cntr_aOptions_0;
+       ndr_print_struct(ndr, name, "spoolss_UNIDRVEXTRA");
+       ndr->depth++;
+       ndr_print_spoolss_DM_Signature(ndr, "dwSignature", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?SPOOLSS_DM_SIGNATURE_UNIDRVEXTRA:r->dwSignature);
+       ndr_print_uint16(ndr, "wVer", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0x0022:r->wVer);
+       ndr_print_uint16(ndr, "wCoreJTExpSize", r->wCoreJTExpSize);
+       ndr_print_uint16(ndr, "wCoreFullSize", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_spoolss_UNIDRVEXTRA(r, ndr->iconv_convenience, ndr->flags) + r->wCoreJTExpSize:r->wCoreFullSize);
+       ndr_print_uint16(ndr, "wOEMExtra", r->wOEMExtra);
+       ndr_print_uint32(ndr, "dwChecksum32", r->dwChecksum32);
+       ndr_print_spoolss_DMUNI_Flags(ndr, "dwFlags", r->dwFlags);
+       ndr_print_uint32(ndr, "bReversePrint", r->bReversePrint);
+       ndr_print_spoolss_DM_Layout(ndr, "iLayout", r->iLayout);
+       ndr_print_spoolss_DMUNI_Quality(ndr, "iQuality", r->iQuality);
+       ndr->print(ndr, "%s: ARRAY(%d)", "wReserved", (int)6);
+       ndr->depth++;
+       for (cntr_wReserved_0=0;cntr_wReserved_0<6;cntr_wReserved_0++) {
+               char *idx_0=NULL;
+               if (asprintf(&idx_0, "[%d]", cntr_wReserved_0) != -1) {
+                       ndr_print_uint16(ndr, "wReserved", r->wReserved[cntr_wReserved_0]);
+                       free(idx_0);
+               }
+       }
+       ndr->depth--;
+       ndr_print_uint32(ndr, "dwOptions", r->dwOptions);
+       ndr->print(ndr, "%s: ARRAY(%d)", "aOptions", (int)128);
+       ndr->depth++;
+       for (cntr_aOptions_0=0;cntr_aOptions_0<128;cntr_aOptions_0++) {
+               char *idx_0=NULL;
+               if (asprintf(&idx_0, "[%d]", cntr_aOptions_0) != -1) {
+                       ndr_print_uint32(ndr, "aOptions", r->aOptions[cntr_aOptions_0]);
+                       free(idx_0);
+               }
+       }
+       ndr->depth--;
+       ndr_print_spoolss_DM_NupDirection(ndr, "dwNupDirection", r->dwNupDirection);
+       ndr_print_spoolss_DM_NupBorderFlags(ndr, "dwNupBorderFlags", r->dwNupBorderFlags);
+       ndr_print_spoolss_DM_BookletFlags(ndr, "dwBookletFlags", r->dwBookletFlags);
+       ndr->depth--;
+}
+
+_PUBLIC_ size_t ndr_size_spoolss_UNIDRVEXTRA(const struct spoolss_UNIDRVEXTRA *r, struct smb_iconv_convenience *ic, int flags)
+{
+       return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_UNIDRVEXTRA, ic);
+}
+
 static enum ndr_err_code ndr_push_spoolss_DeviceModeFields(struct ndr_push *ndr, int ndr_flags, uint32_t r)
 {
        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
@@ -1375,352 +1672,115 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo1(struct ndr_pull *ndr, i
                        if (_ptr_name) {
                                NDR_PULL_ALLOC(ndr, r->name);
                                NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->name, _ptr_name));
-                       } else {
-                               r->name = NULL;
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-                       if (_ptr_comment) {
-                               NDR_PULL_ALLOC(ndr, r->comment);
-                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->comment, _ptr_comment));
-                       } else {
-                               r->comment = NULL;
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->description) {
-                               uint32_t _relative_save_offset;
-                               _relative_save_offset = ndr->offset;
-                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->description));
-                               _mem_save_description_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                               NDR_PULL_SET_MEM_CTX(ndr, r->description, 0);
-                               NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->description));
-                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_description_0, 0);
-                               if (ndr->offset > ndr->relative_highest_offset) {
-                                       ndr->relative_highest_offset = ndr->offset;
-                               }
-                               ndr->offset = _relative_save_offset;
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->name) {
-                               uint32_t _relative_save_offset;
-                               _relative_save_offset = ndr->offset;
-                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->name));
-                               _mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                               NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-                               NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->name));
-                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-                               if (ndr->offset > ndr->relative_highest_offset) {
-                                       ndr->relative_highest_offset = ndr->offset;
-                               }
-                               ndr->offset = _relative_save_offset;
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->comment) {
-                               uint32_t _relative_save_offset;
-                               _relative_save_offset = ndr->offset;
-                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->comment));
-                               _mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                               NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-                               NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->comment));
-                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-                               if (ndr->offset > ndr->relative_highest_offset) {
-                                       ndr->relative_highest_offset = ndr->offset;
-                               }
-                               ndr->offset = _relative_save_offset;
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-       }
-       return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_spoolss_PrinterInfo1(struct ndr_print *ndr, const char *name, const struct spoolss_PrinterInfo1 *r)
-{
-       ndr_print_struct(ndr, name, "spoolss_PrinterInfo1");
-       ndr->depth++;
-       ndr_print_spoolss_PrinterAttributes(ndr, "flags", r->flags);
-       ndr_print_ptr(ndr, "description", r->description);
-       ndr->depth++;
-       if (r->description) {
-               ndr_print_string(ndr, "description", r->description);
-       }
-       ndr->depth--;
-       ndr_print_ptr(ndr, "name", r->name);
-       ndr->depth++;
-       if (r->name) {
-               ndr_print_string(ndr, "name", r->name);
-       }
-       ndr->depth--;
-       ndr_print_ptr(ndr, "comment", r->comment);
-       ndr->depth++;
-       if (r->comment) {
-               ndr_print_string(ndr, "comment", r->comment);
-       }
-       ndr->depth--;
-       ndr->depth--;
-}
-
-_PUBLIC_ size_t ndr_size_spoolss_PrinterInfo1(const struct spoolss_PrinterInfo1 *r, struct smb_iconv_convenience *ic, int flags)
-{
-       return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1, ic);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo2 *r)
-{
-       if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_push_align(ndr, 5));
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->servername));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printername));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sharename));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->portname));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->drivername));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->comment));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->location));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
-                       ndr->flags = _flags_save_spoolss_DeviceMode;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sepfile));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printprocessor));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->datatype));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->parameters));
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
-                       ndr->flags = _flags_save_security_descriptor;
-               }
-               NDR_CHECK(ndr_push_spoolss_PrinterAttributes(ndr, NDR_SCALARS, r->attributes));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->defaultpriority));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->starttime));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->untiltime));
-               NDR_CHECK(ndr_push_spoolss_PrinterStatus(ndr, NDR_SCALARS, r->status));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->cjobs));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->averageppm));
-               NDR_CHECK(ndr_push_trailer_align(ndr, 5));
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->servername) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->printername) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->sharename) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sharename));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sharename));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sharename));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->portname) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->drivername) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->drivername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->drivername));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->drivername));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->comment) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->comment));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->comment));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->comment));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->location) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->location));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->location));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-                       if (r->devmode) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode));
-                               {
-                                       struct ndr_push *_ndr_devmode;
-                                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_devmode, 0, -1));
-                                       NDR_CHECK(ndr_push_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
-                                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_devmode, 0, -1));
-                               }
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode));
-                       }
-                       ndr->flags = _flags_save_spoolss_DeviceMode;
-               }
-               {
-                       uint32_t _flags_save_string = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->sepfile) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sepfile));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sepfile));
+                       } else {
+                               r->name = NULL;
                        }
                        ndr->flags = _flags_save_string;
                }
                {
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->printprocessor) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printprocessor));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printprocessor));
+                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
+                       if (_ptr_comment) {
+                               NDR_PULL_ALLOC(ndr, r->comment);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->comment, _ptr_comment));
+                       } else {
+                               r->comment = NULL;
                        }
                        ndr->flags = _flags_save_string;
                }
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
                {
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->datatype) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->datatype));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->datatype));
+                       if (r->description) {
+                               uint32_t _relative_save_offset;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->description));
+                               _mem_save_description_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->description, 0);
+                               NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->description));
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_description_0, 0);
+                               if (ndr->offset > ndr->relative_highest_offset) {
+                                       ndr->relative_highest_offset = ndr->offset;
+                               }
+                               ndr->offset = _relative_save_offset;
                        }
                        ndr->flags = _flags_save_string;
                }
                {
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-                       if (r->parameters) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters));
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters));
+                       if (r->name) {
+                               uint32_t _relative_save_offset;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->name));
+                               _mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
+                               NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->name));
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
+                               if (ndr->offset > ndr->relative_highest_offset) {
+                                       ndr->relative_highest_offset = ndr->offset;
+                               }
+                               ndr->offset = _relative_save_offset;
                        }
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
-                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-                       if (r->secdesc) {
-                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc));
-                               {
-                                       struct ndr_push *_ndr_secdesc;
-                                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_push_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
-                                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1));
+                       uint32_t _flags_save_string = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                       if (r->comment) {
+                               uint32_t _relative_save_offset;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->comment));
+                               _mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
+                               NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->comment));
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
+                               if (ndr->offset > ndr->relative_highest_offset) {
+                                       ndr->relative_highest_offset = ndr->offset;
                                }
-                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc));
+                               ndr->offset = _relative_save_offset;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_string;
                }
        }
        return NDR_ERR_SUCCESS;
 }
 
+_PUBLIC_ void ndr_print_spoolss_PrinterInfo1(struct ndr_print *ndr, const char *name, const struct spoolss_PrinterInfo1 *r)
+{
+       ndr_print_struct(ndr, name, "spoolss_PrinterInfo1");
+       ndr->depth++;
+       ndr_print_spoolss_PrinterAttributes(ndr, "flags", r->flags);
+       ndr_print_ptr(ndr, "description", r->description);
+       ndr->depth++;
+       if (r->description) {
+               ndr_print_string(ndr, "description", r->description);
+       }
+       ndr->depth--;
+       ndr_print_ptr(ndr, "name", r->name);
+       ndr->depth++;
+       if (r->name) {
+               ndr_print_string(ndr, "name", r->name);
+       }
+       ndr->depth--;
+       ndr_print_ptr(ndr, "comment", r->comment);
+       ndr->depth++;
+       if (r->comment) {
+               ndr_print_string(ndr, "comment", r->comment);
+       }
+       ndr->depth--;
+       ndr->depth--;
+}
+
+_PUBLIC_ size_t ndr_size_spoolss_PrinterInfo1(const struct spoolss_PrinterInfo1 *r, struct smb_iconv_convenience *ic, int flags)
+{
+       return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1, ic);
+}
+
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PrinterInfo2 *r)
 {
        uint32_t _ptr_servername;
@@ -1896,7 +1956,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
                        if (_ptr_secdesc) {
@@ -1905,7 +1965,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                        } else {
                                r->secdesc = NULL;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
                NDR_CHECK(ndr_pull_spoolss_PrinterAttributes(ndr, NDR_SCALARS, &r->attributes));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority));
@@ -2143,7 +2203,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        if (r->secdesc) {
                                uint32_t _relative_save_offset;
@@ -2154,7 +2214,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                                {
                                        struct ndr_pull *_ndr_secdesc;
                                        NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_pull_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+                                       NDR_CHECK(ndr_pull_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
                                        NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_secdesc, 0, -1));
                                }
                                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
@@ -2163,7 +2223,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                                }
                                ndr->offset = _relative_save_offset;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -2248,7 +2308,7 @@ _PUBLIC_ void ndr_print_spoolss_PrinterInfo2(struct ndr_print *ndr, const char *
        ndr_print_ptr(ndr, "secdesc", r->secdesc);
        ndr->depth++;
        if (r->secdesc) {
-               ndr_print_security_descriptor(ndr, "secdesc", r->secdesc);
+               ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc);
        }
        ndr->depth--;
        ndr_print_spoolss_PrinterAttributes(ndr, "attributes", r->attributes);
@@ -2272,28 +2332,28 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo3(struct ndr_push *ndr, i
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 5));
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
                NDR_CHECK(ndr_push_trailer_align(ndr, 5));
        }
        if (ndr_flags & NDR_BUFFERS) {
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        if (r->secdesc) {
                                NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc));
                                {
                                        struct ndr_push *_ndr_secdesc;
                                        NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_push_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+                                       NDR_CHECK(ndr_push_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
                                        NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1));
                                }
                                NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc));
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -2306,7 +2366,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 5));
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
                        if (_ptr_secdesc) {
@@ -2315,13 +2375,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i
                        } else {
                                r->secdesc = NULL;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
                NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
        }
        if (ndr_flags & NDR_BUFFERS) {
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        if (r->secdesc) {
                                uint32_t _relative_save_offset;
@@ -2332,7 +2392,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i
                                {
                                        struct ndr_pull *_ndr_secdesc;
                                        NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_pull_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+                                       NDR_CHECK(ndr_pull_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
                                        NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_secdesc, 0, -1));
                                }
                                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
@@ -2341,7 +2401,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i
                                }
                                ndr->offset = _relative_save_offset;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -2354,7 +2414,7 @@ _PUBLIC_ void ndr_print_spoolss_PrinterInfo3(struct ndr_print *ndr, const char *
        ndr_print_ptr(ndr, "secdesc", r->secdesc);
        ndr->depth++;
        if (r->secdesc) {
-               ndr_print_security_descriptor(ndr, "secdesc", r->secdesc);
+               ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc);
        }
        ndr->depth--;
        ndr->depth--;
@@ -3749,10 +3809,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
                NDR_CHECK(ndr_push_spoolss_JobStatus(ndr, NDR_SCALARS, r->status));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
@@ -3883,19 +3943,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        if (r->secdesc) {
                                NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc));
                                {
                                        struct ndr_push *_ndr_secdesc;
                                        NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_push_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+                                       NDR_CHECK(ndr_push_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
                                        NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1));
                                }
                                NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc));
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -4063,7 +4123,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
                        if (_ptr_secdesc) {
@@ -4072,7 +4132,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                        } else {
                                r->secdesc = NULL;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
                NDR_CHECK(ndr_pull_spoolss_JobStatus(ndr, NDR_SCALARS, &r->status));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority));
@@ -4294,7 +4354,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        if (r->secdesc) {
                                uint32_t _relative_save_offset;
@@ -4305,7 +4365,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                                {
                                        struct ndr_pull *_ndr_secdesc;
                                        NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_pull_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+                                       NDR_CHECK(ndr_pull_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
                                        NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_secdesc, 0, -1));
                                }
                                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
@@ -4314,7 +4374,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                                }
                                ndr->offset = _relative_save_offset;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -4394,7 +4454,7 @@ _PUBLIC_ void ndr_print_spoolss_JobInfo2(struct ndr_print *ndr, const char *name
        ndr_print_ptr(ndr, "secdesc", r->secdesc);
        ndr->depth++;
        if (r->secdesc) {
-               ndr_print_security_descriptor(ndr, "secdesc", r->secdesc);
+               ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc);
        }
        ndr->depth--;
        ndr_print_spoolss_JobStatus(ndr, "status", r->status);
@@ -4530,10 +4590,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
                NDR_CHECK(ndr_push_spoolss_JobStatus(ndr, NDR_SCALARS, r->status));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
@@ -4665,19 +4725,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        if (r->secdesc) {
                                NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc));
                                {
                                        struct ndr_push *_ndr_secdesc;
                                        NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_push_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+                                       NDR_CHECK(ndr_push_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
                                        NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1));
                                }
                                NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc));
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -4845,7 +4905,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
                        if (_ptr_secdesc) {
@@ -4854,7 +4914,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                        } else {
                                r->secdesc = NULL;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
                NDR_CHECK(ndr_pull_spoolss_JobStatus(ndr, NDR_SCALARS, &r->status));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority));
@@ -5077,7 +5137,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                        ndr->flags = _flags_save_string;
                }
                {
-                       uint32_t _flags_save_security_descriptor = ndr->flags;
+                       uint32_t _flags_save_spoolss_security_descriptor = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        if (r->secdesc) {
                                uint32_t _relative_save_offset;
@@ -5088,7 +5148,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                                {
                                        struct ndr_pull *_ndr_secdesc;
                                        NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
-                                       NDR_CHECK(ndr_pull_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+                                       NDR_CHECK(ndr_pull_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
                                        NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_secdesc, 0, -1));
                                }
                                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
@@ -5097,7 +5157,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                                }
                                ndr->offset = _relative_save_offset;
                        }
-                       ndr->flags = _flags_save_security_descriptor;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -5177,7 +5237,7 @@ _PUBLIC_ void ndr_print_spoolss_JobInfo4(struct ndr_print *ndr, const char *name
        ndr_print_ptr(ndr, "secdesc", r->secdesc);
        ndr->depth++;
        if (r->secdesc) {
-               ndr_print_security_descriptor(ndr, "secdesc", r->secdesc);
+               ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc);
        }
        ndr->depth--;
        ndr_print_spoolss_JobStatus(ndr, "status", r->status);
@@ -6750,6 +6810,31 @@ _PUBLIC_ void ndr_print_spoolss_PrinterControl(struct ndr_print *ndr, const char
        ndr_print_enum(ndr, name, "ENUM", val, r);
 }
 
+static enum ndr_err_code ndr_push_spoolss_Build(struct ndr_push *ndr, int ndr_flags, enum spoolss_Build r)
+{
+       NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_Build(struct ndr_pull *ndr, int ndr_flags, enum spoolss_Build *r)
+{
+       uint32_t v;
+       NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_Build(struct ndr_print *ndr, const char *name, enum spoolss_Build r)
+{
+       const char *val = NULL;
+
+       switch (r) {
+               case SPOOLSS_DEBUGGING_BUILD: val = "SPOOLSS_DEBUGGING_BUILD"; break;
+               case SPOOLSS_RELEASE_BUILD: val = "SPOOLSS_RELEASE_BUILD"; break;
+       }
+       ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
 static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo0(struct ndr_push *ndr, int ndr_flags, const struct spoolss_SetPrinterInfo0 *r)
 {
        if (ndr_flags & NDR_SCALARS) {
@@ -6763,7 +6848,7 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo0(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->global_counter));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->total_pages));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->free_build));
+               NDR_CHECK(ndr_push_spoolss_Build(ndr, NDR_SCALARS, r->free_build));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->spooling));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_spooling));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->session_counter));
@@ -6829,7 +6914,7 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo0(struct ndr_pull *ndr,
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->global_counter));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->total_pages));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version));
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->free_build));
+               NDR_CHECK(ndr_pull_spoolss_Build(ndr, NDR_SCALARS, &r->free_build));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->spooling));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->max_spooling));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->session_counter));
@@ -6903,7 +6988,7 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterInfo0(struct ndr_print *ndr, const cha
        ndr_print_uint32(ndr, "global_counter", r->global_counter);
        ndr_print_uint32(ndr, "total_pages", r->total_pages);
        ndr_print_uint32(ndr, "version", r->version);
-       ndr_print_uint32(ndr, "free_build", r->free_build);
+       ndr_print_spoolss_Build(ndr, "free_build", r->free_build);
        ndr_print_uint32(ndr, "spooling", r->spooling);
        ndr_print_uint32(ndr, "max_spooling", r->max_spooling);
        ndr_print_uint32(ndr, "session_counter", r->session_counter);
@@ -20186,8 +20271,13 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterEnumValues(struct ndr_push *n
                }
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2 * strlen_m_term(r->value_name)));
                NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->type));
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->data));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_spoolss_PrinterData(r->data, r->type, ndr->iconv_convenience, ndr->flags)));
+               {
+                       uint32_t _flags_save_DATA_BLOB = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+                       NDR_CHECK(ndr_push_relative_ptr1(ndr, r->data));
+                       ndr->flags = _flags_save_DATA_BLOB;
+               }
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->data->length));
                NDR_CHECK(ndr_push_trailer_align(ndr, 5));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -20202,16 +20292,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterEnumValues(struct ndr_push *n
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->data) {
-                       NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data));
-                       {
-                               struct ndr_push *_ndr_data;
-                               NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_data, 0, r->data_length));
-                               NDR_CHECK(ndr_push_set_switch_value(_ndr_data, r->data, r->type));
-                               NDR_CHECK(ndr_push_spoolss_PrinterData(_ndr_data, NDR_SCALARS|NDR_BUFFERS, r->data));
-                               NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_data, 0, r->data_length));
+               {
+                       uint32_t _flags_save_DATA_BLOB = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+                       if (r->data) {
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data));
+                               {
+                                       struct ndr_push *_ndr_data;
+                                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_data, 0, r->data->length));
+                                       NDR_CHECK(ndr_push_DATA_BLOB(_ndr_data, NDR_SCALARS, *r->data));
+                                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_data, 0, r->data->length));
+                               }
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data));
                        }
-                       NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data));
+                       ndr->flags = _flags_save_DATA_BLOB;
                }
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
@@ -20242,12 +20336,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterEnumValues(struct ndr_pull *n
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->value_name_len));
                NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->type));
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-               if (_ptr_data) {
-                       NDR_PULL_ALLOC(ndr, r->data);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->data, _ptr_data));
-               } else {
-                       r->data = NULL;
+               {
+                       uint32_t _flags_save_DATA_BLOB = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
+                       if (_ptr_data) {
+                               NDR_PULL_ALLOC(ndr, r->data);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->data, _ptr_data));
+                       } else {
+                               r->data = NULL;
+                       }
+                       ndr->flags = _flags_save_DATA_BLOB;
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->data_length));
                NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
@@ -20272,24 +20371,28 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterEnumValues(struct ndr_pull *n
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->data) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->data));
-                       _mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-                       {
-                               struct ndr_pull *_ndr_data;
-                               NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_data, 0, r->data_length));
-                               NDR_CHECK(ndr_pull_set_switch_value(_ndr_data, r->data, r->type));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterData(_ndr_data, NDR_SCALARS|NDR_BUFFERS, r->data));
-                               NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_data, 0, r->data_length));
-                       }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-                       if (ndr->offset > ndr->relative_highest_offset) {
-                               ndr->relative_highest_offset = ndr->offset;
+               {
+                       uint32_t _flags_save_DATA_BLOB = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+                       if (r->data) {
+                               uint32_t _relative_save_offset;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->data));
+                               _mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
+                               {
+                                       struct ndr_pull *_ndr_data;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_data, 0, r->data_length));
+                                       NDR_CHECK(ndr_pull_DATA_BLOB(_ndr_data, NDR_SCALARS, r->data));
+                                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_data, 0, r->data_length));
+                               }
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
+                               if (ndr->offset > ndr->relative_highest_offset) {
+                                       ndr->relative_highest_offset = ndr->offset;
+                               }
+                               ndr->offset = _relative_save_offset;
                        }
-                       ndr->offset = _relative_save_offset;
+                       ndr->flags = _flags_save_DATA_BLOB;
                }
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
@@ -20311,11 +20414,10 @@ _PUBLIC_ void ndr_print_spoolss_PrinterEnumValues(struct ndr_print *ndr, const c
        ndr_print_ptr(ndr, "data", r->data);
        ndr->depth++;
        if (r->data) {
-               ndr_print_set_switch_value(ndr, r->data, r->type);
-               ndr_print_spoolss_PrinterData(ndr, "data", r->data);
+               ndr_print_DATA_BLOB(ndr, "data", *r->data);
        }
        ndr->depth--;
-       ndr_print_uint32(ndr, "data_length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_spoolss_PrinterData(r->data, r->type, ndr->iconv_convenience, ndr->flags):r->data_length);
+       ndr_print_uint32(ndr, "data_length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->data->length:r->data_length);
        ndr->depth--;
 }
 
@@ -24065,7 +24167,7 @@ _PUBLIC_ void ndr_print_spoolss_ScheduleJob(struct ndr_print *ndr, const char *n
        ndr->depth--;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push__spoolss_GetPrinterData(struct ndr_push *ndr, int flags, const struct _spoolss_GetPrinterData *r)
+static enum ndr_err_code ndr_push_spoolss_GetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_GetPrinterData *r)
 {
        if (flags & NDR_IN) {
                if (r->in.handle == NULL) {
@@ -24086,7 +24188,8 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_GetPrinterData(struct ndr_push *ndr
                if (r->out.data == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, *r->out.data));
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->in.offered));
+               NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.data, r->in.offered));
                if (r->out.needed == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
@@ -24096,11 +24199,10 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_GetPrinterData(struct ndr_push *ndr
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr, int flags, struct _spoolss_GetPrinterData *r)
+static enum ndr_err_code ndr_pull_spoolss_GetPrinterData(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterData *r)
 {
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_type_0;
-       TALLOC_CTX *_mem_save_data_0;
        TALLOC_CTX *_mem_save_needed_0;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
@@ -24122,8 +24224,8 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
                NDR_PULL_ALLOC(ndr, r->out.type);
                ZERO_STRUCTP(r->out.type);
-               NDR_PULL_ALLOC(ndr, r->out.data);
-               ZERO_STRUCTP(r->out.data);
+               NDR_PULL_ALLOC_N(ndr, r->out.data, r->in.offered);
+               memset(r->out.data, 0, (r->in.offered) * sizeof(*r->out.data));
                NDR_PULL_ALLOC(ndr, r->out.needed);
                ZERO_STRUCTP(r->out.needed);
        }
@@ -24135,13 +24237,11 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr
                NDR_PULL_SET_MEM_CTX(ndr, r->out.type, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, r->out.type));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_type_0, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->out.data));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.data);
+                       NDR_PULL_ALLOC_N(ndr, r->out.data, ndr_get_array_size(ndr, &r->out.data));
                }
-               _mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.data, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, r->out.data));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, ndr_get_array_size(ndr, &r->out.data)));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.needed);
                }
@@ -24150,44 +24250,9 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.needed));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_needed_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-       }
-       return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push___spoolss_GetPrinterData(struct ndr_push *ndr, int flags, const struct __spoolss_GetPrinterData *r)
-{
-       if (flags & NDR_IN) {
-               NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-       }
-       if (flags & NDR_OUT) {
-               if (r->out.data == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-               }
-               NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.data, r->in.type));
-               NDR_CHECK(ndr_push_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
-       }
-       return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull___spoolss_GetPrinterData(struct ndr_pull *ndr, int flags, struct __spoolss_GetPrinterData *r)
-{
-       TALLOC_CTX *_mem_save_data_0;
-       if (flags & NDR_IN) {
-               ZERO_STRUCT(r->out);
-
-               NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
-               NDR_PULL_ALLOC(ndr, r->out.data);
-               ZERO_STRUCTP(r->out.data);
-       }
-       if (flags & NDR_OUT) {
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.data);
+               if (r->out.data) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.data, r->in.offered));
                }
-               _mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.data, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.data, r->in.type));
-               NDR_CHECK(ndr_pull_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
        }
        return NDR_ERR_SUCCESS;
 }
@@ -24219,8 +24284,7 @@ _PUBLIC_ void ndr_print_spoolss_GetPrinterData(struct ndr_print *ndr, const char
                ndr->depth--;
                ndr_print_ptr(ndr, "data", r->out.data);
                ndr->depth++;
-               ndr_print_set_switch_value(ndr, r->out.data, *r->out.type);
-               ndr_print_spoolss_PrinterData(ndr, "data", r->out.data);
+               ndr_print_array_uint8(ndr, "data", r->out.data, r->in.offered);
                ndr->depth--;
                ndr_print_ptr(ndr, "needed", r->out.needed);
                ndr->depth++;
@@ -24232,7 +24296,7 @@ _PUBLIC_ void ndr_print_spoolss_GetPrinterData(struct ndr_print *ndr, const char
        ndr->depth--;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const struct _spoolss_SetPrinterData *r)
+static enum ndr_err_code ndr_push_spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_SetPrinterData *r)
 {
        if (flags & NDR_IN) {
                if (r->in.handle == NULL) {
@@ -24244,8 +24308,12 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterData(struct ndr_push *ndr
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->in.value_name, CH_UTF16)));
                NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.value_name, ndr_charset_length(r->in.value_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-               NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->in.data));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in._offered));
+               if (r->in.data == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->in.offered));
+               NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.data, r->in.offered));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.offered));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
@@ -24253,21 +24321,6 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterData(struct ndr_push *ndr
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push___spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const struct __spoolss_SetPrinterData *r)
-{
-       if (flags & NDR_IN) {
-               NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-       }
-       if (flags & NDR_OUT) {
-               if (r->out.data == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-               }
-               NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.data, r->in.type));
-               NDR_CHECK(ndr_push_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
-       }
-       return NDR_ERR_SUCCESS;
-}
-
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterData(struct ndr_pull *ndr, int flags, struct spoolss_SetPrinterData *r)
 {
        TALLOC_CTX *_mem_save_handle_0;
@@ -24287,14 +24340,15 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterData(struct ndr_pull *ndr, i
                NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.value_name), sizeof(uint16_t)));
                NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, ndr_get_array_length(ndr, &r->in.value_name), sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
-               {
-                       struct ndr_pull *_ndr_data;
-                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_data, 4, -1));
-                       NDR_CHECK(ndr_pull_set_switch_value(_ndr_data, &r->in.data, r->in.type));
-                       NDR_CHECK(ndr_pull_spoolss_PrinterData(_ndr_data, NDR_SCALARS|NDR_BUFFERS, &r->in.data));
-                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_data, 4, -1));
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->in.data));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC_N(ndr, r->in.data, ndr_get_array_size(ndr, &r->in.data));
+               }
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.data, ndr_get_array_size(ndr, &r->in.data)));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
+               if (r->in.data) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.data, r->in.offered));
                }
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in._offered));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -24318,9 +24372,11 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterData(struct ndr_print *ndr, const char
                ndr->depth--;
                ndr_print_string(ndr, "value_name", r->in.value_name);
                ndr_print_winreg_Type(ndr, "type", r->in.type);
-               ndr_print_set_switch_value(ndr, &r->in.data, r->in.type);
-               ndr_print_spoolss_PrinterData(ndr, "data", &r->in.data);
-               ndr_print_uint32(ndr, "_offered", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_spoolss_PrinterData(&r->in.data, r->in.type, ndr->iconv_convenience, flags):r->in._offered);
+               ndr_print_ptr(ndr, "data", r->in.data);
+               ndr->depth++;
+               ndr_print_array_uint8(ndr, "data", r->in.data, r->in.offered);
+               ndr->depth--;
+               ndr_print_uint32(ndr, "offered", r->in.offered);
                ndr->depth--;
        }
        if (flags & NDR_OUT) {
@@ -28472,7 +28528,7 @@ _PUBLIC_ void ndr_print_spoolss_4c(struct ndr_print *ndr, const char *name, int
        ndr->depth--;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterDataEx(struct ndr_push *ndr, int flags, const struct _spoolss_SetPrinterDataEx *r)
+static enum ndr_err_code ndr_push_spoolss_SetPrinterDataEx(struct ndr_push *ndr, int flags, const struct spoolss_SetPrinterDataEx *r)
 {
        if (flags & NDR_IN) {
                if (r->in.handle == NULL) {
@@ -28488,8 +28544,12 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterDataEx(struct ndr_push *n
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->in.value_name, CH_UTF16)));
                NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.value_name, ndr_charset_length(r->in.value_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-               NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->in.data));
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in._offered));
+               if (r->in.data == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->in.offered));
+               NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.data, r->in.offered));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.offered));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
@@ -28497,21 +28557,6 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterDataEx(struct ndr_push *n
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push___spoolss_SetPrinterDataEx(struct ndr_push *ndr, int flags, const struct __spoolss_SetPrinterDataEx *r)
-{
-       if (flags & NDR_IN) {
-               NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-       }
-       if (flags & NDR_OUT) {
-               if (r->out.data == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-               }
-               NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.data, r->in.type));
-               NDR_CHECK(ndr_push_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
-       }
-       return NDR_ERR_SUCCESS;
-}
-
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterDataEx(struct ndr_pull *ndr, int flags, struct spoolss_SetPrinterDataEx *r)
 {
        TALLOC_CTX *_mem_save_handle_0;
@@ -28538,14 +28583,15 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterDataEx(struct ndr_pull *ndr,
                NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.value_name), sizeof(uint16_t)));
                NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, ndr_get_array_length(ndr, &r->in.value_name), sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
-               {
-                       struct ndr_pull *_ndr_data;
-                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_data, 4, -1));
-                       NDR_CHECK(ndr_pull_set_switch_value(_ndr_data, &r->in.data, r->in.type));
-                       NDR_CHECK(ndr_pull_spoolss_PrinterData(_ndr_data, NDR_SCALARS|NDR_BUFFERS, &r->in.data));
-                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_data, 4, -1));
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->in.data));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC_N(ndr, r->in.data, ndr_get_array_size(ndr, &r->in.data));
+               }
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.data, ndr_get_array_size(ndr, &r->in.data)));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
+               if (r->in.data) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.data, r->in.offered));
                }
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in._offered));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -28570,9 +28616,11 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterDataEx(struct ndr_print *ndr, const ch
                ndr_print_string(ndr, "key_name", r->in.key_name);
                ndr_print_string(ndr, "value_name", r->in.value_name);
                ndr_print_winreg_Type(ndr, "type", r->in.type);
-               ndr_print_set_switch_value(ndr, &r->in.data, r->in.type);
-               ndr_print_spoolss_PrinterData(ndr, "data", &r->in.data);
-               ndr_print_uint32(ndr, "_offered", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_spoolss_PrinterData(&r->in.data, r->in.type, ndr->iconv_convenience, flags):r->in._offered);
+               ndr_print_ptr(ndr, "data", r->in.data);
+               ndr->depth++;
+               ndr_print_array_uint8(ndr, "data", r->in.data, r->in.offered);
+               ndr->depth--;
+               ndr_print_uint32(ndr, "offered", r->in.offered);
                ndr->depth--;
        }
        if (flags & NDR_OUT) {
@@ -28584,7 +28632,7 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterDataEx(struct ndr_print *ndr, const ch
        ndr->depth--;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push__spoolss_GetPrinterDataEx(struct ndr_push *ndr, int flags, const struct _spoolss_GetPrinterDataEx *r)
+static enum ndr_err_code ndr_push_spoolss_GetPrinterDataEx(struct ndr_push *ndr, int flags, const struct spoolss_GetPrinterDataEx *r)
 {
        if (flags & NDR_IN) {
                if (r->in.handle == NULL) {
@@ -28609,7 +28657,8 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_GetPrinterDataEx(struct ndr_push *n
                if (r->out.data == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, *r->out.data));
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->in.offered));
+               NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.data, r->in.offered));
                if (r->out.needed == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
@@ -28619,11 +28668,10 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_GetPrinterDataEx(struct ndr_push *n
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterDataEx(struct ndr_pull *ndr, int flags, struct _spoolss_GetPrinterDataEx *r)
+static enum ndr_err_code ndr_pull_spoolss_GetPrinterDataEx(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterDataEx *r)
 {
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_type_0;
-       TALLOC_CTX *_mem_save_data_0;
        TALLOC_CTX *_mem_save_needed_0;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
@@ -28652,8 +28700,8 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterDataEx(struct ndr_pull *n
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
                NDR_PULL_ALLOC(ndr, r->out.type);
                ZERO_STRUCTP(r->out.type);
-               NDR_PULL_ALLOC(ndr, r->out.data);
-               ZERO_STRUCTP(r->out.data);
+               NDR_PULL_ALLOC_N(ndr, r->out.data, r->in.offered);
+               memset(r->out.data, 0, (r->in.offered) * sizeof(*r->out.data));
                NDR_PULL_ALLOC(ndr, r->out.needed);
                ZERO_STRUCTP(r->out.needed);
        }
@@ -28665,13 +28713,11 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterDataEx(struct ndr_pull *n
                NDR_PULL_SET_MEM_CTX(ndr, r->out.type, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, r->out.type));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_type_0, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->out.data));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.data);
+                       NDR_PULL_ALLOC_N(ndr, r->out.data, ndr_get_array_size(ndr, &r->out.data));
                }
-               _mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.data, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, r->out.data));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, ndr_get_array_size(ndr, &r->out.data)));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.needed);
                }
@@ -28680,44 +28726,9 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterDataEx(struct ndr_pull *n
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.needed));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_needed_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-       }
-       return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push___spoolss_GetPrinterDataEx(struct ndr_push *ndr, int flags, const struct __spoolss_GetPrinterDataEx *r)
-{
-       if (flags & NDR_IN) {
-               NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-       }
-       if (flags & NDR_OUT) {
-               if (r->out.data == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-               }
-               NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.data, r->in.type));
-               NDR_CHECK(ndr_push_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
-       }
-       return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull___spoolss_GetPrinterDataEx(struct ndr_pull *ndr, int flags, struct __spoolss_GetPrinterDataEx *r)
-{
-       TALLOC_CTX *_mem_save_data_0;
-       if (flags & NDR_IN) {
-               ZERO_STRUCT(r->out);
-
-               NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
-               NDR_PULL_ALLOC(ndr, r->out.data);
-               ZERO_STRUCTP(r->out.data);
-       }
-       if (flags & NDR_OUT) {
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.data);
+               if (r->out.data) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.data, r->in.offered));
                }
-               _mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.data, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.data, r->in.type));
-               NDR_CHECK(ndr_pull_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
        }
        return NDR_ERR_SUCCESS;
 }
@@ -28750,8 +28761,7 @@ _PUBLIC_ void ndr_print_spoolss_GetPrinterDataEx(struct ndr_print *ndr, const ch
                ndr->depth--;
                ndr_print_ptr(ndr, "data", r->out.data);
                ndr->depth++;
-               ndr_print_set_switch_value(ndr, r->out.data, *r->out.type);
-               ndr_print_spoolss_PrinterData(ndr, "data", r->out.data);
+               ndr_print_array_uint8(ndr, "data", r->out.data, r->in.offered);
                ndr->depth--;
                ndr_print_ptr(ndr, "needed", r->out.needed);
                ndr->depth++;