rerun 'make samba3-idl'
[samba.git] / librpc / gen_ndr / ndr_spoolss.c
index 587819c7fd31654eb1acd00562eccabbe4dbfd50..8cd1f5dc85580053a4e0b593401bc3dcb5fdba4d 100644 (file)
@@ -224,13 +224,13 @@ _PUBLIC_ void ndr_print_spoolss_MinorVersion(struct ndr_print *ndr, const char *
        ndr_print_enum(ndr, name, "ENUM", val, r);
 }
 
-static enum ndr_err_code ndr_push_spoolss_PrinterStatus(struct ndr_push *ndr, int ndr_flags, uint32_t r)
+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterStatus(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_PrinterStatus(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterStatus(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
 {
        uint32_t v;
        NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
@@ -353,8 +353,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo0(struct ndr_push *ndr, i
                        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(ndr, 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;
                }
@@ -362,8 +363,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo0(struct ndr_push *ndr, i
                        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(ndr, 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;
                }
@@ -623,9 +625,12 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DeviceMode(struct ndr_push *ndr, int
 
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DeviceMode(struct ndr_pull *ndr, int ndr_flags, struct spoolss_DeviceMode *r)
 {
+       uint32_t size_devicename_0 = 0;
+       uint32_t size_formname_0 = 0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->devicename, 32, sizeof(uint16_t), CH_UTF16));
+               size_devicename_0 = 32;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->devicename, size_devicename_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->specversion));
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->driverversion));
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
@@ -644,7 +649,8 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DeviceMode(struct ndr_pull *ndr, int
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->yresolution));
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->ttoption));
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->collate));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->formname, 32, sizeof(uint16_t), CH_UTF16));
+               size_formname_0 = 32;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->formname, size_formname_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->logpixels));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bitsperpel));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pelswidth));
@@ -792,8 +798,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo1(struct ndr_push *ndr, i
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->description) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->description));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->description));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->description));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->description));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -801,8 +808,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo1(struct ndr_push *ndr, i
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -810,8 +818,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo1(struct ndr_push *ndr, i
                        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(ndr, 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;
                }
@@ -948,13 +957,13 @@ _PUBLIC_ size_t ndr_size_spoolss_PrinterInfo1(const struct spoolss_PrinterInfo1
        return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1, ic);
 }
 
-static enum ndr_err_code ndr_push_spoolss_PrinterAttributes(struct ndr_push *ndr, int ndr_flags, uint32_t r)
+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterAttributes(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_PrinterAttributes(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterAttributes(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
 {
        uint32_t v;
        NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
@@ -985,209 +994,6 @@ _PUBLIC_ void ndr_print_spoolss_PrinterAttributes(struct ndr_print *ndr, const c
        ndr->depth--;
 }
 
-_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, 4));
-               {
-                       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;
-               }
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
-               {
-                       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;
-               }
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
-               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));
-       }
-       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(ndr, r->servername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->printername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->sharename));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->portname));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->drivername));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->comment));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->location));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               if (r->devmode) {
-                       NDR_CHECK(ndr_push_relative_ptr2(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));
-                       }
-               }
-               {
-                       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(ndr, r->sepfile));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile));
-                       }
-                       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(ndr, r->printprocessor));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               {
-                       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(ndr, r->datatype));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype));
-                       }
-                       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(ndr, r->parameters));
-                               NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters));
-                       }
-                       ndr->flags = _flags_save_string;
-               }
-               if (r->secdesc) {
-                       NDR_CHECK(ndr_push_relative_ptr2(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));
-                       }
-               }
-       }
-       return NDR_ERR_SUCCESS;
-}
-
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PrinterInfo2 *r)
 {
        uint32_t _ptr_servername;
@@ -1302,12 +1108,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                        }
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
-               if (_ptr_devmode) {
-                       NDR_PULL_ALLOC(ndr, r->devmode);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode));
-               } else {
-                       r->devmode = NULL;
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
+                       if (_ptr_devmode) {
+                               NDR_PULL_ALLOC(ndr, r->devmode);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode));
+                       } else {
+                               r->devmode = NULL;
+                       }
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
                }
                {
                        uint32_t _flags_save_string = ndr->flags;
@@ -1357,12 +1168,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                        }
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
-               if (_ptr_secdesc) {
-                       NDR_PULL_ALLOC(ndr, r->secdesc);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc));
-               } else {
-                       r->secdesc = NULL;
+               {
+                       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) {
+                               NDR_PULL_ALLOC(ndr, r->secdesc);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc));
+                       } else {
+                               r->secdesc = NULL;
+                       }
+                       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));
@@ -1482,20 +1298,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->devmode) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode));
-                       _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
-                       {
-                               struct ndr_pull *_ndr_devmode;
-                               NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_devmode, 0, -1));
-                               NDR_CHECK(ndr_pull_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
-                               NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_devmode, 0, -1));
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       if (r->devmode) {
+                               uint32_t _relative_save_offset;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode));
+                               _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
+                               {
+                                       struct ndr_pull *_ndr_devmode;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_devmode, 0, -1));
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
+                                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_devmode, 0, -1));
+                               }
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
+                               ndr->offset = _relative_save_offset;
                        }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
-                       ndr->offset = _relative_save_offset;
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
                }
                {
                        uint32_t _flags_save_string = ndr->flags;
@@ -1557,20 +1378,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->secdesc) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc));
-                       _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
-                       {
-                               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_subcontext_end(ndr, _ndr_secdesc, 0, -1));
+               {
+                       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;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc));
+                               _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
+                               {
+                                       struct ndr_pull *_ndr_secdesc;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
+                                       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);
+                               ndr->offset = _relative_save_offset;
                        }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
-                       ndr->offset = _relative_save_offset;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -1655,7 +1481,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);
@@ -1678,17 +1504,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, 4));
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
+               {
+                       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_spoolss_security_descriptor;
+               }
        }
        if (ndr_flags & NDR_BUFFERS) {
-               if (r->secdesc) {
-                       NDR_CHECK(ndr_push_relative_ptr2(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_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_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_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -1700,29 +1537,39 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i
        TALLOC_CTX *_mem_save_secdesc_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
-               if (_ptr_secdesc) {
-                       NDR_PULL_ALLOC(ndr, r->secdesc);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc));
-               } else {
-                       r->secdesc = NULL;
+               {
+                       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) {
+                               NDR_PULL_ALLOC(ndr, r->secdesc);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc));
+                       } else {
+                               r->secdesc = NULL;
+                       }
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
-               if (r->secdesc) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc));
-                       _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
-                       {
-                               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_subcontext_end(ndr, _ndr_secdesc, 0, -1));
+               {
+                       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;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc));
+                               _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
+                               {
+                                       struct ndr_pull *_ndr_secdesc;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
+                                       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);
+                               ndr->offset = _relative_save_offset;
                        }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
-                       ndr->offset = _relative_save_offset;
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -1735,7 +1582,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--;
@@ -1769,8 +1616,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo4(struct ndr_push *ndr, i
                        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(ndr, 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;
                }
@@ -1778,8 +1626,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo4(struct ndr_push *ndr, i
                        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(ndr, 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;
                }
@@ -1906,8 +1755,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo5(struct ndr_push *ndr, i
                        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(ndr, 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;
                }
@@ -1915,8 +1765,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo5(struct ndr_push *ndr, i
                        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(ndr, 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;
                }
@@ -2100,8 +1951,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo7(struct ndr_push *ndr, i
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->guid) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->guid));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->guid));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->guid));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->guid));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -2172,17 +2024,28 @@ static enum ndr_err_code ndr_push_spoolss_DeviceModeInfo(struct ndr_push *ndr, i
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
+               {
+                       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;
+               }
        }
        if (ndr_flags & NDR_BUFFERS) {
-               if (r->devmode) {
-                       NDR_CHECK(ndr_push_relative_ptr2(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));
+               {
+                       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;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -2194,29 +2057,39 @@ static enum ndr_err_code ndr_pull_spoolss_DeviceModeInfo(struct ndr_pull *ndr, i
        TALLOC_CTX *_mem_save_devmode_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
-               if (_ptr_devmode) {
-                       NDR_PULL_ALLOC(ndr, r->devmode);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode));
-               } else {
-                       r->devmode = NULL;
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
+                       if (_ptr_devmode) {
+                               NDR_PULL_ALLOC(ndr, r->devmode);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode));
+                       } else {
+                               r->devmode = NULL;
+                       }
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
-               if (r->devmode) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode));
-                       _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
-                       {
-                               struct ndr_pull *_ndr_devmode;
-                               NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_devmode, 0, -1));
-                               NDR_CHECK(ndr_pull_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
-                               NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_devmode, 0, -1));
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       if (r->devmode) {
+                               uint32_t _relative_save_offset;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode));
+                               _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
+                               {
+                                       struct ndr_pull *_ndr_devmode;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_devmode, 0, -1));
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
+                                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_devmode, 0, -1));
+                               }
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
+                               ndr->offset = _relative_save_offset;
                        }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
-                       ndr->offset = _relative_save_offset;
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -2238,121 +2111,126 @@ _PUBLIC_ void ndr_print_spoolss_DeviceModeInfo(struct ndr_print *ndr, const char
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrinterInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 0: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo0(ndr, NDR_SCALARS, &r->info0));
-                       break; }
-
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
-
-                       case 2: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
-
-                       case 3: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo3(ndr, NDR_SCALARS, &r->info3));
-                       break; }
-
-                       case 4: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo4(ndr, NDR_SCALARS, &r->info4));
-                       break; }
-
-                       case 5: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo5(ndr, NDR_SCALARS, &r->info5));
-                       break; }
-
-                       case 6: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo6(ndr, NDR_SCALARS, &r->info6));
-                       break; }
-
-                       case 7: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo7(ndr, NDR_SCALARS, &r->info7));
-                       break; }
-
-                       case 8: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info8));
-                       break; }
-
-                       case 9: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info9));
-                       break; }
-
-                       default: {
-                       break; }
-
-               }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 0:
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo0(ndr, NDR_BUFFERS, &r->info0));
-                       break;
-
-                       case 1:
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
-
-                       case 2:
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
-
-                       case 3:
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo3(ndr, NDR_BUFFERS, &r->info3));
-                       break;
-
-                       case 4:
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo4(ndr, NDR_BUFFERS, &r->info4));
-                       break;
-
-                       case 5:
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo5(ndr, NDR_BUFFERS, &r->info5));
-                       break;
-
-                       case 6:
-                       break;
-
-                       case 7:
-                               NDR_CHECK(ndr_push_spoolss_PrinterInfo7(ndr, NDR_BUFFERS, &r->info7));
-                       break;
-
-                       case 8:
-                               NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info8));
-                       break;
-
-                       case 9:
-                               NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info9));
-                       break;
-
-                       default:
-                       break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 0: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo0(ndr, NDR_SCALARS, &r->info0));
+                               break; }
+
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
+
+                               case 2: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
+
+                               case 3: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo3(ndr, NDR_SCALARS, &r->info3));
+                               break; }
+
+                               case 4: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo4(ndr, NDR_SCALARS, &r->info4));
+                               break; }
+
+                               case 5: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo5(ndr, NDR_SCALARS, &r->info5));
+                               break; }
+
+                               case 6: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo6(ndr, NDR_SCALARS, &r->info6));
+                               break; }
+
+                               case 7: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo7(ndr, NDR_SCALARS, &r->info7));
+                               break; }
+
+                               case 8: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info8));
+                               break; }
+
+                               case 9: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info9));
+                               break; }
+
+                               default: {
+                               break; }
+
+                       }
+               }
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 0:
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo0(ndr, NDR_BUFFERS, &r->info0));
+                               break;
+
+                               case 1:
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
+
+                               case 2:
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
+
+                               case 3:
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo3(ndr, NDR_BUFFERS, &r->info3));
+                               break;
+
+                               case 4:
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo4(ndr, NDR_BUFFERS, &r->info4));
+                               break;
+
+                               case 5:
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo5(ndr, NDR_BUFFERS, &r->info5));
+                               break;
+
+                               case 6:
+                               break;
+
+                               case 7:
+                                       NDR_CHECK(ndr_push_spoolss_PrinterInfo7(ndr, NDR_BUFFERS, &r->info7));
+                               break;
+
+                               case 8:
+                                       NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info8));
+                               break;
+
+                               case 9:
+                                       NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info9));
+                               break;
+
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -2362,179 +2240,190 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo(struct ndr_pull *ndr, in
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 0: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo0(ndr, NDR_SCALARS, &r->info0));
-                       break; }
-
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
-
-                       case 2: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
-
-                       case 3: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo3(ndr, NDR_SCALARS, &r->info3));
-                       break; }
-
-                       case 4: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo4(ndr, NDR_SCALARS, &r->info4));
-                       break; }
-
-                       case 5: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo5(ndr, NDR_SCALARS, &r->info5));
-                       break; }
-
-                       case 6: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo6(ndr, NDR_SCALARS, &r->info6));
-                       break; }
-
-                       case 7: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo7(ndr, NDR_SCALARS, &r->info7));
-                       break; }
-
-                       case 8: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info8));
-                       break; }
-
-                       case 9: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info9));
-                       break; }
-
-                       default: {
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 0: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo0(ndr, NDR_SCALARS, &r->info0));
+                               break; }
+
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
+
+                               case 2: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
+
+                               case 3: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo3(ndr, NDR_SCALARS, &r->info3));
+                               break; }
+
+                               case 4: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo4(ndr, NDR_SCALARS, &r->info4));
+                               break; }
+
+                               case 5: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo5(ndr, NDR_SCALARS, &r->info5));
+                               break; }
+
+                               case 6: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo6(ndr, NDR_SCALARS, &r->info6));
+                               break; }
+
+                               case 7: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo7(ndr, NDR_SCALARS, &r->info7));
+                               break; }
+
+                               case 8: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info8));
+                               break; }
+
+                               case 9: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info9));
+                               break; }
+
+                               default: {
+                               break; }
+
+                       }
+               }
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 0:
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo0(ndr, NDR_BUFFERS, &r->info0));
+                               break;
+
+                               case 1:
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
+
+                               case 2:
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
+
+                               case 3:
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo3(ndr, NDR_BUFFERS, &r->info3));
+                               break;
+
+                               case 4:
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo4(ndr, NDR_BUFFERS, &r->info4));
+                               break;
+
+                               case 5:
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo5(ndr, NDR_BUFFERS, &r->info5));
+                               break;
+
+                               case 6:
+                               break;
+
+                               case 7:
+                                       NDR_CHECK(ndr_pull_spoolss_PrinterInfo7(ndr, NDR_BUFFERS, &r->info7));
+                               break;
+
+                               case 8:
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info8));
+                               break;
+
+                               case 9:
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info9));
+                               break;
+
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+       ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_PrinterInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrinterInfo *r)
+{
+       int level;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_PrinterInfo");
                switch (level) {
                        case 0:
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo0(ndr, NDR_BUFFERS, &r->info0));
+                               ndr_print_spoolss_PrinterInfo0(ndr, "info0", &r->info0);
                        break;
 
                        case 1:
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               ndr_print_spoolss_PrinterInfo1(ndr, "info1", &r->info1);
                        break;
 
                        case 2:
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               ndr_print_spoolss_PrinterInfo2(ndr, "info2", &r->info2);
                        break;
 
                        case 3:
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo3(ndr, NDR_BUFFERS, &r->info3));
+                               ndr_print_spoolss_PrinterInfo3(ndr, "info3", &r->info3);
                        break;
 
                        case 4:
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo4(ndr, NDR_BUFFERS, &r->info4));
+                               ndr_print_spoolss_PrinterInfo4(ndr, "info4", &r->info4);
                        break;
 
                        case 5:
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo5(ndr, NDR_BUFFERS, &r->info5));
+                               ndr_print_spoolss_PrinterInfo5(ndr, "info5", &r->info5);
                        break;
 
                        case 6:
+                               ndr_print_spoolss_PrinterInfo6(ndr, "info6", &r->info6);
                        break;
 
                        case 7:
-                               NDR_CHECK(ndr_pull_spoolss_PrinterInfo7(ndr, NDR_BUFFERS, &r->info7));
+                               ndr_print_spoolss_PrinterInfo7(ndr, "info7", &r->info7);
                        break;
 
                        case 8:
-                               NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info8));
+                               ndr_print_spoolss_DeviceModeInfo(ndr, "info8", &r->info8);
                        break;
 
                        case 9:
-                               NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info9));
+                               ndr_print_spoolss_DeviceModeInfo(ndr, "info9", &r->info9);
                        break;
 
                        default:
                        break;
 
                }
-       }
-       ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
-       return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_spoolss_PrinterInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrinterInfo *r)
-{
-       int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_PrinterInfo");
-       switch (level) {
-               case 0:
-                       ndr_print_spoolss_PrinterInfo0(ndr, "info0", &r->info0);
-               break;
-
-               case 1:
-                       ndr_print_spoolss_PrinterInfo1(ndr, "info1", &r->info1);
-               break;
-
-               case 2:
-                       ndr_print_spoolss_PrinterInfo2(ndr, "info2", &r->info2);
-               break;
-
-               case 3:
-                       ndr_print_spoolss_PrinterInfo3(ndr, "info3", &r->info3);
-               break;
-
-               case 4:
-                       ndr_print_spoolss_PrinterInfo4(ndr, "info4", &r->info4);
-               break;
-
-               case 5:
-                       ndr_print_spoolss_PrinterInfo5(ndr, "info5", &r->info5);
-               break;
-
-               case 6:
-                       ndr_print_spoolss_PrinterInfo6(ndr, "info6", &r->info6);
-               break;
-
-               case 7:
-                       ndr_print_spoolss_PrinterInfo7(ndr, "info7", &r->info7);
-               break;
-
-               case 8:
-                       ndr_print_spoolss_DeviceModeInfo(ndr, "info8", &r->info8);
-               break;
-
-               case 9:
-                       ndr_print_spoolss_DeviceModeInfo(ndr, "info9", &r->info9);
-               break;
-
-               default:
-               break;
-
+               ndr->flags = _flags_save_UNION;
        }
 }
 
 _PUBLIC_ size_t ndr_size_spoolss_PrinterInfo(const union spoolss_PrinterInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
 {
+       flags |= LIBNDR_FLAG_RELATIVE_REVERSE;
        return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo, ic);
 }
 
@@ -2655,8 +2544,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->printer_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printer_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printer_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -2664,8 +2554,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->server_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->server_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->server_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->server_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->server_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -2673,8 +2564,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->user_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->user_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->user_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->user_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -2682,8 +2574,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->document_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->document_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->document_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->document_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->document_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -2691,8 +2584,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_type) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_type));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_type));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_type));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_type));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -2700,8 +2594,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->text_status) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->text_status));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->text_status));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->text_status));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->text_status));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3017,14 +2912,24 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        NDR_CHECK(ndr_push_relative_ptr1(ndr, r->driver_name));
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
+               {
+                       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->text_status));
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
+               {
+                       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_spoolss_security_descriptor;
+               }
                NDR_CHECK(ndr_push_spoolss_JobStatus(ndr, NDR_SCALARS, r->status));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->position));
@@ -3041,8 +2946,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->printer_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printer_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printer_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3050,8 +2956,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->server_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->server_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->server_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->server_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->server_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3059,8 +2966,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->user_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->user_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->user_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->user_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3068,8 +2976,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->document_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->document_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->document_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->document_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->document_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3077,8 +2986,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->notify_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->notify_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->notify_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->notify_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->notify_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3086,8 +2996,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_type) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_type));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_type));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_type));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_type));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3095,8 +3006,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->print_processor) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->print_processor));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->print_processor));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->print_processor));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->print_processor));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3104,8 +3016,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        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(ndr, 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));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3113,27 +3026,51 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->devmode) {
-                       NDR_CHECK(ndr_push_relative_ptr2(ndr, r->devmode));
-                       NDR_CHECK(ndr_push_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode));
+               {
+                       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->text_status) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->text_status));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->text_status));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->text_status));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->text_status));
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->secdesc) {
-                       NDR_CHECK(ndr_push_relative_ptr2(ndr, r->secdesc));
-                       NDR_CHECK(ndr_push_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+               {
+                       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_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_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -3276,12 +3213,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                        }
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
-               if (_ptr_devmode) {
-                       NDR_PULL_ALLOC(ndr, r->devmode);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode));
-               } else {
-                       r->devmode = NULL;
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
+                       if (_ptr_devmode) {
+                               NDR_PULL_ALLOC(ndr, r->devmode);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode));
+                       } else {
+                               r->devmode = NULL;
+                       }
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
                }
                {
                        uint32_t _flags_save_string = ndr->flags;
@@ -3295,12 +3237,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                        }
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
-               if (_ptr_secdesc) {
-                       NDR_PULL_ALLOC(ndr, r->secdesc);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc));
-               } else {
-                       r->secdesc = NULL;
+               {
+                       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) {
+                               NDR_PULL_ALLOC(ndr, r->secdesc);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc));
+                       } else {
+                               r->secdesc = NULL;
+                       }
+                       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));
@@ -3452,15 +3399,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->devmode) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode));
-                       _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
-                       NDR_CHECK(ndr_pull_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
-                       ndr->offset = _relative_save_offset;
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       if (r->devmode) {
+                               uint32_t _relative_save_offset;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode));
+                               _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
+                               {
+                                       struct ndr_pull *_ndr_devmode;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_devmode, 0, -1));
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
+                                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_devmode, 0, -1));
+                               }
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
+                               ndr->offset = _relative_save_offset;
+                       }
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
                }
                {
                        uint32_t _flags_save_string = ndr->flags;
@@ -3477,15 +3434,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->secdesc) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc));
-                       _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
-                       NDR_CHECK(ndr_pull_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
-                       ndr->offset = _relative_save_offset;
+               {
+                       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;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc));
+                               _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
+                               {
+                                       struct ndr_pull *_ndr_secdesc;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
+                                       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);
+                               ndr->offset = _relative_save_offset;
+                       }
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -3565,7 +3532,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);
@@ -3686,14 +3653,24 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        NDR_CHECK(ndr_push_relative_ptr1(ndr, r->driver_name));
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
+               {
+                       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->text_status));
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
+               {
+                       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_spoolss_security_descriptor;
+               }
                NDR_CHECK(ndr_push_spoolss_JobStatus(ndr, NDR_SCALARS, r->status));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->position));
@@ -3711,8 +3688,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->printer_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printer_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printer_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3720,8 +3698,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->server_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->server_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->server_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->server_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->server_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3729,8 +3708,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->user_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->user_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->user_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->user_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3738,8 +3718,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->document_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->document_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->document_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->document_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->document_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3747,8 +3728,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->notify_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->notify_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->notify_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->notify_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->notify_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3756,8 +3738,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_type) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_type));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_type));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_type));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_type));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3765,8 +3748,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->print_processor) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->print_processor));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->print_processor));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->print_processor));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->print_processor));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3774,8 +3758,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        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(ndr, 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));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -3783,27 +3768,51 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->devmode) {
-                       NDR_CHECK(ndr_push_relative_ptr2(ndr, r->devmode));
-                       NDR_CHECK(ndr_push_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode));
+               {
+                       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->text_status) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->text_status));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->text_status));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->text_status));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->text_status));
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->secdesc) {
-                       NDR_CHECK(ndr_push_relative_ptr2(ndr, r->secdesc));
-                       NDR_CHECK(ndr_push_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
+               {
+                       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_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_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -3946,12 +3955,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                        }
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
-               if (_ptr_devmode) {
-                       NDR_PULL_ALLOC(ndr, r->devmode);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode));
-               } else {
-                       r->devmode = NULL;
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
+                       if (_ptr_devmode) {
+                               NDR_PULL_ALLOC(ndr, r->devmode);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode));
+                       } else {
+                               r->devmode = NULL;
+                       }
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
                }
                {
                        uint32_t _flags_save_string = ndr->flags;
@@ -3965,12 +3979,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                        }
                        ndr->flags = _flags_save_string;
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
-               if (_ptr_secdesc) {
-                       NDR_PULL_ALLOC(ndr, r->secdesc);
-                       NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc));
-               } else {
-                       r->secdesc = NULL;
+               {
+                       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) {
+                               NDR_PULL_ALLOC(ndr, r->secdesc);
+                               NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc));
+                       } else {
+                               r->secdesc = NULL;
+                       }
+                       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));
@@ -4123,15 +4142,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->devmode) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode));
-                       _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
-                       NDR_CHECK(ndr_pull_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
-                       ndr->offset = _relative_save_offset;
+               {
+                       uint32_t _flags_save_spoolss_DeviceMode = ndr->flags;
+                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
+                       if (r->devmode) {
+                               uint32_t _relative_save_offset;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode));
+                               _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
+                               {
+                                       struct ndr_pull *_ndr_devmode;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_devmode, 0, -1));
+                                       NDR_CHECK(ndr_pull_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
+                                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_devmode, 0, -1));
+                               }
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
+                               ndr->offset = _relative_save_offset;
+                       }
+                       ndr->flags = _flags_save_spoolss_DeviceMode;
                }
                {
                        uint32_t _flags_save_string = ndr->flags;
@@ -4148,15 +4177,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->secdesc) {
-                       uint32_t _relative_save_offset;
-                       _relative_save_offset = ndr->offset;
-                       NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc));
-                       _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
-                       NDR_CHECK(ndr_pull_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
-                       ndr->offset = _relative_save_offset;
+               {
+                       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;
+                               _relative_save_offset = ndr->offset;
+                               NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc));
+                               _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
+                               {
+                                       struct ndr_pull *_ndr_secdesc;
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1));
+                                       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);
+                               ndr->offset = _relative_save_offset;
+                       }
+                       ndr->flags = _flags_save_spoolss_security_descriptor;
                }
        }
        return NDR_ERR_SUCCESS;
@@ -4236,7 +4275,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);
@@ -4261,61 +4300,66 @@ _PUBLIC_ size_t ndr_size_spoolss_JobInfo4(const struct spoolss_JobInfo4 *r, stru
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_JobInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_JobInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_JobInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       case 2: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_JobInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
+                               case 2: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_JobInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
 
-                       case 3: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_JobInfo3(ndr, NDR_SCALARS, &r->info3));
-                       break; }
+                               case 3: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_JobInfo3(ndr, NDR_SCALARS, &r->info3));
+                               break; }
 
-                       case 4: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_JobInfo4(ndr, NDR_SCALARS, &r->info4));
-                       break; }
+                               case 4: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_JobInfo4(ndr, NDR_SCALARS, &r->info4));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_push_spoolss_JobInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_push_spoolss_JobInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       case 2:
-                               NDR_CHECK(ndr_push_spoolss_JobInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
+                               case 2:
+                                       NDR_CHECK(ndr_push_spoolss_JobInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
 
-                       case 3:
-                       break;
+                               case 3:
+                               break;
 
-                       case 4:
-                               NDR_CHECK(ndr_push_spoolss_JobInfo4(ndr, NDR_BUFFERS, &r->info4));
-                       break;
+                               case 4:
+                                       NDR_CHECK(ndr_push_spoolss_JobInfo4(ndr, NDR_BUFFERS, &r->info4));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -4325,60 +4369,65 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo(struct ndr_pull *ndr, int nd
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_JobInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_JobInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       case 2: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_JobInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
+                               case 2: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_JobInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
 
-                       case 3: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_JobInfo3(ndr, NDR_SCALARS, &r->info3));
-                       break; }
+                               case 3: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_JobInfo3(ndr, NDR_SCALARS, &r->info3));
+                               break; }
 
-                       case 4: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_JobInfo4(ndr, NDR_SCALARS, &r->info4));
-                       break; }
+                               case 4: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_JobInfo4(ndr, NDR_SCALARS, &r->info4));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_pull_spoolss_JobInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_pull_spoolss_JobInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       case 2:
-                               NDR_CHECK(ndr_pull_spoolss_JobInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
+                               case 2:
+                                       NDR_CHECK(ndr_pull_spoolss_JobInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
 
-                       case 3:
-                       break;
+                               case 3:
+                               break;
 
-                       case 4:
-                               NDR_CHECK(ndr_pull_spoolss_JobInfo4(ndr, NDR_BUFFERS, &r->info4));
-                       break;
+                               case 4:
+                                       NDR_CHECK(ndr_pull_spoolss_JobInfo4(ndr, NDR_BUFFERS, &r->info4));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -4387,33 +4436,39 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo(struct ndr_pull *ndr, int nd
 _PUBLIC_ void ndr_print_spoolss_JobInfo(struct ndr_print *ndr, const char *name, const union spoolss_JobInfo *r)
 {
        int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_JobInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_JobInfo1(ndr, "info1", &r->info1);
-               break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_JobInfo");
+               switch (level) {
+                       case 1:
+                               ndr_print_spoolss_JobInfo1(ndr, "info1", &r->info1);
+                       break;
 
-               case 2:
-                       ndr_print_spoolss_JobInfo2(ndr, "info2", &r->info2);
-               break;
+                       case 2:
+                               ndr_print_spoolss_JobInfo2(ndr, "info2", &r->info2);
+                       break;
 
-               case 3:
-                       ndr_print_spoolss_JobInfo3(ndr, "info3", &r->info3);
-               break;
+                       case 3:
+                               ndr_print_spoolss_JobInfo3(ndr, "info3", &r->info3);
+                       break;
 
-               case 4:
-                       ndr_print_spoolss_JobInfo4(ndr, "info4", &r->info4);
-               break;
+                       case 4:
+                               ndr_print_spoolss_JobInfo4(ndr, "info4", &r->info4);
+                       break;
 
-               default:
-               break;
+                       default:
+                       break;
 
+               }
+               ndr->flags = _flags_save_UNION;
        }
 }
 
 _PUBLIC_ size_t ndr_size_spoolss_JobInfo(const union spoolss_JobInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
 {
+       flags |= LIBNDR_FLAG_RELATIVE_REVERSE;
        return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_JobInfo, ic);
 }
 
@@ -4479,16 +4534,28 @@ static enum ndr_err_code ndr_push_spoolss_SetJobInfo1(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_SetJobInfo1(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetJobInfo1 *r)
 {
        uint32_t _ptr_printer_name;
+       uint32_t size_printer_name_1 = 0;
+       uint32_t length_printer_name_1 = 0;
        TALLOC_CTX *_mem_save_printer_name_0;
        uint32_t _ptr_server_name;
+       uint32_t size_server_name_1 = 0;
+       uint32_t length_server_name_1 = 0;
        TALLOC_CTX *_mem_save_server_name_0;
        uint32_t _ptr_user_name;
+       uint32_t size_user_name_1 = 0;
+       uint32_t length_user_name_1 = 0;
        TALLOC_CTX *_mem_save_user_name_0;
        uint32_t _ptr_document_name;
+       uint32_t size_document_name_1 = 0;
+       uint32_t length_document_name_1 = 0;
        TALLOC_CTX *_mem_save_document_name_0;
        uint32_t _ptr_data_type;
+       uint32_t size_data_type_1 = 0;
+       uint32_t length_data_type_1 = 0;
        TALLOC_CTX *_mem_save_data_type_0;
        uint32_t _ptr_text_status;
+       uint32_t size_text_status_1 = 0;
+       uint32_t length_text_status_1 = 0;
        TALLOC_CTX *_mem_save_text_status_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -4545,11 +4612,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo1(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->printer_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->printer_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->printer_name));
-                       if (ndr_get_array_length(ndr, &r->printer_name) > ndr_get_array_size(ndr, &r->printer_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->printer_name), ndr_get_array_length(ndr, &r->printer_name));
+                       size_printer_name_1 = ndr_get_array_size(ndr, &r->printer_name);
+                       length_printer_name_1 = ndr_get_array_length(ndr, &r->printer_name);
+                       if (length_printer_name_1 > size_printer_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printer_name_1, length_printer_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->printer_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printer_name, ndr_get_array_length(ndr, &r->printer_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printer_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printer_name, length_printer_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printer_name_0, 0);
                }
                if (r->server_name) {
@@ -4557,11 +4626,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo1(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->server_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->server_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->server_name));
-                       if (ndr_get_array_length(ndr, &r->server_name) > ndr_get_array_size(ndr, &r->server_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->server_name), ndr_get_array_length(ndr, &r->server_name));
+                       size_server_name_1 = ndr_get_array_size(ndr, &r->server_name);
+                       length_server_name_1 = ndr_get_array_length(ndr, &r->server_name);
+                       if (length_server_name_1 > size_server_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_name_1, length_server_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, length_server_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
                }
                if (r->user_name) {
@@ -4569,11 +4640,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo1(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->user_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->user_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->user_name));
-                       if (ndr_get_array_length(ndr, &r->user_name) > ndr_get_array_size(ndr, &r->user_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user_name), ndr_get_array_length(ndr, &r->user_name));
+                       size_user_name_1 = ndr_get_array_size(ndr, &r->user_name);
+                       length_user_name_1 = ndr_get_array_length(ndr, &r->user_name);
+                       if (length_user_name_1 > size_user_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_user_name_1, length_user_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user_name, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_user_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user_name, length_user_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_name_0, 0);
                }
                if (r->document_name) {
@@ -4581,11 +4654,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo1(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->document_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->document_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->document_name));
-                       if (ndr_get_array_length(ndr, &r->document_name) > ndr_get_array_size(ndr, &r->document_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->document_name), ndr_get_array_length(ndr, &r->document_name));
+                       size_document_name_1 = ndr_get_array_size(ndr, &r->document_name);
+                       length_document_name_1 = ndr_get_array_length(ndr, &r->document_name);
+                       if (length_document_name_1 > size_document_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_document_name_1, length_document_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->document_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->document_name, ndr_get_array_length(ndr, &r->document_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_document_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->document_name, length_document_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_document_name_0, 0);
                }
                if (r->data_type) {
@@ -4593,11 +4668,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo1(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->data_type, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->data_type));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->data_type));
-                       if (ndr_get_array_length(ndr, &r->data_type) > ndr_get_array_size(ndr, &r->data_type)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data_type), ndr_get_array_length(ndr, &r->data_type));
+                       size_data_type_1 = ndr_get_array_size(ndr, &r->data_type);
+                       length_data_type_1 = ndr_get_array_length(ndr, &r->data_type);
+                       if (length_data_type_1 > size_data_type_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_type_1, length_data_type_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->data_type), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_type, ndr_get_array_length(ndr, &r->data_type), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_type_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_type, length_data_type_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_type_0, 0);
                }
                if (r->text_status) {
@@ -4605,11 +4682,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo1(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->text_status, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->text_status));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->text_status));
-                       if (ndr_get_array_length(ndr, &r->text_status) > ndr_get_array_size(ndr, &r->text_status)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->text_status), ndr_get_array_length(ndr, &r->text_status));
+                       size_text_status_1 = ndr_get_array_size(ndr, &r->text_status);
+                       length_text_status_1 = ndr_get_array_length(ndr, &r->text_status);
+                       if (length_text_status_1 > size_text_status_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_text_status_1, length_text_status_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->text_status), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->text_status, ndr_get_array_length(ndr, &r->text_status), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_text_status_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->text_status, length_text_status_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_text_status_0, 0);
                }
        }
@@ -4762,24 +4841,44 @@ static enum ndr_err_code ndr_push_spoolss_SetJobInfo2(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetJobInfo2 *r)
 {
        uint32_t _ptr_printer_name;
+       uint32_t size_printer_name_1 = 0;
+       uint32_t length_printer_name_1 = 0;
        TALLOC_CTX *_mem_save_printer_name_0;
        uint32_t _ptr_server_name;
+       uint32_t size_server_name_1 = 0;
+       uint32_t length_server_name_1 = 0;
        TALLOC_CTX *_mem_save_server_name_0;
        uint32_t _ptr_user_name;
+       uint32_t size_user_name_1 = 0;
+       uint32_t length_user_name_1 = 0;
        TALLOC_CTX *_mem_save_user_name_0;
        uint32_t _ptr_document_name;
+       uint32_t size_document_name_1 = 0;
+       uint32_t length_document_name_1 = 0;
        TALLOC_CTX *_mem_save_document_name_0;
        uint32_t _ptr_notify_name;
+       uint32_t size_notify_name_1 = 0;
+       uint32_t length_notify_name_1 = 0;
        TALLOC_CTX *_mem_save_notify_name_0;
        uint32_t _ptr_data_type;
+       uint32_t size_data_type_1 = 0;
+       uint32_t length_data_type_1 = 0;
        TALLOC_CTX *_mem_save_data_type_0;
        uint32_t _ptr_print_processor;
+       uint32_t size_print_processor_1 = 0;
+       uint32_t length_print_processor_1 = 0;
        TALLOC_CTX *_mem_save_print_processor_0;
        uint32_t _ptr_parameters;
+       uint32_t size_parameters_1 = 0;
+       uint32_t length_parameters_1 = 0;
        TALLOC_CTX *_mem_save_parameters_0;
        uint32_t _ptr_driver_name;
+       uint32_t size_driver_name_1 = 0;
+       uint32_t length_driver_name_1 = 0;
        TALLOC_CTX *_mem_save_driver_name_0;
        uint32_t _ptr_text_status;
+       uint32_t size_text_status_1 = 0;
+       uint32_t length_text_status_1 = 0;
        TALLOC_CTX *_mem_save_text_status_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -4866,11 +4965,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->printer_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->printer_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->printer_name));
-                       if (ndr_get_array_length(ndr, &r->printer_name) > ndr_get_array_size(ndr, &r->printer_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->printer_name), ndr_get_array_length(ndr, &r->printer_name));
+                       size_printer_name_1 = ndr_get_array_size(ndr, &r->printer_name);
+                       length_printer_name_1 = ndr_get_array_length(ndr, &r->printer_name);
+                       if (length_printer_name_1 > size_printer_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printer_name_1, length_printer_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->printer_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printer_name, ndr_get_array_length(ndr, &r->printer_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printer_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printer_name, length_printer_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printer_name_0, 0);
                }
                if (r->server_name) {
@@ -4878,11 +4979,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->server_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->server_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->server_name));
-                       if (ndr_get_array_length(ndr, &r->server_name) > ndr_get_array_size(ndr, &r->server_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->server_name), ndr_get_array_length(ndr, &r->server_name));
+                       size_server_name_1 = ndr_get_array_size(ndr, &r->server_name);
+                       length_server_name_1 = ndr_get_array_length(ndr, &r->server_name);
+                       if (length_server_name_1 > size_server_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_name_1, length_server_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, length_server_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
                }
                if (r->user_name) {
@@ -4890,11 +4993,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->user_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->user_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->user_name));
-                       if (ndr_get_array_length(ndr, &r->user_name) > ndr_get_array_size(ndr, &r->user_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user_name), ndr_get_array_length(ndr, &r->user_name));
+                       size_user_name_1 = ndr_get_array_size(ndr, &r->user_name);
+                       length_user_name_1 = ndr_get_array_length(ndr, &r->user_name);
+                       if (length_user_name_1 > size_user_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_user_name_1, length_user_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user_name, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_user_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user_name, length_user_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_name_0, 0);
                }
                if (r->document_name) {
@@ -4902,11 +5007,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->document_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->document_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->document_name));
-                       if (ndr_get_array_length(ndr, &r->document_name) > ndr_get_array_size(ndr, &r->document_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->document_name), ndr_get_array_length(ndr, &r->document_name));
+                       size_document_name_1 = ndr_get_array_size(ndr, &r->document_name);
+                       length_document_name_1 = ndr_get_array_length(ndr, &r->document_name);
+                       if (length_document_name_1 > size_document_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_document_name_1, length_document_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->document_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->document_name, ndr_get_array_length(ndr, &r->document_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_document_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->document_name, length_document_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_document_name_0, 0);
                }
                if (r->notify_name) {
@@ -4914,11 +5021,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->notify_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->notify_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->notify_name));
-                       if (ndr_get_array_length(ndr, &r->notify_name) > ndr_get_array_size(ndr, &r->notify_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->notify_name), ndr_get_array_length(ndr, &r->notify_name));
+                       size_notify_name_1 = ndr_get_array_size(ndr, &r->notify_name);
+                       length_notify_name_1 = ndr_get_array_length(ndr, &r->notify_name);
+                       if (length_notify_name_1 > size_notify_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_notify_name_1, length_notify_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->notify_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->notify_name, ndr_get_array_length(ndr, &r->notify_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_notify_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->notify_name, length_notify_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_notify_name_0, 0);
                }
                if (r->data_type) {
@@ -4926,11 +5035,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->data_type, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->data_type));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->data_type));
-                       if (ndr_get_array_length(ndr, &r->data_type) > ndr_get_array_size(ndr, &r->data_type)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data_type), ndr_get_array_length(ndr, &r->data_type));
+                       size_data_type_1 = ndr_get_array_size(ndr, &r->data_type);
+                       length_data_type_1 = ndr_get_array_length(ndr, &r->data_type);
+                       if (length_data_type_1 > size_data_type_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_type_1, length_data_type_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->data_type), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_type, ndr_get_array_length(ndr, &r->data_type), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_type_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_type, length_data_type_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_type_0, 0);
                }
                if (r->print_processor) {
@@ -4938,11 +5049,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->print_processor, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->print_processor));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->print_processor));
-                       if (ndr_get_array_length(ndr, &r->print_processor) > ndr_get_array_size(ndr, &r->print_processor)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->print_processor), ndr_get_array_length(ndr, &r->print_processor));
+                       size_print_processor_1 = ndr_get_array_size(ndr, &r->print_processor);
+                       length_print_processor_1 = ndr_get_array_length(ndr, &r->print_processor);
+                       if (length_print_processor_1 > size_print_processor_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_print_processor_1, length_print_processor_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->print_processor), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->print_processor, ndr_get_array_length(ndr, &r->print_processor), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_print_processor_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->print_processor, length_print_processor_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_print_processor_0, 0);
                }
                if (r->parameters) {
@@ -4950,11 +5063,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->parameters, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->parameters));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->parameters));
-                       if (ndr_get_array_length(ndr, &r->parameters) > ndr_get_array_size(ndr, &r->parameters)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->parameters), ndr_get_array_length(ndr, &r->parameters));
+                       size_parameters_1 = ndr_get_array_size(ndr, &r->parameters);
+                       length_parameters_1 = ndr_get_array_length(ndr, &r->parameters);
+                       if (length_parameters_1 > size_parameters_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_parameters_1, length_parameters_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->parameters), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->parameters, ndr_get_array_length(ndr, &r->parameters), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_parameters_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->parameters, length_parameters_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parameters_0, 0);
                }
                if (r->driver_name) {
@@ -4962,11 +5077,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_name));
-                       if (ndr_get_array_length(ndr, &r->driver_name) > ndr_get_array_size(ndr, &r->driver_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_name), ndr_get_array_length(ndr, &r->driver_name));
+                       size_driver_name_1 = ndr_get_array_size(ndr, &r->driver_name);
+                       length_driver_name_1 = ndr_get_array_length(ndr, &r->driver_name);
+                       if (length_driver_name_1 > size_driver_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_name_1, length_driver_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, length_driver_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
                }
                if (r->text_status) {
@@ -4974,11 +5091,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->text_status, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->text_status));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->text_status));
-                       if (ndr_get_array_length(ndr, &r->text_status) > ndr_get_array_size(ndr, &r->text_status)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->text_status), ndr_get_array_length(ndr, &r->text_status));
+                       size_text_status_1 = ndr_get_array_size(ndr, &r->text_status);
+                       length_text_status_1 = ndr_get_array_length(ndr, &r->text_status);
+                       if (length_text_status_1 > size_text_status_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_text_status_1, length_text_status_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->text_status), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->text_status, ndr_get_array_length(ndr, &r->text_status), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_text_status_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->text_status, length_text_status_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_text_status_0, 0);
                }
        }
@@ -5162,24 +5281,44 @@ static enum ndr_err_code ndr_push_spoolss_SetJobInfo4(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetJobInfo4 *r)
 {
        uint32_t _ptr_printer_name;
+       uint32_t size_printer_name_1 = 0;
+       uint32_t length_printer_name_1 = 0;
        TALLOC_CTX *_mem_save_printer_name_0;
        uint32_t _ptr_server_name;
+       uint32_t size_server_name_1 = 0;
+       uint32_t length_server_name_1 = 0;
        TALLOC_CTX *_mem_save_server_name_0;
        uint32_t _ptr_user_name;
+       uint32_t size_user_name_1 = 0;
+       uint32_t length_user_name_1 = 0;
        TALLOC_CTX *_mem_save_user_name_0;
        uint32_t _ptr_document_name;
+       uint32_t size_document_name_1 = 0;
+       uint32_t length_document_name_1 = 0;
        TALLOC_CTX *_mem_save_document_name_0;
        uint32_t _ptr_notify_name;
+       uint32_t size_notify_name_1 = 0;
+       uint32_t length_notify_name_1 = 0;
        TALLOC_CTX *_mem_save_notify_name_0;
        uint32_t _ptr_data_type;
+       uint32_t size_data_type_1 = 0;
+       uint32_t length_data_type_1 = 0;
        TALLOC_CTX *_mem_save_data_type_0;
        uint32_t _ptr_print_processor;
+       uint32_t size_print_processor_1 = 0;
+       uint32_t length_print_processor_1 = 0;
        TALLOC_CTX *_mem_save_print_processor_0;
        uint32_t _ptr_parameters;
+       uint32_t size_parameters_1 = 0;
+       uint32_t length_parameters_1 = 0;
        TALLOC_CTX *_mem_save_parameters_0;
        uint32_t _ptr_driver_name;
+       uint32_t size_driver_name_1 = 0;
+       uint32_t length_driver_name_1 = 0;
        TALLOC_CTX *_mem_save_driver_name_0;
        uint32_t _ptr_text_status;
+       uint32_t size_text_status_1 = 0;
+       uint32_t length_text_status_1 = 0;
        TALLOC_CTX *_mem_save_text_status_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -5267,11 +5406,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->printer_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->printer_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->printer_name));
-                       if (ndr_get_array_length(ndr, &r->printer_name) > ndr_get_array_size(ndr, &r->printer_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->printer_name), ndr_get_array_length(ndr, &r->printer_name));
+                       size_printer_name_1 = ndr_get_array_size(ndr, &r->printer_name);
+                       length_printer_name_1 = ndr_get_array_length(ndr, &r->printer_name);
+                       if (length_printer_name_1 > size_printer_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printer_name_1, length_printer_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->printer_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printer_name, ndr_get_array_length(ndr, &r->printer_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printer_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printer_name, length_printer_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printer_name_0, 0);
                }
                if (r->server_name) {
@@ -5279,11 +5420,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->server_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->server_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->server_name));
-                       if (ndr_get_array_length(ndr, &r->server_name) > ndr_get_array_size(ndr, &r->server_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->server_name), ndr_get_array_length(ndr, &r->server_name));
+                       size_server_name_1 = ndr_get_array_size(ndr, &r->server_name);
+                       length_server_name_1 = ndr_get_array_length(ndr, &r->server_name);
+                       if (length_server_name_1 > size_server_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_name_1, length_server_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, length_server_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
                }
                if (r->user_name) {
@@ -5291,11 +5434,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->user_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->user_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->user_name));
-                       if (ndr_get_array_length(ndr, &r->user_name) > ndr_get_array_size(ndr, &r->user_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user_name), ndr_get_array_length(ndr, &r->user_name));
+                       size_user_name_1 = ndr_get_array_size(ndr, &r->user_name);
+                       length_user_name_1 = ndr_get_array_length(ndr, &r->user_name);
+                       if (length_user_name_1 > size_user_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_user_name_1, length_user_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user_name, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_user_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user_name, length_user_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_name_0, 0);
                }
                if (r->document_name) {
@@ -5303,11 +5448,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->document_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->document_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->document_name));
-                       if (ndr_get_array_length(ndr, &r->document_name) > ndr_get_array_size(ndr, &r->document_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->document_name), ndr_get_array_length(ndr, &r->document_name));
+                       size_document_name_1 = ndr_get_array_size(ndr, &r->document_name);
+                       length_document_name_1 = ndr_get_array_length(ndr, &r->document_name);
+                       if (length_document_name_1 > size_document_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_document_name_1, length_document_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->document_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->document_name, ndr_get_array_length(ndr, &r->document_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_document_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->document_name, length_document_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_document_name_0, 0);
                }
                if (r->notify_name) {
@@ -5315,11 +5462,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->notify_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->notify_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->notify_name));
-                       if (ndr_get_array_length(ndr, &r->notify_name) > ndr_get_array_size(ndr, &r->notify_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->notify_name), ndr_get_array_length(ndr, &r->notify_name));
+                       size_notify_name_1 = ndr_get_array_size(ndr, &r->notify_name);
+                       length_notify_name_1 = ndr_get_array_length(ndr, &r->notify_name);
+                       if (length_notify_name_1 > size_notify_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_notify_name_1, length_notify_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->notify_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->notify_name, ndr_get_array_length(ndr, &r->notify_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_notify_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->notify_name, length_notify_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_notify_name_0, 0);
                }
                if (r->data_type) {
@@ -5327,11 +5476,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->data_type, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->data_type));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->data_type));
-                       if (ndr_get_array_length(ndr, &r->data_type) > ndr_get_array_size(ndr, &r->data_type)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data_type), ndr_get_array_length(ndr, &r->data_type));
+                       size_data_type_1 = ndr_get_array_size(ndr, &r->data_type);
+                       length_data_type_1 = ndr_get_array_length(ndr, &r->data_type);
+                       if (length_data_type_1 > size_data_type_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_type_1, length_data_type_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->data_type), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_type, ndr_get_array_length(ndr, &r->data_type), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_type_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_type, length_data_type_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_type_0, 0);
                }
                if (r->print_processor) {
@@ -5339,11 +5490,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->print_processor, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->print_processor));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->print_processor));
-                       if (ndr_get_array_length(ndr, &r->print_processor) > ndr_get_array_size(ndr, &r->print_processor)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->print_processor), ndr_get_array_length(ndr, &r->print_processor));
+                       size_print_processor_1 = ndr_get_array_size(ndr, &r->print_processor);
+                       length_print_processor_1 = ndr_get_array_length(ndr, &r->print_processor);
+                       if (length_print_processor_1 > size_print_processor_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_print_processor_1, length_print_processor_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->print_processor), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->print_processor, ndr_get_array_length(ndr, &r->print_processor), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_print_processor_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->print_processor, length_print_processor_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_print_processor_0, 0);
                }
                if (r->parameters) {
@@ -5351,11 +5504,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->parameters, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->parameters));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->parameters));
-                       if (ndr_get_array_length(ndr, &r->parameters) > ndr_get_array_size(ndr, &r->parameters)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->parameters), ndr_get_array_length(ndr, &r->parameters));
+                       size_parameters_1 = ndr_get_array_size(ndr, &r->parameters);
+                       length_parameters_1 = ndr_get_array_length(ndr, &r->parameters);
+                       if (length_parameters_1 > size_parameters_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_parameters_1, length_parameters_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->parameters), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->parameters, ndr_get_array_length(ndr, &r->parameters), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_parameters_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->parameters, length_parameters_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parameters_0, 0);
                }
                if (r->driver_name) {
@@ -5363,11 +5518,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_name));
-                       if (ndr_get_array_length(ndr, &r->driver_name) > ndr_get_array_size(ndr, &r->driver_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_name), ndr_get_array_length(ndr, &r->driver_name));
+                       size_driver_name_1 = ndr_get_array_size(ndr, &r->driver_name);
+                       length_driver_name_1 = ndr_get_array_length(ndr, &r->driver_name);
+                       if (length_driver_name_1 > size_driver_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_name_1, length_driver_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, length_driver_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
                }
                if (r->text_status) {
@@ -5375,11 +5532,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetJobInfo4(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->text_status, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->text_status));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->text_status));
-                       if (ndr_get_array_length(ndr, &r->text_status) > ndr_get_array_size(ndr, &r->text_status)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->text_status), ndr_get_array_length(ndr, &r->text_status));
+                       size_text_status_1 = ndr_get_array_size(ndr, &r->text_status);
+                       length_text_status_1 = ndr_get_array_length(ndr, &r->text_status);
+                       if (length_text_status_1 > size_text_status_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_text_status_1, length_text_status_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->text_status), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->text_status, ndr_get_array_length(ndr, &r->text_status), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_text_status_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->text_status, length_text_status_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_text_status_0, 0);
                }
        }
@@ -5534,9 +5693,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_SetJobInfo(struct ndr_pull *ndr, int
        int level;
        uint32_t _level;
        TALLOC_CTX *_mem_save_info1_0;
+       uint32_t _ptr_info1;
        TALLOC_CTX *_mem_save_info2_0;
+       uint32_t _ptr_info2;
        TALLOC_CTX *_mem_save_info3_0;
+       uint32_t _ptr_info3;
        TALLOC_CTX *_mem_save_info4_0;
+       uint32_t _ptr_info4;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -5545,7 +5708,6 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_SetJobInfo(struct ndr_pull *ndr, int
                }
                switch (level) {
                        case 1: {
-                               uint32_t _ptr_info1;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
                                if (_ptr_info1) {
                                        NDR_PULL_ALLOC(ndr, r->info1);
@@ -5555,7 +5717,6 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_SetJobInfo(struct ndr_pull *ndr, int
                        break; }
 
                        case 2: {
-                               uint32_t _ptr_info2;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
                                if (_ptr_info2) {
                                        NDR_PULL_ALLOC(ndr, r->info2);
@@ -5565,7 +5726,6 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_SetJobInfo(struct ndr_pull *ndr, int
                        break; }
 
                        case 3: {
-                               uint32_t _ptr_info3;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info3));
                                if (_ptr_info3) {
                                        NDR_PULL_ALLOC(ndr, r->info3);
@@ -5575,7 +5735,6 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_SetJobInfo(struct ndr_pull *ndr, int
                        break; }
 
                        case 4: {
-                               uint32_t _ptr_info4;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info4));
                                if (_ptr_info4) {
                                        NDR_PULL_ALLOC(ndr, r->info4);
@@ -5835,8 +5994,12 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo0(struct ndr_push *ndr,
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo0(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetPrinterInfo0 *r)
 {
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        TALLOC_CTX *_mem_save_servername_0;
        uint32_t _ptr_printername;
+       uint32_t size_printername_1 = 0;
+       uint32_t length_printername_1 = 0;
        TALLOC_CTX *_mem_save_printername_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -5886,11 +6049,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo0(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->servername));
-                       if (ndr_get_array_length(ndr, &r->servername) > ndr_get_array_size(ndr, &r->servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->servername), ndr_get_array_length(ndr, &r->servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->servername, ndr_get_array_length(ndr, &r->servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
                if (r->printername) {
@@ -5898,11 +6063,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo0(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->printername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->printername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->printername));
-                       if (ndr_get_array_length(ndr, &r->printername) > ndr_get_array_size(ndr, &r->printername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->printername), ndr_get_array_length(ndr, &r->printername));
+                       size_printername_1 = ndr_get_array_size(ndr, &r->printername);
+                       length_printername_1 = ndr_get_array_length(ndr, &r->printername);
+                       if (length_printername_1 > size_printername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printername_1, length_printername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->printername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printername, ndr_get_array_length(ndr, &r->printername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printername, length_printername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printername_0, 0);
                }
        }
@@ -5990,10 +6157,16 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo1(struct ndr_push *ndr,
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo1(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetPrinterInfo1 *r)
 {
        uint32_t _ptr_description;
+       uint32_t size_description_1 = 0;
+       uint32_t length_description_1 = 0;
        TALLOC_CTX *_mem_save_description_0;
        uint32_t _ptr_name;
+       uint32_t size_name_1 = 0;
+       uint32_t length_name_1 = 0;
        TALLOC_CTX *_mem_save_name_0;
        uint32_t _ptr_comment;
+       uint32_t size_comment_1 = 0;
+       uint32_t length_comment_1 = 0;
        TALLOC_CTX *_mem_save_comment_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -6023,11 +6196,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo1(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->description, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->description));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->description));
-                       if (ndr_get_array_length(ndr, &r->description) > ndr_get_array_size(ndr, &r->description)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->description), ndr_get_array_length(ndr, &r->description));
+                       size_description_1 = ndr_get_array_size(ndr, &r->description);
+                       length_description_1 = ndr_get_array_length(ndr, &r->description);
+                       if (length_description_1 > size_description_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_description_1, length_description_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->description), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->description, ndr_get_array_length(ndr, &r->description), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_description_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->description, length_description_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_description_0, 0);
                }
                if (r->name) {
@@ -6035,11 +6210,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo1(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-                       if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
+                       size_name_1 = ndr_get_array_size(ndr, &r->name);
+                       length_name_1 = ndr_get_array_length(ndr, &r->name);
+                       if (length_name_1 > size_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_name_1, length_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, length_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
                }
                if (r->comment) {
@@ -6047,11 +6224,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo1(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-                       if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
+                       size_comment_1 = ndr_get_array_size(ndr, &r->comment);
+                       length_comment_1 = ndr_get_array_length(ndr, &r->comment);
+                       if (length_comment_1 > size_comment_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_comment_1, length_comment_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_comment_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, length_comment_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
                }
        }
@@ -6095,12 +6274,12 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo2(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->drivername));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->location));
-               NDR_CHECK(ndr_push_unique_ptr(ndr, r->devmode));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->devmode_ptr));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->sepfile));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->printprocessor));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->datatype));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->parameters));
-               NDR_CHECK(ndr_push_unique_ptr(ndr, r->secdesc));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->secdesc_ptr));
                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));
@@ -6153,14 +6332,6 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo2(struct ndr_push *ndr,
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->location, CH_UTF16)));
                        NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->location, ndr_charset_length(r->location, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                }
-               if (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));
-                       }
-               }
                if (r->sepfile) {
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->sepfile, CH_UTF16)));
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
@@ -6185,14 +6356,6 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo2(struct ndr_push *ndr,
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->parameters, CH_UTF16)));
                        NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->parameters, ndr_charset_length(r->parameters, CH_UTF16), sizeof(uint16_t), CH_UTF16));
                }
-               if (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));
-                       }
-               }
        }
        return NDR_ERR_SUCCESS;
 }
@@ -6200,31 +6363,49 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo2(struct ndr_push *ndr,
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetPrinterInfo2 *r)
 {
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        TALLOC_CTX *_mem_save_servername_0;
        uint32_t _ptr_printername;
+       uint32_t size_printername_1 = 0;
+       uint32_t length_printername_1 = 0;
        TALLOC_CTX *_mem_save_printername_0;
        uint32_t _ptr_sharename;
+       uint32_t size_sharename_1 = 0;
+       uint32_t length_sharename_1 = 0;
        TALLOC_CTX *_mem_save_sharename_0;
        uint32_t _ptr_portname;
+       uint32_t size_portname_1 = 0;
+       uint32_t length_portname_1 = 0;
        TALLOC_CTX *_mem_save_portname_0;
        uint32_t _ptr_drivername;
+       uint32_t size_drivername_1 = 0;
+       uint32_t length_drivername_1 = 0;
        TALLOC_CTX *_mem_save_drivername_0;
        uint32_t _ptr_comment;
+       uint32_t size_comment_1 = 0;
+       uint32_t length_comment_1 = 0;
        TALLOC_CTX *_mem_save_comment_0;
        uint32_t _ptr_location;
+       uint32_t size_location_1 = 0;
+       uint32_t length_location_1 = 0;
        TALLOC_CTX *_mem_save_location_0;
-       uint32_t _ptr_devmode;
-       TALLOC_CTX *_mem_save_devmode_0;
        uint32_t _ptr_sepfile;
+       uint32_t size_sepfile_1 = 0;
+       uint32_t length_sepfile_1 = 0;
        TALLOC_CTX *_mem_save_sepfile_0;
        uint32_t _ptr_printprocessor;
+       uint32_t size_printprocessor_1 = 0;
+       uint32_t length_printprocessor_1 = 0;
        TALLOC_CTX *_mem_save_printprocessor_0;
        uint32_t _ptr_datatype;
+       uint32_t size_datatype_1 = 0;
+       uint32_t length_datatype_1 = 0;
        TALLOC_CTX *_mem_save_datatype_0;
        uint32_t _ptr_parameters;
+       uint32_t size_parameters_1 = 0;
+       uint32_t length_parameters_1 = 0;
        TALLOC_CTX *_mem_save_parameters_0;
-       uint32_t _ptr_secdesc;
-       TALLOC_CTX *_mem_save_secdesc_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_servername));
@@ -6269,12 +6450,7 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                } else {
                        r->location = NULL;
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode));
-               if (_ptr_devmode) {
-                       NDR_PULL_ALLOC(ndr, r->devmode);
-               } else {
-                       r->devmode = NULL;
-               }
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->devmode_ptr));
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sepfile));
                if (_ptr_sepfile) {
                        NDR_PULL_ALLOC(ndr, r->sepfile);
@@ -6299,12 +6475,7 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                } else {
                        r->parameters = NULL;
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
-               if (_ptr_secdesc) {
-                       NDR_PULL_ALLOC(ndr, r->secdesc);
-               } else {
-                       r->secdesc = NULL;
-               }
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->secdesc_ptr));
                NDR_CHECK(ndr_pull_spoolss_PrinterAttributes(ndr, NDR_SCALARS, &r->attributes));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority));
                if (r->priority > 99) {
@@ -6323,11 +6494,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->servername));
-                       if (ndr_get_array_length(ndr, &r->servername) > ndr_get_array_size(ndr, &r->servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->servername), ndr_get_array_length(ndr, &r->servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->servername, ndr_get_array_length(ndr, &r->servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
                if (r->printername) {
@@ -6335,11 +6508,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->printername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->printername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->printername));
-                       if (ndr_get_array_length(ndr, &r->printername) > ndr_get_array_size(ndr, &r->printername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->printername), ndr_get_array_length(ndr, &r->printername));
+                       size_printername_1 = ndr_get_array_size(ndr, &r->printername);
+                       length_printername_1 = ndr_get_array_length(ndr, &r->printername);
+                       if (length_printername_1 > size_printername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printername_1, length_printername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->printername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printername, ndr_get_array_length(ndr, &r->printername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printername, length_printername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printername_0, 0);
                }
                if (r->sharename) {
@@ -6347,11 +6522,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->sharename, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->sharename));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->sharename));
-                       if (ndr_get_array_length(ndr, &r->sharename) > ndr_get_array_size(ndr, &r->sharename)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->sharename), ndr_get_array_length(ndr, &r->sharename));
+                       size_sharename_1 = ndr_get_array_size(ndr, &r->sharename);
+                       length_sharename_1 = ndr_get_array_length(ndr, &r->sharename);
+                       if (length_sharename_1 > size_sharename_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_sharename_1, length_sharename_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->sharename), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->sharename, ndr_get_array_length(ndr, &r->sharename), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_sharename_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->sharename, length_sharename_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sharename_0, 0);
                }
                if (r->portname) {
@@ -6359,11 +6536,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->portname, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->portname));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->portname));
-                       if (ndr_get_array_length(ndr, &r->portname) > ndr_get_array_size(ndr, &r->portname)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->portname), ndr_get_array_length(ndr, &r->portname));
+                       size_portname_1 = ndr_get_array_size(ndr, &r->portname);
+                       length_portname_1 = ndr_get_array_length(ndr, &r->portname);
+                       if (length_portname_1 > size_portname_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_portname_1, length_portname_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->portname), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->portname, ndr_get_array_length(ndr, &r->portname), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_portname_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->portname, length_portname_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_portname_0, 0);
                }
                if (r->drivername) {
@@ -6371,11 +6550,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->drivername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->drivername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->drivername));
-                       if (ndr_get_array_length(ndr, &r->drivername) > ndr_get_array_size(ndr, &r->drivername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->drivername), ndr_get_array_length(ndr, &r->drivername));
+                       size_drivername_1 = ndr_get_array_size(ndr, &r->drivername);
+                       length_drivername_1 = ndr_get_array_length(ndr, &r->drivername);
+                       if (length_drivername_1 > size_drivername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_drivername_1, length_drivername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->drivername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->drivername, ndr_get_array_length(ndr, &r->drivername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_drivername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->drivername, length_drivername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_drivername_0, 0);
                }
                if (r->comment) {
@@ -6383,11 +6564,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-                       if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
+                       size_comment_1 = ndr_get_array_size(ndr, &r->comment);
+                       length_comment_1 = ndr_get_array_length(ndr, &r->comment);
+                       if (length_comment_1 > size_comment_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_comment_1, length_comment_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_comment_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, length_comment_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
                }
                if (r->location) {
@@ -6395,34 +6578,27 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->location, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->location));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->location));
-                       if (ndr_get_array_length(ndr, &r->location) > ndr_get_array_size(ndr, &r->location)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->location), ndr_get_array_length(ndr, &r->location));
+                       size_location_1 = ndr_get_array_size(ndr, &r->location);
+                       length_location_1 = ndr_get_array_length(ndr, &r->location);
+                       if (length_location_1 > size_location_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_location_1, length_location_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->location), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->location, ndr_get_array_length(ndr, &r->location), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_location_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->location, length_location_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_location_0, 0);
                }
-               if (r->devmode) {
-                       _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0);
-                       {
-                               struct ndr_pull *_ndr_devmode;
-                               NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_devmode, 0, -1));
-                               NDR_CHECK(ndr_pull_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode));
-                               NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_devmode, 0, -1));
-                       }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0);
-               }
                if (r->sepfile) {
                        _mem_save_sepfile_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->sepfile, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->sepfile));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->sepfile));
-                       if (ndr_get_array_length(ndr, &r->sepfile) > ndr_get_array_size(ndr, &r->sepfile)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->sepfile), ndr_get_array_length(ndr, &r->sepfile));
+                       size_sepfile_1 = ndr_get_array_size(ndr, &r->sepfile);
+                       length_sepfile_1 = ndr_get_array_length(ndr, &r->sepfile);
+                       if (length_sepfile_1 > size_sepfile_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_sepfile_1, length_sepfile_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->sepfile), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->sepfile, ndr_get_array_length(ndr, &r->sepfile), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_sepfile_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->sepfile, length_sepfile_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sepfile_0, 0);
                }
                if (r->printprocessor) {
@@ -6430,11 +6606,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->printprocessor, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->printprocessor));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->printprocessor));
-                       if (ndr_get_array_length(ndr, &r->printprocessor) > ndr_get_array_size(ndr, &r->printprocessor)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->printprocessor), ndr_get_array_length(ndr, &r->printprocessor));
+                       size_printprocessor_1 = ndr_get_array_size(ndr, &r->printprocessor);
+                       length_printprocessor_1 = ndr_get_array_length(ndr, &r->printprocessor);
+                       if (length_printprocessor_1 > size_printprocessor_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printprocessor_1, length_printprocessor_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->printprocessor), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printprocessor, ndr_get_array_length(ndr, &r->printprocessor), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printprocessor_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printprocessor, length_printprocessor_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printprocessor_0, 0);
                }
                if (r->datatype) {
@@ -6442,11 +6620,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->datatype, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->datatype));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->datatype));
-                       if (ndr_get_array_length(ndr, &r->datatype) > ndr_get_array_size(ndr, &r->datatype)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->datatype), ndr_get_array_length(ndr, &r->datatype));
+                       size_datatype_1 = ndr_get_array_size(ndr, &r->datatype);
+                       length_datatype_1 = ndr_get_array_length(ndr, &r->datatype);
+                       if (length_datatype_1 > size_datatype_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_datatype_1, length_datatype_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->datatype), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->datatype, ndr_get_array_length(ndr, &r->datatype), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_datatype_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->datatype, length_datatype_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_datatype_0, 0);
                }
                if (r->parameters) {
@@ -6454,24 +6634,15 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo2(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->parameters, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->parameters));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->parameters));
-                       if (ndr_get_array_length(ndr, &r->parameters) > ndr_get_array_size(ndr, &r->parameters)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->parameters), ndr_get_array_length(ndr, &r->parameters));
+                       size_parameters_1 = ndr_get_array_size(ndr, &r->parameters);
+                       length_parameters_1 = ndr_get_array_length(ndr, &r->parameters);
+                       if (length_parameters_1 > size_parameters_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_parameters_1, length_parameters_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->parameters), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->parameters, ndr_get_array_length(ndr, &r->parameters), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_parameters_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->parameters, length_parameters_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parameters_0, 0);
                }
-               if (r->secdesc) {
-                       _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0);
-                       {
-                               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_subcontext_end(ndr, _ndr_secdesc, 0, -1));
-                       }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
-               }
        }
        return NDR_ERR_SUCCESS;
 }
@@ -6522,12 +6693,7 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterInfo2(struct ndr_print *ndr, const cha
                ndr_print_string(ndr, "location", r->location);
        }
        ndr->depth--;
-       ndr_print_ptr(ndr, "devmode", r->devmode);
-       ndr->depth++;
-       if (r->devmode) {
-               ndr_print_spoolss_DeviceMode(ndr, "devmode", r->devmode);
-       }
-       ndr->depth--;
+       ndr_print_uint32(ndr, "devmode_ptr", r->devmode_ptr);
        ndr_print_ptr(ndr, "sepfile", r->sepfile);
        ndr->depth++;
        if (r->sepfile) {
@@ -6552,12 +6718,7 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterInfo2(struct ndr_print *ndr, const cha
                ndr_print_string(ndr, "parameters", r->parameters);
        }
        ndr->depth--;
-       ndr_print_ptr(ndr, "secdesc", r->secdesc);
-       ndr->depth++;
-       if (r->secdesc) {
-               ndr_print_security_descriptor(ndr, "secdesc", r->secdesc);
-       }
-       ndr->depth--;
+       ndr_print_uint32(ndr, "secdesc_ptr", r->secdesc_ptr);
        ndr_print_spoolss_PrinterAttributes(ndr, "attributes", r->attributes);
        ndr_print_uint32(ndr, "priority", r->priority);
        ndr_print_uint32(ndr, "defaultpriority", r->defaultpriority);
@@ -6627,8 +6788,12 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo4(struct ndr_push *ndr,
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo4(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetPrinterInfo4 *r)
 {
        uint32_t _ptr_printername;
+       uint32_t size_printername_1 = 0;
+       uint32_t length_printername_1 = 0;
        TALLOC_CTX *_mem_save_printername_0;
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        TALLOC_CTX *_mem_save_servername_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -6652,11 +6817,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo4(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->printername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->printername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->printername));
-                       if (ndr_get_array_length(ndr, &r->printername) > ndr_get_array_size(ndr, &r->printername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->printername), ndr_get_array_length(ndr, &r->printername));
+                       size_printername_1 = ndr_get_array_size(ndr, &r->printername);
+                       length_printername_1 = ndr_get_array_length(ndr, &r->printername);
+                       if (length_printername_1 > size_printername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printername_1, length_printername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->printername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printername, ndr_get_array_length(ndr, &r->printername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printername, length_printername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printername_0, 0);
                }
                if (r->servername) {
@@ -6664,11 +6831,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo4(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->servername));
-                       if (ndr_get_array_length(ndr, &r->servername) > ndr_get_array_size(ndr, &r->servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->servername), ndr_get_array_length(ndr, &r->servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->servername, ndr_get_array_length(ndr, &r->servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
        }
@@ -6725,8 +6894,12 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo5(struct ndr_push *ndr,
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo5(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetPrinterInfo5 *r)
 {
        uint32_t _ptr_printername;
+       uint32_t size_printername_1 = 0;
+       uint32_t length_printername_1 = 0;
        TALLOC_CTX *_mem_save_printername_0;
        uint32_t _ptr_portname;
+       uint32_t size_portname_1 = 0;
+       uint32_t length_portname_1 = 0;
        TALLOC_CTX *_mem_save_portname_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -6752,11 +6925,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo5(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->printername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->printername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->printername));
-                       if (ndr_get_array_length(ndr, &r->printername) > ndr_get_array_size(ndr, &r->printername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->printername), ndr_get_array_length(ndr, &r->printername));
+                       size_printername_1 = ndr_get_array_size(ndr, &r->printername);
+                       length_printername_1 = ndr_get_array_length(ndr, &r->printername);
+                       if (length_printername_1 > size_printername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printername_1, length_printername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->printername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printername, ndr_get_array_length(ndr, &r->printername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->printername, length_printername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printername_0, 0);
                }
                if (r->portname) {
@@ -6764,11 +6939,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo5(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->portname, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->portname));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->portname));
-                       if (ndr_get_array_length(ndr, &r->portname) > ndr_get_array_size(ndr, &r->portname)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->portname), ndr_get_array_length(ndr, &r->portname));
+                       size_portname_1 = ndr_get_array_size(ndr, &r->portname);
+                       length_portname_1 = ndr_get_array_length(ndr, &r->portname);
+                       if (length_portname_1 > size_portname_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_portname_1, length_portname_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->portname), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->portname, ndr_get_array_length(ndr, &r->portname), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_portname_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->portname, length_portname_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_portname_0, 0);
                }
        }
@@ -6848,6 +7025,8 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo7(struct ndr_push *ndr,
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo7(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetPrinterInfo7 *r)
 {
        uint32_t _ptr_guid;
+       uint32_t size_guid_1 = 0;
+       uint32_t length_guid_1 = 0;
        TALLOC_CTX *_mem_save_guid_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -6865,11 +7044,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo7(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->guid, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->guid));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->guid));
-                       if (ndr_get_array_length(ndr, &r->guid) > ndr_get_array_size(ndr, &r->guid)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->guid), ndr_get_array_length(ndr, &r->guid));
+                       size_guid_1 = ndr_get_array_size(ndr, &r->guid);
+                       length_guid_1 = ndr_get_array_length(ndr, &r->guid);
+                       if (length_guid_1 > size_guid_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_guid_1, length_guid_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->guid), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->guid, ndr_get_array_length(ndr, &r->guid), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_guid_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->guid, length_guid_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_guid_0, 0);
                }
        }
@@ -6890,6 +7071,66 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterInfo7(struct ndr_print *ndr, const cha
        ndr->depth--;
 }
 
+static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo8(struct ndr_push *ndr, int ndr_flags, const struct spoolss_SetPrinterInfo8 *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 4));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->devmode_ptr));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo8(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetPrinterInfo8 *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 4));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->devmode_ptr));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_SetPrinterInfo8(struct ndr_print *ndr, const char *name, const struct spoolss_SetPrinterInfo8 *r)
+{
+       ndr_print_struct(ndr, name, "spoolss_SetPrinterInfo8");
+       ndr->depth++;
+       ndr_print_uint32(ndr, "devmode_ptr", r->devmode_ptr);
+       ndr->depth--;
+}
+
+static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo9(struct ndr_push *ndr, int ndr_flags, const struct spoolss_SetPrinterInfo9 *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 4));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->devmode_ptr));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo9(struct ndr_pull *ndr, int ndr_flags, struct spoolss_SetPrinterInfo9 *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 4));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->devmode_ptr));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_SetPrinterInfo9(struct ndr_print *ndr, const char *name, const struct spoolss_SetPrinterInfo9 *r)
+{
+       ndr_print_struct(ndr, name, "spoolss_SetPrinterInfo9");
+       ndr->depth++;
+       ndr_print_uint32(ndr, "devmode_ptr", r->devmode_ptr);
+       ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_SetPrinterInfo *r)
 {
        if (ndr_flags & NDR_SCALARS) {
@@ -6994,13 +7235,13 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo(struct ndr_push *ndr, i
 
                        case 8:
                                if (r->info8) {
-                                       NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->info8));
+                                       NDR_CHECK(ndr_push_spoolss_SetPrinterInfo8(ndr, NDR_SCALARS, r->info8));
                                }
                        break;
 
                        case 9:
                                if (r->info9) {
-                                       NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->info9));
+                                       NDR_CHECK(ndr_push_spoolss_SetPrinterInfo9(ndr, NDR_SCALARS, r->info9));
                                }
                        break;
 
@@ -7017,15 +7258,25 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
        int level;
        uint32_t _level;
        TALLOC_CTX *_mem_save_info0_0;
+       uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_info1_0;
+       uint32_t _ptr_info1;
        TALLOC_CTX *_mem_save_info2_0;
+       uint32_t _ptr_info2;
        TALLOC_CTX *_mem_save_info3_0;
+       uint32_t _ptr_info3;
        TALLOC_CTX *_mem_save_info4_0;
+       uint32_t _ptr_info4;
        TALLOC_CTX *_mem_save_info5_0;
+       uint32_t _ptr_info5;
        TALLOC_CTX *_mem_save_info6_0;
+       uint32_t _ptr_info6;
        TALLOC_CTX *_mem_save_info7_0;
+       uint32_t _ptr_info7;
        TALLOC_CTX *_mem_save_info8_0;
+       uint32_t _ptr_info8;
        TALLOC_CTX *_mem_save_info9_0;
+       uint32_t _ptr_info9;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -7034,7 +7285,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                }
                switch (level) {
                        case 0: {
-                               uint32_t _ptr_info0;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
                                if (_ptr_info0) {
                                        NDR_PULL_ALLOC(ndr, r->info0);
@@ -7044,7 +7294,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 1: {
-                               uint32_t _ptr_info1;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
                                if (_ptr_info1) {
                                        NDR_PULL_ALLOC(ndr, r->info1);
@@ -7054,7 +7303,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 2: {
-                               uint32_t _ptr_info2;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
                                if (_ptr_info2) {
                                        NDR_PULL_ALLOC(ndr, r->info2);
@@ -7064,7 +7312,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 3: {
-                               uint32_t _ptr_info3;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info3));
                                if (_ptr_info3) {
                                        NDR_PULL_ALLOC(ndr, r->info3);
@@ -7074,7 +7321,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 4: {
-                               uint32_t _ptr_info4;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info4));
                                if (_ptr_info4) {
                                        NDR_PULL_ALLOC(ndr, r->info4);
@@ -7084,7 +7330,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 5: {
-                               uint32_t _ptr_info5;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info5));
                                if (_ptr_info5) {
                                        NDR_PULL_ALLOC(ndr, r->info5);
@@ -7094,7 +7339,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 6: {
-                               uint32_t _ptr_info6;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info6));
                                if (_ptr_info6) {
                                        NDR_PULL_ALLOC(ndr, r->info6);
@@ -7104,7 +7348,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 7: {
-                               uint32_t _ptr_info7;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info7));
                                if (_ptr_info7) {
                                        NDR_PULL_ALLOC(ndr, r->info7);
@@ -7114,7 +7357,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 8: {
-                               uint32_t _ptr_info8;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info8));
                                if (_ptr_info8) {
                                        NDR_PULL_ALLOC(ndr, r->info8);
@@ -7124,7 +7366,6 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                        break; }
 
                        case 9: {
-                               uint32_t _ptr_info9;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info9));
                                if (_ptr_info9) {
                                        NDR_PULL_ALLOC(ndr, r->info9);
@@ -7216,7 +7457,7 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                                if (r->info8) {
                                        _mem_save_info8_0 = NDR_PULL_GET_MEM_CTX(ndr);
                                        NDR_PULL_SET_MEM_CTX(ndr, r->info8, 0);
-                                       NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->info8));
+                                       NDR_CHECK(ndr_pull_spoolss_SetPrinterInfo8(ndr, NDR_SCALARS, r->info8));
                                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info8_0, 0);
                                }
                        break;
@@ -7225,7 +7466,7 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterInfo(struct ndr_pull *ndr, i
                                if (r->info9) {
                                        _mem_save_info9_0 = NDR_PULL_GET_MEM_CTX(ndr);
                                        NDR_PULL_SET_MEM_CTX(ndr, r->info9, 0);
-                                       NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->info9));
+                                       NDR_CHECK(ndr_pull_spoolss_SetPrinterInfo9(ndr, NDR_SCALARS, r->info9));
                                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info9_0, 0);
                                }
                        break;
@@ -7320,7 +7561,7 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterInfo(struct ndr_print *ndr, const char
                        ndr_print_ptr(ndr, "info8", r->info8);
                        ndr->depth++;
                        if (r->info8) {
-                               ndr_print_spoolss_DeviceModeInfo(ndr, "info8", r->info8);
+                               ndr_print_spoolss_SetPrinterInfo8(ndr, "info8", r->info8);
                        }
                        ndr->depth--;
                break;
@@ -7329,7 +7570,7 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterInfo(struct ndr_print *ndr, const char
                        ndr_print_ptr(ndr, "info9", r->info9);
                        ndr->depth++;
                        if (r->info9) {
-                               ndr_print_spoolss_DeviceModeInfo(ndr, "info9", r->info9);
+                               ndr_print_spoolss_SetPrinterInfo9(ndr, "info9", r->info9);
                        }
                        ndr->depth--;
                break;
@@ -7421,15 +7662,6 @@ _PUBLIC_ void ndr_print_spoolss_StringArray(struct ndr_print *ndr, const char *n
        ndr->depth--;
 }
 
-_PUBLIC_ void ndr_print_spoolss_StringArray2(struct ndr_print *ndr, const char *name, const struct spoolss_StringArray2 *r)
-{
-       ndr_print_struct(ndr, name, "spoolss_StringArray2");
-       ndr->depth++;
-       ndr_print_uint32(ndr, "_ndr_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?(ndr_size_spoolss_StringArray2(r, ndr->iconv_convenience, ndr->flags) - 4) / 2:r->_ndr_size);
-       ndr_print_string_array(ndr, "string", r->string);
-       ndr->depth--;
-}
-
 static enum ndr_err_code ndr_push_spoolss_AddDriverInfo1(struct ndr_push *ndr, int ndr_flags, const struct spoolss_AddDriverInfo1 *r)
 {
        if (ndr_flags & NDR_SCALARS) {
@@ -7450,6 +7682,8 @@ static enum ndr_err_code ndr_push_spoolss_AddDriverInfo1(struct ndr_push *ndr, i
 static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo1(struct ndr_pull *ndr, int ndr_flags, struct spoolss_AddDriverInfo1 *r)
 {
        uint32_t _ptr_driver_name;
+       uint32_t size_driver_name_1 = 0;
+       uint32_t length_driver_name_1 = 0;
        TALLOC_CTX *_mem_save_driver_name_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -7466,11 +7700,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo1(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_name));
-                       if (ndr_get_array_length(ndr, &r->driver_name) > ndr_get_array_size(ndr, &r->driver_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_name), ndr_get_array_length(ndr, &r->driver_name));
+                       size_driver_name_1 = ndr_get_array_size(ndr, &r->driver_name);
+                       length_driver_name_1 = ndr_get_array_length(ndr, &r->driver_name);
+                       if (length_driver_name_1 > size_driver_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_name_1, length_driver_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, length_driver_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
                }
        }
@@ -7566,14 +7802,24 @@ static enum ndr_err_code ndr_push_spoolss_AddDriverInfo2(struct ndr_push *ndr, i
 static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_AddDriverInfo2 *r)
 {
        uint32_t _ptr_driver_name;
+       uint32_t size_driver_name_1 = 0;
+       uint32_t length_driver_name_1 = 0;
        TALLOC_CTX *_mem_save_driver_name_0;
        uint32_t _ptr_architecture;
+       uint32_t size_architecture_1 = 0;
+       uint32_t length_architecture_1 = 0;
        TALLOC_CTX *_mem_save_architecture_0;
        uint32_t _ptr_driver_path;
+       uint32_t size_driver_path_1 = 0;
+       uint32_t length_driver_path_1 = 0;
        TALLOC_CTX *_mem_save_driver_path_0;
        uint32_t _ptr_data_file;
+       uint32_t size_data_file_1 = 0;
+       uint32_t length_data_file_1 = 0;
        TALLOC_CTX *_mem_save_data_file_0;
        uint32_t _ptr_config_file;
+       uint32_t size_config_file_1 = 0;
+       uint32_t length_config_file_1 = 0;
        TALLOC_CTX *_mem_save_config_file_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -7615,11 +7861,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo2(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_name));
-                       if (ndr_get_array_length(ndr, &r->driver_name) > ndr_get_array_size(ndr, &r->driver_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_name), ndr_get_array_length(ndr, &r->driver_name));
+                       size_driver_name_1 = ndr_get_array_size(ndr, &r->driver_name);
+                       length_driver_name_1 = ndr_get_array_length(ndr, &r->driver_name);
+                       if (length_driver_name_1 > size_driver_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_name_1, length_driver_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, length_driver_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
                }
                if (r->architecture) {
@@ -7627,11 +7875,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo2(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->architecture, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->architecture));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->architecture));
-                       if (ndr_get_array_length(ndr, &r->architecture) > ndr_get_array_size(ndr, &r->architecture)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->architecture), ndr_get_array_length(ndr, &r->architecture));
+                       size_architecture_1 = ndr_get_array_size(ndr, &r->architecture);
+                       length_architecture_1 = ndr_get_array_length(ndr, &r->architecture);
+                       if (length_architecture_1 > size_architecture_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_1, length_architecture_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, length_architecture_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_architecture_0, 0);
                }
                if (r->driver_path) {
@@ -7639,11 +7889,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo2(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_path, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_path));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_path));
-                       if (ndr_get_array_length(ndr, &r->driver_path) > ndr_get_array_size(ndr, &r->driver_path)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_path), ndr_get_array_length(ndr, &r->driver_path));
+                       size_driver_path_1 = ndr_get_array_size(ndr, &r->driver_path);
+                       length_driver_path_1 = ndr_get_array_length(ndr, &r->driver_path);
+                       if (length_driver_path_1 > size_driver_path_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_path_1, length_driver_path_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_path_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, length_driver_path_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_path_0, 0);
                }
                if (r->data_file) {
@@ -7651,11 +7903,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo2(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->data_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->data_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->data_file));
-                       if (ndr_get_array_length(ndr, &r->data_file) > ndr_get_array_size(ndr, &r->data_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data_file), ndr_get_array_length(ndr, &r->data_file));
+                       size_data_file_1 = ndr_get_array_size(ndr, &r->data_file);
+                       length_data_file_1 = ndr_get_array_length(ndr, &r->data_file);
+                       if (length_data_file_1 > size_data_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_file_1, length_data_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, length_data_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_file_0, 0);
                }
                if (r->config_file) {
@@ -7663,11 +7917,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo2(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->config_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->config_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->config_file));
-                       if (ndr_get_array_length(ndr, &r->config_file) > ndr_get_array_size(ndr, &r->config_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->config_file), ndr_get_array_length(ndr, &r->config_file));
+                       size_config_file_1 = ndr_get_array_size(ndr, &r->config_file);
+                       length_config_file_1 = ndr_get_array_length(ndr, &r->config_file);
+                       if (length_config_file_1 > size_config_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_config_file_1, length_config_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_config_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, length_config_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_config_file_0, 0);
                }
        }
@@ -7787,20 +8043,36 @@ static enum ndr_err_code ndr_push_spoolss_AddDriverInfo3(struct ndr_push *ndr, i
 static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, int ndr_flags, struct spoolss_AddDriverInfo3 *r)
 {
        uint32_t _ptr_driver_name;
+       uint32_t size_driver_name_1 = 0;
+       uint32_t length_driver_name_1 = 0;
        TALLOC_CTX *_mem_save_driver_name_0;
        uint32_t _ptr_architecture;
+       uint32_t size_architecture_1 = 0;
+       uint32_t length_architecture_1 = 0;
        TALLOC_CTX *_mem_save_architecture_0;
        uint32_t _ptr_driver_path;
+       uint32_t size_driver_path_1 = 0;
+       uint32_t length_driver_path_1 = 0;
        TALLOC_CTX *_mem_save_driver_path_0;
        uint32_t _ptr_data_file;
+       uint32_t size_data_file_1 = 0;
+       uint32_t length_data_file_1 = 0;
        TALLOC_CTX *_mem_save_data_file_0;
        uint32_t _ptr_config_file;
+       uint32_t size_config_file_1 = 0;
+       uint32_t length_config_file_1 = 0;
        TALLOC_CTX *_mem_save_config_file_0;
        uint32_t _ptr_help_file;
+       uint32_t size_help_file_1 = 0;
+       uint32_t length_help_file_1 = 0;
        TALLOC_CTX *_mem_save_help_file_0;
        uint32_t _ptr_monitor_name;
+       uint32_t size_monitor_name_1 = 0;
+       uint32_t length_monitor_name_1 = 0;
        TALLOC_CTX *_mem_save_monitor_name_0;
        uint32_t _ptr_default_datatype;
+       uint32_t size_default_datatype_1 = 0;
+       uint32_t length_default_datatype_1 = 0;
        TALLOC_CTX *_mem_save_default_datatype_0;
        uint32_t _ptr_dependent_files;
        TALLOC_CTX *_mem_save_dependent_files_0;
@@ -7869,11 +8141,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_name));
-                       if (ndr_get_array_length(ndr, &r->driver_name) > ndr_get_array_size(ndr, &r->driver_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_name), ndr_get_array_length(ndr, &r->driver_name));
+                       size_driver_name_1 = ndr_get_array_size(ndr, &r->driver_name);
+                       length_driver_name_1 = ndr_get_array_length(ndr, &r->driver_name);
+                       if (length_driver_name_1 > size_driver_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_name_1, length_driver_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, length_driver_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
                }
                if (r->architecture) {
@@ -7881,11 +8155,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->architecture, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->architecture));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->architecture));
-                       if (ndr_get_array_length(ndr, &r->architecture) > ndr_get_array_size(ndr, &r->architecture)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->architecture), ndr_get_array_length(ndr, &r->architecture));
+                       size_architecture_1 = ndr_get_array_size(ndr, &r->architecture);
+                       length_architecture_1 = ndr_get_array_length(ndr, &r->architecture);
+                       if (length_architecture_1 > size_architecture_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_1, length_architecture_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, length_architecture_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_architecture_0, 0);
                }
                if (r->driver_path) {
@@ -7893,11 +8169,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_path, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_path));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_path));
-                       if (ndr_get_array_length(ndr, &r->driver_path) > ndr_get_array_size(ndr, &r->driver_path)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_path), ndr_get_array_length(ndr, &r->driver_path));
+                       size_driver_path_1 = ndr_get_array_size(ndr, &r->driver_path);
+                       length_driver_path_1 = ndr_get_array_length(ndr, &r->driver_path);
+                       if (length_driver_path_1 > size_driver_path_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_path_1, length_driver_path_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_path_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, length_driver_path_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_path_0, 0);
                }
                if (r->data_file) {
@@ -7905,11 +8183,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->data_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->data_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->data_file));
-                       if (ndr_get_array_length(ndr, &r->data_file) > ndr_get_array_size(ndr, &r->data_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data_file), ndr_get_array_length(ndr, &r->data_file));
+                       size_data_file_1 = ndr_get_array_size(ndr, &r->data_file);
+                       length_data_file_1 = ndr_get_array_length(ndr, &r->data_file);
+                       if (length_data_file_1 > size_data_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_file_1, length_data_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, length_data_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_file_0, 0);
                }
                if (r->config_file) {
@@ -7917,11 +8197,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->config_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->config_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->config_file));
-                       if (ndr_get_array_length(ndr, &r->config_file) > ndr_get_array_size(ndr, &r->config_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->config_file), ndr_get_array_length(ndr, &r->config_file));
+                       size_config_file_1 = ndr_get_array_size(ndr, &r->config_file);
+                       length_config_file_1 = ndr_get_array_length(ndr, &r->config_file);
+                       if (length_config_file_1 > size_config_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_config_file_1, length_config_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_config_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, length_config_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_config_file_0, 0);
                }
                if (r->help_file) {
@@ -7929,11 +8211,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->help_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->help_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->help_file));
-                       if (ndr_get_array_length(ndr, &r->help_file) > ndr_get_array_size(ndr, &r->help_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->help_file), ndr_get_array_length(ndr, &r->help_file));
+                       size_help_file_1 = ndr_get_array_size(ndr, &r->help_file);
+                       length_help_file_1 = ndr_get_array_length(ndr, &r->help_file);
+                       if (length_help_file_1 > size_help_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_help_file_1, length_help_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->help_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->help_file, ndr_get_array_length(ndr, &r->help_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_help_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->help_file, length_help_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_help_file_0, 0);
                }
                if (r->monitor_name) {
@@ -7941,11 +8225,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->monitor_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->monitor_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->monitor_name));
-                       if (ndr_get_array_length(ndr, &r->monitor_name) > ndr_get_array_size(ndr, &r->monitor_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->monitor_name), ndr_get_array_length(ndr, &r->monitor_name));
+                       size_monitor_name_1 = ndr_get_array_size(ndr, &r->monitor_name);
+                       length_monitor_name_1 = ndr_get_array_length(ndr, &r->monitor_name);
+                       if (length_monitor_name_1 > size_monitor_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_monitor_name_1, length_monitor_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->monitor_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->monitor_name, ndr_get_array_length(ndr, &r->monitor_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_monitor_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->monitor_name, length_monitor_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_monitor_name_0, 0);
                }
                if (r->default_datatype) {
@@ -7953,11 +8239,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo3(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->default_datatype, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->default_datatype));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->default_datatype));
-                       if (ndr_get_array_length(ndr, &r->default_datatype) > ndr_get_array_size(ndr, &r->default_datatype)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->default_datatype), ndr_get_array_length(ndr, &r->default_datatype));
+                       size_default_datatype_1 = ndr_get_array_size(ndr, &r->default_datatype);
+                       length_default_datatype_1 = ndr_get_array_length(ndr, &r->default_datatype);
+                       if (length_default_datatype_1 > size_default_datatype_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_default_datatype_1, length_default_datatype_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->default_datatype), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->default_datatype, ndr_get_array_length(ndr, &r->default_datatype), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_default_datatype_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->default_datatype, length_default_datatype_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_default_datatype_0, 0);
                }
                if (r->dependent_files) {
@@ -8113,20 +8401,36 @@ static enum ndr_err_code ndr_push_spoolss_AddDriverInfo4(struct ndr_push *ndr, i
 static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, int ndr_flags, struct spoolss_AddDriverInfo4 *r)
 {
        uint32_t _ptr_driver_name;
+       uint32_t size_driver_name_1 = 0;
+       uint32_t length_driver_name_1 = 0;
        TALLOC_CTX *_mem_save_driver_name_0;
        uint32_t _ptr_architecture;
+       uint32_t size_architecture_1 = 0;
+       uint32_t length_architecture_1 = 0;
        TALLOC_CTX *_mem_save_architecture_0;
        uint32_t _ptr_driver_path;
+       uint32_t size_driver_path_1 = 0;
+       uint32_t length_driver_path_1 = 0;
        TALLOC_CTX *_mem_save_driver_path_0;
        uint32_t _ptr_data_file;
+       uint32_t size_data_file_1 = 0;
+       uint32_t length_data_file_1 = 0;
        TALLOC_CTX *_mem_save_data_file_0;
        uint32_t _ptr_config_file;
+       uint32_t size_config_file_1 = 0;
+       uint32_t length_config_file_1 = 0;
        TALLOC_CTX *_mem_save_config_file_0;
        uint32_t _ptr_help_file;
+       uint32_t size_help_file_1 = 0;
+       uint32_t length_help_file_1 = 0;
        TALLOC_CTX *_mem_save_help_file_0;
        uint32_t _ptr_monitor_name;
+       uint32_t size_monitor_name_1 = 0;
+       uint32_t length_monitor_name_1 = 0;
        TALLOC_CTX *_mem_save_monitor_name_0;
        uint32_t _ptr_default_datatype;
+       uint32_t size_default_datatype_1 = 0;
+       uint32_t length_default_datatype_1 = 0;
        TALLOC_CTX *_mem_save_default_datatype_0;
        uint32_t _ptr_dependent_files;
        TALLOC_CTX *_mem_save_dependent_files_0;
@@ -8204,11 +8508,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_name));
-                       if (ndr_get_array_length(ndr, &r->driver_name) > ndr_get_array_size(ndr, &r->driver_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_name), ndr_get_array_length(ndr, &r->driver_name));
+                       size_driver_name_1 = ndr_get_array_size(ndr, &r->driver_name);
+                       length_driver_name_1 = ndr_get_array_length(ndr, &r->driver_name);
+                       if (length_driver_name_1 > size_driver_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_name_1, length_driver_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, length_driver_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
                }
                if (r->architecture) {
@@ -8216,11 +8522,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->architecture, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->architecture));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->architecture));
-                       if (ndr_get_array_length(ndr, &r->architecture) > ndr_get_array_size(ndr, &r->architecture)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->architecture), ndr_get_array_length(ndr, &r->architecture));
+                       size_architecture_1 = ndr_get_array_size(ndr, &r->architecture);
+                       length_architecture_1 = ndr_get_array_length(ndr, &r->architecture);
+                       if (length_architecture_1 > size_architecture_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_1, length_architecture_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, length_architecture_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_architecture_0, 0);
                }
                if (r->driver_path) {
@@ -8228,11 +8536,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_path, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_path));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_path));
-                       if (ndr_get_array_length(ndr, &r->driver_path) > ndr_get_array_size(ndr, &r->driver_path)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_path), ndr_get_array_length(ndr, &r->driver_path));
+                       size_driver_path_1 = ndr_get_array_size(ndr, &r->driver_path);
+                       length_driver_path_1 = ndr_get_array_length(ndr, &r->driver_path);
+                       if (length_driver_path_1 > size_driver_path_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_path_1, length_driver_path_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_path_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, length_driver_path_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_path_0, 0);
                }
                if (r->data_file) {
@@ -8240,11 +8550,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->data_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->data_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->data_file));
-                       if (ndr_get_array_length(ndr, &r->data_file) > ndr_get_array_size(ndr, &r->data_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data_file), ndr_get_array_length(ndr, &r->data_file));
+                       size_data_file_1 = ndr_get_array_size(ndr, &r->data_file);
+                       length_data_file_1 = ndr_get_array_length(ndr, &r->data_file);
+                       if (length_data_file_1 > size_data_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_file_1, length_data_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, length_data_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_file_0, 0);
                }
                if (r->config_file) {
@@ -8252,11 +8564,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->config_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->config_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->config_file));
-                       if (ndr_get_array_length(ndr, &r->config_file) > ndr_get_array_size(ndr, &r->config_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->config_file), ndr_get_array_length(ndr, &r->config_file));
+                       size_config_file_1 = ndr_get_array_size(ndr, &r->config_file);
+                       length_config_file_1 = ndr_get_array_length(ndr, &r->config_file);
+                       if (length_config_file_1 > size_config_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_config_file_1, length_config_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_config_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, length_config_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_config_file_0, 0);
                }
                if (r->help_file) {
@@ -8264,11 +8578,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->help_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->help_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->help_file));
-                       if (ndr_get_array_length(ndr, &r->help_file) > ndr_get_array_size(ndr, &r->help_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->help_file), ndr_get_array_length(ndr, &r->help_file));
+                       size_help_file_1 = ndr_get_array_size(ndr, &r->help_file);
+                       length_help_file_1 = ndr_get_array_length(ndr, &r->help_file);
+                       if (length_help_file_1 > size_help_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_help_file_1, length_help_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->help_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->help_file, ndr_get_array_length(ndr, &r->help_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_help_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->help_file, length_help_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_help_file_0, 0);
                }
                if (r->monitor_name) {
@@ -8276,11 +8592,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->monitor_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->monitor_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->monitor_name));
-                       if (ndr_get_array_length(ndr, &r->monitor_name) > ndr_get_array_size(ndr, &r->monitor_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->monitor_name), ndr_get_array_length(ndr, &r->monitor_name));
+                       size_monitor_name_1 = ndr_get_array_size(ndr, &r->monitor_name);
+                       length_monitor_name_1 = ndr_get_array_length(ndr, &r->monitor_name);
+                       if (length_monitor_name_1 > size_monitor_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_monitor_name_1, length_monitor_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->monitor_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->monitor_name, ndr_get_array_length(ndr, &r->monitor_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_monitor_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->monitor_name, length_monitor_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_monitor_name_0, 0);
                }
                if (r->default_datatype) {
@@ -8288,11 +8606,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo4(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->default_datatype, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->default_datatype));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->default_datatype));
-                       if (ndr_get_array_length(ndr, &r->default_datatype) > ndr_get_array_size(ndr, &r->default_datatype)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->default_datatype), ndr_get_array_length(ndr, &r->default_datatype));
+                       size_default_datatype_1 = ndr_get_array_size(ndr, &r->default_datatype);
+                       length_default_datatype_1 = ndr_get_array_length(ndr, &r->default_datatype);
+                       if (length_default_datatype_1 > size_default_datatype_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_default_datatype_1, length_default_datatype_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->default_datatype), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->default_datatype, ndr_get_array_length(ndr, &r->default_datatype), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_default_datatype_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->default_datatype, length_default_datatype_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_default_datatype_0, 0);
                }
                if (r->dependent_files) {
@@ -8513,32 +8833,56 @@ static enum ndr_err_code ndr_push_spoolss_AddDriverInfo6(struct ndr_push *ndr, i
 static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, int ndr_flags, struct spoolss_AddDriverInfo6 *r)
 {
        uint32_t _ptr_driver_name;
+       uint32_t size_driver_name_1 = 0;
+       uint32_t length_driver_name_1 = 0;
        TALLOC_CTX *_mem_save_driver_name_0;
        uint32_t _ptr_architecture;
+       uint32_t size_architecture_1 = 0;
+       uint32_t length_architecture_1 = 0;
        TALLOC_CTX *_mem_save_architecture_0;
        uint32_t _ptr_driver_path;
+       uint32_t size_driver_path_1 = 0;
+       uint32_t length_driver_path_1 = 0;
        TALLOC_CTX *_mem_save_driver_path_0;
        uint32_t _ptr_data_file;
+       uint32_t size_data_file_1 = 0;
+       uint32_t length_data_file_1 = 0;
        TALLOC_CTX *_mem_save_data_file_0;
        uint32_t _ptr_config_file;
+       uint32_t size_config_file_1 = 0;
+       uint32_t length_config_file_1 = 0;
        TALLOC_CTX *_mem_save_config_file_0;
        uint32_t _ptr_help_file;
+       uint32_t size_help_file_1 = 0;
+       uint32_t length_help_file_1 = 0;
        TALLOC_CTX *_mem_save_help_file_0;
        uint32_t _ptr_monitor_name;
+       uint32_t size_monitor_name_1 = 0;
+       uint32_t length_monitor_name_1 = 0;
        TALLOC_CTX *_mem_save_monitor_name_0;
        uint32_t _ptr_default_datatype;
+       uint32_t size_default_datatype_1 = 0;
+       uint32_t length_default_datatype_1 = 0;
        TALLOC_CTX *_mem_save_default_datatype_0;
        uint32_t _ptr_dependent_files;
        TALLOC_CTX *_mem_save_dependent_files_0;
        uint32_t _ptr_previous_names;
        TALLOC_CTX *_mem_save_previous_names_0;
        uint32_t _ptr_manufacturer_name;
+       uint32_t size_manufacturer_name_1 = 0;
+       uint32_t length_manufacturer_name_1 = 0;
        TALLOC_CTX *_mem_save_manufacturer_name_0;
        uint32_t _ptr_manufacturer_url;
+       uint32_t size_manufacturer_url_1 = 0;
+       uint32_t length_manufacturer_url_1 = 0;
        TALLOC_CTX *_mem_save_manufacturer_url_0;
        uint32_t _ptr_hardware_id;
+       uint32_t size_hardware_id_1 = 0;
+       uint32_t length_hardware_id_1 = 0;
        TALLOC_CTX *_mem_save_hardware_id_0;
        uint32_t _ptr_provider;
+       uint32_t size_provider_1 = 0;
+       uint32_t length_provider_1 = 0;
        TALLOC_CTX *_mem_save_provider_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 8));
@@ -8638,11 +8982,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_name));
-                       if (ndr_get_array_length(ndr, &r->driver_name) > ndr_get_array_size(ndr, &r->driver_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_name), ndr_get_array_length(ndr, &r->driver_name));
+                       size_driver_name_1 = ndr_get_array_size(ndr, &r->driver_name);
+                       length_driver_name_1 = ndr_get_array_length(ndr, &r->driver_name);
+                       if (length_driver_name_1 > size_driver_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_name_1, length_driver_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, length_driver_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
                }
                if (r->architecture) {
@@ -8650,11 +8996,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->architecture, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->architecture));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->architecture));
-                       if (ndr_get_array_length(ndr, &r->architecture) > ndr_get_array_size(ndr, &r->architecture)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->architecture), ndr_get_array_length(ndr, &r->architecture));
+                       size_architecture_1 = ndr_get_array_size(ndr, &r->architecture);
+                       length_architecture_1 = ndr_get_array_length(ndr, &r->architecture);
+                       if (length_architecture_1 > size_architecture_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_1, length_architecture_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, length_architecture_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_architecture_0, 0);
                }
                if (r->driver_path) {
@@ -8662,11 +9010,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_path, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_path));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_path));
-                       if (ndr_get_array_length(ndr, &r->driver_path) > ndr_get_array_size(ndr, &r->driver_path)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_path), ndr_get_array_length(ndr, &r->driver_path));
+                       size_driver_path_1 = ndr_get_array_size(ndr, &r->driver_path);
+                       length_driver_path_1 = ndr_get_array_length(ndr, &r->driver_path);
+                       if (length_driver_path_1 > size_driver_path_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_path_1, length_driver_path_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_path_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, length_driver_path_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_path_0, 0);
                }
                if (r->data_file) {
@@ -8674,11 +9024,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->data_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->data_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->data_file));
-                       if (ndr_get_array_length(ndr, &r->data_file) > ndr_get_array_size(ndr, &r->data_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data_file), ndr_get_array_length(ndr, &r->data_file));
+                       size_data_file_1 = ndr_get_array_size(ndr, &r->data_file);
+                       length_data_file_1 = ndr_get_array_length(ndr, &r->data_file);
+                       if (length_data_file_1 > size_data_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_file_1, length_data_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, length_data_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_file_0, 0);
                }
                if (r->config_file) {
@@ -8686,11 +9038,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->config_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->config_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->config_file));
-                       if (ndr_get_array_length(ndr, &r->config_file) > ndr_get_array_size(ndr, &r->config_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->config_file), ndr_get_array_length(ndr, &r->config_file));
+                       size_config_file_1 = ndr_get_array_size(ndr, &r->config_file);
+                       length_config_file_1 = ndr_get_array_length(ndr, &r->config_file);
+                       if (length_config_file_1 > size_config_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_config_file_1, length_config_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_config_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, length_config_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_config_file_0, 0);
                }
                if (r->help_file) {
@@ -8698,11 +9052,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->help_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->help_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->help_file));
-                       if (ndr_get_array_length(ndr, &r->help_file) > ndr_get_array_size(ndr, &r->help_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->help_file), ndr_get_array_length(ndr, &r->help_file));
+                       size_help_file_1 = ndr_get_array_size(ndr, &r->help_file);
+                       length_help_file_1 = ndr_get_array_length(ndr, &r->help_file);
+                       if (length_help_file_1 > size_help_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_help_file_1, length_help_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->help_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->help_file, ndr_get_array_length(ndr, &r->help_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_help_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->help_file, length_help_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_help_file_0, 0);
                }
                if (r->monitor_name) {
@@ -8710,11 +9066,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->monitor_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->monitor_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->monitor_name));
-                       if (ndr_get_array_length(ndr, &r->monitor_name) > ndr_get_array_size(ndr, &r->monitor_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->monitor_name), ndr_get_array_length(ndr, &r->monitor_name));
+                       size_monitor_name_1 = ndr_get_array_size(ndr, &r->monitor_name);
+                       length_monitor_name_1 = ndr_get_array_length(ndr, &r->monitor_name);
+                       if (length_monitor_name_1 > size_monitor_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_monitor_name_1, length_monitor_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->monitor_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->monitor_name, ndr_get_array_length(ndr, &r->monitor_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_monitor_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->monitor_name, length_monitor_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_monitor_name_0, 0);
                }
                if (r->default_datatype) {
@@ -8722,11 +9080,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->default_datatype, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->default_datatype));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->default_datatype));
-                       if (ndr_get_array_length(ndr, &r->default_datatype) > ndr_get_array_size(ndr, &r->default_datatype)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->default_datatype), ndr_get_array_length(ndr, &r->default_datatype));
+                       size_default_datatype_1 = ndr_get_array_size(ndr, &r->default_datatype);
+                       length_default_datatype_1 = ndr_get_array_length(ndr, &r->default_datatype);
+                       if (length_default_datatype_1 > size_default_datatype_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_default_datatype_1, length_default_datatype_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->default_datatype), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->default_datatype, ndr_get_array_length(ndr, &r->default_datatype), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_default_datatype_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->default_datatype, length_default_datatype_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_default_datatype_0, 0);
                }
                if (r->dependent_files) {
@@ -8746,11 +9106,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->manufacturer_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->manufacturer_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->manufacturer_name));
-                       if (ndr_get_array_length(ndr, &r->manufacturer_name) > ndr_get_array_size(ndr, &r->manufacturer_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->manufacturer_name), ndr_get_array_length(ndr, &r->manufacturer_name));
+                       size_manufacturer_name_1 = ndr_get_array_size(ndr, &r->manufacturer_name);
+                       length_manufacturer_name_1 = ndr_get_array_length(ndr, &r->manufacturer_name);
+                       if (length_manufacturer_name_1 > size_manufacturer_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_manufacturer_name_1, length_manufacturer_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->manufacturer_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->manufacturer_name, ndr_get_array_length(ndr, &r->manufacturer_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_manufacturer_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->manufacturer_name, length_manufacturer_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_manufacturer_name_0, 0);
                }
                if (r->manufacturer_url) {
@@ -8758,11 +9120,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->manufacturer_url, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->manufacturer_url));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->manufacturer_url));
-                       if (ndr_get_array_length(ndr, &r->manufacturer_url) > ndr_get_array_size(ndr, &r->manufacturer_url)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->manufacturer_url), ndr_get_array_length(ndr, &r->manufacturer_url));
+                       size_manufacturer_url_1 = ndr_get_array_size(ndr, &r->manufacturer_url);
+                       length_manufacturer_url_1 = ndr_get_array_length(ndr, &r->manufacturer_url);
+                       if (length_manufacturer_url_1 > size_manufacturer_url_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_manufacturer_url_1, length_manufacturer_url_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->manufacturer_url), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->manufacturer_url, ndr_get_array_length(ndr, &r->manufacturer_url), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_manufacturer_url_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->manufacturer_url, length_manufacturer_url_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_manufacturer_url_0, 0);
                }
                if (r->hardware_id) {
@@ -8770,11 +9134,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->hardware_id, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->hardware_id));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->hardware_id));
-                       if (ndr_get_array_length(ndr, &r->hardware_id) > ndr_get_array_size(ndr, &r->hardware_id)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->hardware_id), ndr_get_array_length(ndr, &r->hardware_id));
+                       size_hardware_id_1 = ndr_get_array_size(ndr, &r->hardware_id);
+                       length_hardware_id_1 = ndr_get_array_length(ndr, &r->hardware_id);
+                       if (length_hardware_id_1 > size_hardware_id_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_hardware_id_1, length_hardware_id_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->hardware_id), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hardware_id, ndr_get_array_length(ndr, &r->hardware_id), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_hardware_id_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hardware_id, length_hardware_id_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hardware_id_0, 0);
                }
                if (r->provider) {
@@ -8782,11 +9148,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo6(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->provider, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->provider));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->provider));
-                       if (ndr_get_array_length(ndr, &r->provider) > ndr_get_array_size(ndr, &r->provider)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->provider), ndr_get_array_length(ndr, &r->provider));
+                       size_provider_1 = ndr_get_array_size(ndr, &r->provider);
+                       length_provider_1 = ndr_get_array_length(ndr, &r->provider);
+                       if (length_provider_1 > size_provider_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_provider_1, length_provider_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->provider), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->provider, ndr_get_array_length(ndr, &r->provider), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_provider_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->provider, length_provider_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_provider_0, 0);
                }
        }
@@ -9033,40 +9401,70 @@ static enum ndr_err_code ndr_push_spoolss_AddDriverInfo8(struct ndr_push *ndr, i
 static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, int ndr_flags, struct spoolss_AddDriverInfo8 *r)
 {
        uint32_t _ptr_driver_name;
+       uint32_t size_driver_name_1 = 0;
+       uint32_t length_driver_name_1 = 0;
        TALLOC_CTX *_mem_save_driver_name_0;
        uint32_t _ptr_architecture;
+       uint32_t size_architecture_1 = 0;
+       uint32_t length_architecture_1 = 0;
        TALLOC_CTX *_mem_save_architecture_0;
        uint32_t _ptr_driver_path;
+       uint32_t size_driver_path_1 = 0;
+       uint32_t length_driver_path_1 = 0;
        TALLOC_CTX *_mem_save_driver_path_0;
        uint32_t _ptr_data_file;
+       uint32_t size_data_file_1 = 0;
+       uint32_t length_data_file_1 = 0;
        TALLOC_CTX *_mem_save_data_file_0;
        uint32_t _ptr_config_file;
+       uint32_t size_config_file_1 = 0;
+       uint32_t length_config_file_1 = 0;
        TALLOC_CTX *_mem_save_config_file_0;
        uint32_t _ptr_help_file;
+       uint32_t size_help_file_1 = 0;
+       uint32_t length_help_file_1 = 0;
        TALLOC_CTX *_mem_save_help_file_0;
        uint32_t _ptr_monitor_name;
+       uint32_t size_monitor_name_1 = 0;
+       uint32_t length_monitor_name_1 = 0;
        TALLOC_CTX *_mem_save_monitor_name_0;
        uint32_t _ptr_default_datatype;
+       uint32_t size_default_datatype_1 = 0;
+       uint32_t length_default_datatype_1 = 0;
        TALLOC_CTX *_mem_save_default_datatype_0;
        uint32_t _ptr_dependent_files;
        TALLOC_CTX *_mem_save_dependent_files_0;
        uint32_t _ptr_previous_names;
        TALLOC_CTX *_mem_save_previous_names_0;
        uint32_t _ptr_manufacturer_name;
+       uint32_t size_manufacturer_name_1 = 0;
+       uint32_t length_manufacturer_name_1 = 0;
        TALLOC_CTX *_mem_save_manufacturer_name_0;
        uint32_t _ptr_manufacturer_url;
+       uint32_t size_manufacturer_url_1 = 0;
+       uint32_t length_manufacturer_url_1 = 0;
        TALLOC_CTX *_mem_save_manufacturer_url_0;
        uint32_t _ptr_hardware_id;
+       uint32_t size_hardware_id_1 = 0;
+       uint32_t length_hardware_id_1 = 0;
        TALLOC_CTX *_mem_save_hardware_id_0;
        uint32_t _ptr_provider;
+       uint32_t size_provider_1 = 0;
+       uint32_t length_provider_1 = 0;
        TALLOC_CTX *_mem_save_provider_0;
        uint32_t _ptr_print_processor;
+       uint32_t size_print_processor_1 = 0;
+       uint32_t length_print_processor_1 = 0;
        TALLOC_CTX *_mem_save_print_processor_0;
        uint32_t _ptr_vendor_setup;
+       uint32_t size_vendor_setup_1 = 0;
+       uint32_t length_vendor_setup_1 = 0;
        TALLOC_CTX *_mem_save_vendor_setup_0;
        uint32_t _ptr_color_profiles;
        TALLOC_CTX *_mem_save_color_profiles_0;
        uint32_t _ptr_inf_path;
+       uint32_t size_inf_path_1 = 0;
+       uint32_t length_inf_path_1 = 0;
        TALLOC_CTX *_mem_save_inf_path_0;
        uint32_t _ptr_core_driver_dependencies;
        TALLOC_CTX *_mem_save_core_driver_dependencies_0;
@@ -9203,11 +9601,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_name));
-                       if (ndr_get_array_length(ndr, &r->driver_name) > ndr_get_array_size(ndr, &r->driver_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_name), ndr_get_array_length(ndr, &r->driver_name));
+                       size_driver_name_1 = ndr_get_array_size(ndr, &r->driver_name);
+                       length_driver_name_1 = ndr_get_array_length(ndr, &r->driver_name);
+                       if (length_driver_name_1 > size_driver_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_name_1, length_driver_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, ndr_get_array_length(ndr, &r->driver_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_name, length_driver_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_name_0, 0);
                }
                if (r->architecture) {
@@ -9215,11 +9615,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->architecture, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->architecture));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->architecture));
-                       if (ndr_get_array_length(ndr, &r->architecture) > ndr_get_array_size(ndr, &r->architecture)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->architecture), ndr_get_array_length(ndr, &r->architecture));
+                       size_architecture_1 = ndr_get_array_size(ndr, &r->architecture);
+                       length_architecture_1 = ndr_get_array_length(ndr, &r->architecture);
+                       if (length_architecture_1 > size_architecture_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_1, length_architecture_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, ndr_get_array_length(ndr, &r->architecture), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->architecture, length_architecture_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_architecture_0, 0);
                }
                if (r->driver_path) {
@@ -9227,11 +9629,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->driver_path, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->driver_path));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->driver_path));
-                       if (ndr_get_array_length(ndr, &r->driver_path) > ndr_get_array_size(ndr, &r->driver_path)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->driver_path), ndr_get_array_length(ndr, &r->driver_path));
+                       size_driver_path_1 = ndr_get_array_size(ndr, &r->driver_path);
+                       length_driver_path_1 = ndr_get_array_length(ndr, &r->driver_path);
+                       if (length_driver_path_1 > size_driver_path_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_path_1, length_driver_path_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, ndr_get_array_length(ndr, &r->driver_path), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_path_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->driver_path, length_driver_path_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_driver_path_0, 0);
                }
                if (r->data_file) {
@@ -9239,11 +9643,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->data_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->data_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->data_file));
-                       if (ndr_get_array_length(ndr, &r->data_file) > ndr_get_array_size(ndr, &r->data_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data_file), ndr_get_array_length(ndr, &r->data_file));
+                       size_data_file_1 = ndr_get_array_size(ndr, &r->data_file);
+                       length_data_file_1 = ndr_get_array_length(ndr, &r->data_file);
+                       if (length_data_file_1 > size_data_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_file_1, length_data_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, ndr_get_array_length(ndr, &r->data_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->data_file, length_data_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_file_0, 0);
                }
                if (r->config_file) {
@@ -9251,11 +9657,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->config_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->config_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->config_file));
-                       if (ndr_get_array_length(ndr, &r->config_file) > ndr_get_array_size(ndr, &r->config_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->config_file), ndr_get_array_length(ndr, &r->config_file));
+                       size_config_file_1 = ndr_get_array_size(ndr, &r->config_file);
+                       length_config_file_1 = ndr_get_array_length(ndr, &r->config_file);
+                       if (length_config_file_1 > size_config_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_config_file_1, length_config_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, ndr_get_array_length(ndr, &r->config_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_config_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->config_file, length_config_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_config_file_0, 0);
                }
                if (r->help_file) {
@@ -9263,11 +9671,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->help_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->help_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->help_file));
-                       if (ndr_get_array_length(ndr, &r->help_file) > ndr_get_array_size(ndr, &r->help_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->help_file), ndr_get_array_length(ndr, &r->help_file));
+                       size_help_file_1 = ndr_get_array_size(ndr, &r->help_file);
+                       length_help_file_1 = ndr_get_array_length(ndr, &r->help_file);
+                       if (length_help_file_1 > size_help_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_help_file_1, length_help_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->help_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->help_file, ndr_get_array_length(ndr, &r->help_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_help_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->help_file, length_help_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_help_file_0, 0);
                }
                if (r->monitor_name) {
@@ -9275,11 +9685,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->monitor_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->monitor_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->monitor_name));
-                       if (ndr_get_array_length(ndr, &r->monitor_name) > ndr_get_array_size(ndr, &r->monitor_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->monitor_name), ndr_get_array_length(ndr, &r->monitor_name));
+                       size_monitor_name_1 = ndr_get_array_size(ndr, &r->monitor_name);
+                       length_monitor_name_1 = ndr_get_array_length(ndr, &r->monitor_name);
+                       if (length_monitor_name_1 > size_monitor_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_monitor_name_1, length_monitor_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->monitor_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->monitor_name, ndr_get_array_length(ndr, &r->monitor_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_monitor_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->monitor_name, length_monitor_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_monitor_name_0, 0);
                }
                if (r->default_datatype) {
@@ -9287,11 +9699,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->default_datatype, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->default_datatype));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->default_datatype));
-                       if (ndr_get_array_length(ndr, &r->default_datatype) > ndr_get_array_size(ndr, &r->default_datatype)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->default_datatype), ndr_get_array_length(ndr, &r->default_datatype));
+                       size_default_datatype_1 = ndr_get_array_size(ndr, &r->default_datatype);
+                       length_default_datatype_1 = ndr_get_array_length(ndr, &r->default_datatype);
+                       if (length_default_datatype_1 > size_default_datatype_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_default_datatype_1, length_default_datatype_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->default_datatype), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->default_datatype, ndr_get_array_length(ndr, &r->default_datatype), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_default_datatype_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->default_datatype, length_default_datatype_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_default_datatype_0, 0);
                }
                if (r->dependent_files) {
@@ -9311,11 +9725,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->manufacturer_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->manufacturer_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->manufacturer_name));
-                       if (ndr_get_array_length(ndr, &r->manufacturer_name) > ndr_get_array_size(ndr, &r->manufacturer_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->manufacturer_name), ndr_get_array_length(ndr, &r->manufacturer_name));
+                       size_manufacturer_name_1 = ndr_get_array_size(ndr, &r->manufacturer_name);
+                       length_manufacturer_name_1 = ndr_get_array_length(ndr, &r->manufacturer_name);
+                       if (length_manufacturer_name_1 > size_manufacturer_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_manufacturer_name_1, length_manufacturer_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->manufacturer_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->manufacturer_name, ndr_get_array_length(ndr, &r->manufacturer_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_manufacturer_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->manufacturer_name, length_manufacturer_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_manufacturer_name_0, 0);
                }
                if (r->manufacturer_url) {
@@ -9323,11 +9739,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->manufacturer_url, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->manufacturer_url));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->manufacturer_url));
-                       if (ndr_get_array_length(ndr, &r->manufacturer_url) > ndr_get_array_size(ndr, &r->manufacturer_url)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->manufacturer_url), ndr_get_array_length(ndr, &r->manufacturer_url));
+                       size_manufacturer_url_1 = ndr_get_array_size(ndr, &r->manufacturer_url);
+                       length_manufacturer_url_1 = ndr_get_array_length(ndr, &r->manufacturer_url);
+                       if (length_manufacturer_url_1 > size_manufacturer_url_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_manufacturer_url_1, length_manufacturer_url_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->manufacturer_url), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->manufacturer_url, ndr_get_array_length(ndr, &r->manufacturer_url), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_manufacturer_url_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->manufacturer_url, length_manufacturer_url_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_manufacturer_url_0, 0);
                }
                if (r->hardware_id) {
@@ -9335,11 +9753,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->hardware_id, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->hardware_id));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->hardware_id));
-                       if (ndr_get_array_length(ndr, &r->hardware_id) > ndr_get_array_size(ndr, &r->hardware_id)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->hardware_id), ndr_get_array_length(ndr, &r->hardware_id));
+                       size_hardware_id_1 = ndr_get_array_size(ndr, &r->hardware_id);
+                       length_hardware_id_1 = ndr_get_array_length(ndr, &r->hardware_id);
+                       if (length_hardware_id_1 > size_hardware_id_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_hardware_id_1, length_hardware_id_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->hardware_id), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hardware_id, ndr_get_array_length(ndr, &r->hardware_id), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_hardware_id_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hardware_id, length_hardware_id_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hardware_id_0, 0);
                }
                if (r->provider) {
@@ -9347,11 +9767,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->provider, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->provider));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->provider));
-                       if (ndr_get_array_length(ndr, &r->provider) > ndr_get_array_size(ndr, &r->provider)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->provider), ndr_get_array_length(ndr, &r->provider));
+                       size_provider_1 = ndr_get_array_size(ndr, &r->provider);
+                       length_provider_1 = ndr_get_array_length(ndr, &r->provider);
+                       if (length_provider_1 > size_provider_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_provider_1, length_provider_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->provider), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->provider, ndr_get_array_length(ndr, &r->provider), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_provider_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->provider, length_provider_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_provider_0, 0);
                }
                if (r->print_processor) {
@@ -9359,11 +9781,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->print_processor, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->print_processor));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->print_processor));
-                       if (ndr_get_array_length(ndr, &r->print_processor) > ndr_get_array_size(ndr, &r->print_processor)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->print_processor), ndr_get_array_length(ndr, &r->print_processor));
+                       size_print_processor_1 = ndr_get_array_size(ndr, &r->print_processor);
+                       length_print_processor_1 = ndr_get_array_length(ndr, &r->print_processor);
+                       if (length_print_processor_1 > size_print_processor_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_print_processor_1, length_print_processor_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->print_processor), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->print_processor, ndr_get_array_length(ndr, &r->print_processor), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_print_processor_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->print_processor, length_print_processor_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_print_processor_0, 0);
                }
                if (r->vendor_setup) {
@@ -9371,11 +9795,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->vendor_setup, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->vendor_setup));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->vendor_setup));
-                       if (ndr_get_array_length(ndr, &r->vendor_setup) > ndr_get_array_size(ndr, &r->vendor_setup)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->vendor_setup), ndr_get_array_length(ndr, &r->vendor_setup));
+                       size_vendor_setup_1 = ndr_get_array_size(ndr, &r->vendor_setup);
+                       length_vendor_setup_1 = ndr_get_array_length(ndr, &r->vendor_setup);
+                       if (length_vendor_setup_1 > size_vendor_setup_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_vendor_setup_1, length_vendor_setup_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->vendor_setup), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->vendor_setup, ndr_get_array_length(ndr, &r->vendor_setup), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_vendor_setup_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->vendor_setup, length_vendor_setup_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_vendor_setup_0, 0);
                }
                if (r->color_profiles) {
@@ -9389,11 +9815,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo8(struct ndr_pull *ndr, i
                        NDR_PULL_SET_MEM_CTX(ndr, r->inf_path, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->inf_path));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->inf_path));
-                       if (ndr_get_array_length(ndr, &r->inf_path) > ndr_get_array_size(ndr, &r->inf_path)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->inf_path), ndr_get_array_length(ndr, &r->inf_path));
+                       size_inf_path_1 = ndr_get_array_size(ndr, &r->inf_path);
+                       length_inf_path_1 = ndr_get_array_length(ndr, &r->inf_path);
+                       if (length_inf_path_1 > size_inf_path_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_inf_path_1, length_inf_path_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->inf_path), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->inf_path, ndr_get_array_length(ndr, &r->inf_path), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_inf_path_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->inf_path, length_inf_path_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_inf_path_0, 0);
                }
                if (r->core_driver_dependencies) {
@@ -9622,11 +10050,17 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo(struct ndr_pull *ndr, in
        int level;
        uint32_t _level;
        TALLOC_CTX *_mem_save_info1_0;
+       uint32_t _ptr_info1;
        TALLOC_CTX *_mem_save_info2_0;
+       uint32_t _ptr_info2;
        TALLOC_CTX *_mem_save_info3_0;
+       uint32_t _ptr_info3;
        TALLOC_CTX *_mem_save_info4_0;
+       uint32_t _ptr_info4;
        TALLOC_CTX *_mem_save_info6_0;
+       uint32_t _ptr_info6;
        TALLOC_CTX *_mem_save_info8_0;
+       uint32_t _ptr_info8;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -9635,7 +10069,6 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo(struct ndr_pull *ndr, in
                }
                switch (level) {
                        case 1: {
-                               uint32_t _ptr_info1;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
                                if (_ptr_info1) {
                                        NDR_PULL_ALLOC(ndr, r->info1);
@@ -9645,7 +10078,6 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo(struct ndr_pull *ndr, in
                        break; }
 
                        case 2: {
-                               uint32_t _ptr_info2;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
                                if (_ptr_info2) {
                                        NDR_PULL_ALLOC(ndr, r->info2);
@@ -9655,7 +10087,6 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo(struct ndr_pull *ndr, in
                        break; }
 
                        case 3: {
-                               uint32_t _ptr_info3;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info3));
                                if (_ptr_info3) {
                                        NDR_PULL_ALLOC(ndr, r->info3);
@@ -9665,7 +10096,6 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo(struct ndr_pull *ndr, in
                        break; }
 
                        case 4: {
-                               uint32_t _ptr_info4;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info4));
                                if (_ptr_info4) {
                                        NDR_PULL_ALLOC(ndr, r->info4);
@@ -9675,7 +10105,6 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo(struct ndr_pull *ndr, in
                        break; }
 
                        case 6: {
-                               uint32_t _ptr_info6;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info6));
                                if (_ptr_info6) {
                                        NDR_PULL_ALLOC(ndr, r->info6);
@@ -9685,7 +10114,6 @@ static enum ndr_err_code ndr_pull_spoolss_AddDriverInfo(struct ndr_pull *ndr, in
                        break; }
 
                        case 8: {
-                               uint32_t _ptr_info8;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info8));
                                if (_ptr_info8) {
                                        NDR_PULL_ALLOC(ndr, r->info8);
@@ -9880,8 +10308,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo1(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -9987,8 +10416,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -9996,8 +10426,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->architecture) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10005,8 +10436,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_path) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10014,8 +10446,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10023,8 +10456,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->config_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10296,8 +10730,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10305,8 +10740,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->architecture) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10314,8 +10750,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_path) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10323,8 +10760,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10332,8 +10770,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->config_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10341,8 +10780,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->help_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->help_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->help_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->help_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->help_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10350,8 +10790,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->dependent_files) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dependent_files));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dependent_files));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->dependent_files));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dependent_files));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -10359,8 +10800,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->monitor_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10368,8 +10810,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->default_datatype) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10787,8 +11230,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10796,8 +11240,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->architecture) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10805,8 +11250,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_path) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10814,8 +11260,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10823,8 +11270,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->config_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10832,8 +11280,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->help_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->help_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->help_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->help_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->help_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10841,8 +11290,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->dependent_files) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dependent_files));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dependent_files));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->dependent_files));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dependent_files));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -10850,8 +11300,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->monitor_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10859,8 +11310,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->default_datatype) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -10868,8 +11320,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->previous_names) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->previous_names));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -11295,8 +11748,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11304,8 +11758,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->architecture) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11313,8 +11768,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_path) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11322,8 +11778,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11331,8 +11788,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->config_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11642,8 +12100,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11651,8 +12110,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->architecture) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11660,8 +12120,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_path) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11669,8 +12130,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11678,8 +12140,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->config_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11687,8 +12150,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->help_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->help_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->help_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->help_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->help_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11696,8 +12160,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->dependent_files) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dependent_files));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dependent_files));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->dependent_files));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dependent_files));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -11705,8 +12170,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->monitor_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11714,8 +12180,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->default_datatype) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11723,8 +12190,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->previous_names) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->previous_names));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -11732,8 +12200,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->manufacturer_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11741,8 +12210,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->manufacturer_url) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_url));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_url));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_url));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_url));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11750,8 +12220,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->hardware_id) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->hardware_id));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->hardware_id));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->hardware_id));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->hardware_id));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -11759,8 +12230,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->provider) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->provider));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->provider));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->provider));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->provider));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12416,8 +12888,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12425,8 +12898,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->architecture) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12434,8 +12908,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->driver_path) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12443,8 +12918,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->data_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12452,8 +12928,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->config_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12461,8 +12938,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->help_file) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->help_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->help_file));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->help_file));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->help_file));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12470,8 +12948,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->monitor_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12479,8 +12958,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->default_datatype) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12488,8 +12968,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->dependent_files) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dependent_files));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dependent_files));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->dependent_files));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dependent_files));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -12497,8 +12978,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->previous_names) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->previous_names));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -12506,8 +12988,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->manufacturer_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12515,8 +12998,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->manufacturer_url) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_url));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_url));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_url));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_url));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12524,8 +13008,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->hardware_id) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->hardware_id));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->hardware_id));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->hardware_id));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->hardware_id));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12533,8 +13018,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->provider) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->provider));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->provider));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->provider));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->provider));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12542,8 +13028,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->print_processor) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->print_processor));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->print_processor));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->print_processor));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->print_processor));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12551,8 +13038,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->vendor_setup) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->vendor_setup));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->vendor_setup));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->vendor_setup));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->vendor_setup));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12560,8 +13048,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->color_profiles) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->color_profiles));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->color_profiles));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->color_profiles));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->color_profiles));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -12569,8 +13058,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->inf_path) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->inf_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->inf_path));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->inf_path));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->inf_path));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -12578,8 +13068,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in
                        uint32_t _flags_save_string_array = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->core_driver_dependencies) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->core_driver_dependencies));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->core_driver_dependencies));
                                NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->core_driver_dependencies));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->core_driver_dependencies));
                        }
                        ndr->flags = _flags_save_string_array;
                }
@@ -13332,8 +13823,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverFileInfo(struct ndr_push *ndr,
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->file_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->file_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->file_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->file_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->file_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -13486,102 +13978,107 @@ _PUBLIC_ size_t ndr_size_spoolss_DriverInfo101(const struct spoolss_DriverInfo10
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_DriverInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
-
-                       case 2: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
-
-                       case 3: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo3(ndr, NDR_SCALARS, &r->info3));
-                       break; }
-
-                       case 4: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo4(ndr, NDR_SCALARS, &r->info4));
-                       break; }
-
-                       case 5: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo5(ndr, NDR_SCALARS, &r->info5));
-                       break; }
-
-                       case 6: {
-                               NDR_CHECK(ndr_push_align(ndr, 8));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo6(ndr, NDR_SCALARS, &r->info6));
-                       break; }
-
-                       case 8: {
-                               NDR_CHECK(ndr_push_align(ndr, 8));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo8(ndr, NDR_SCALARS, &r->info8));
-                       break; }
-
-                       case 101: {
-                               NDR_CHECK(ndr_push_align(ndr, 8));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo101(ndr, NDR_SCALARS, &r->info101));
-                       break; }
-
-                       default: {
-                       break; }
-
-               }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
-
-                       case 2:
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
-
-                       case 3:
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo3(ndr, NDR_BUFFERS, &r->info3));
-                       break;
-
-                       case 4:
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo4(ndr, NDR_BUFFERS, &r->info4));
-                       break;
-
-                       case 5:
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo5(ndr, NDR_BUFFERS, &r->info5));
-                       break;
-
-                       case 6:
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo6(ndr, NDR_BUFFERS, &r->info6));
-                       break;
-
-                       case 8:
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo8(ndr, NDR_BUFFERS, &r->info8));
-                       break;
-
-                       case 101:
-                               NDR_CHECK(ndr_push_spoolss_DriverInfo101(ndr, NDR_BUFFERS, &r->info101));
-                       break;
-
-                       default:
-                       break;
-
-               }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
+
+                               case 2: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
+
+                               case 3: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo3(ndr, NDR_SCALARS, &r->info3));
+                               break; }
+
+                               case 4: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo4(ndr, NDR_SCALARS, &r->info4));
+                               break; }
+
+                               case 5: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo5(ndr, NDR_SCALARS, &r->info5));
+                               break; }
+
+                               case 6: {
+                                       NDR_CHECK(ndr_push_align(ndr, 8));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo6(ndr, NDR_SCALARS, &r->info6));
+                               break; }
+
+                               case 8: {
+                                       NDR_CHECK(ndr_push_align(ndr, 8));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo8(ndr, NDR_SCALARS, &r->info8));
+                               break; }
+
+                               case 101: {
+                                       NDR_CHECK(ndr_push_align(ndr, 8));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo101(ndr, NDR_SCALARS, &r->info101));
+                               break; }
+
+                               default: {
+                               break; }
+
+                       }
+               }
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
+
+                               case 2:
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
+
+                               case 3:
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo3(ndr, NDR_BUFFERS, &r->info3));
+                               break;
+
+                               case 4:
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo4(ndr, NDR_BUFFERS, &r->info4));
+                               break;
+
+                               case 5:
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo5(ndr, NDR_BUFFERS, &r->info5));
+                               break;
+
+                               case 6:
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo6(ndr, NDR_BUFFERS, &r->info6));
+                               break;
+
+                               case 8:
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo8(ndr, NDR_BUFFERS, &r->info8));
+                               break;
+
+                               case 101:
+                                       NDR_CHECK(ndr_push_spoolss_DriverInfo101(ndr, NDR_BUFFERS, &r->info101));
+                               break;
+
+                               default:
+                               break;
+
+                       }
+               }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -13591,152 +14088,163 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverInfo(struct ndr_pull *ndr, int
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
-
-                       case 2: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
-
-                       case 3: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo3(ndr, NDR_SCALARS, &r->info3));
-                       break; }
-
-                       case 4: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo4(ndr, NDR_SCALARS, &r->info4));
-                       break; }
-
-                       case 5: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo5(ndr, NDR_SCALARS, &r->info5));
-                       break; }
-
-                       case 6: {
-                               NDR_CHECK(ndr_pull_align(ndr, 8));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo6(ndr, NDR_SCALARS, &r->info6));
-                       break; }
-
-                       case 8: {
-                               NDR_CHECK(ndr_pull_align(ndr, 8));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo8(ndr, NDR_SCALARS, &r->info8));
-                       break; }
-
-                       case 101: {
-                               NDR_CHECK(ndr_pull_align(ndr, 8));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo101(ndr, NDR_SCALARS, &r->info101));
-                       break; }
-
-                       default: {
-                       break; }
-
-               }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
+
+                               case 2: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
+
+                               case 3: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo3(ndr, NDR_SCALARS, &r->info3));
+                               break; }
+
+                               case 4: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo4(ndr, NDR_SCALARS, &r->info4));
+                               break; }
+
+                               case 5: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo5(ndr, NDR_SCALARS, &r->info5));
+                               break; }
+
+                               case 6: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 8));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo6(ndr, NDR_SCALARS, &r->info6));
+                               break; }
+
+                               case 8: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 8));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo8(ndr, NDR_SCALARS, &r->info8));
+                               break; }
+
+                               case 101: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 8));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo101(ndr, NDR_SCALARS, &r->info101));
+                               break; }
+
+                               default: {
+                               break; }
+
+                       }
+               }
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
+
+                               case 2:
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
+
+                               case 3:
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo3(ndr, NDR_BUFFERS, &r->info3));
+                               break;
+
+                               case 4:
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo4(ndr, NDR_BUFFERS, &r->info4));
+                               break;
+
+                               case 5:
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo5(ndr, NDR_BUFFERS, &r->info5));
+                               break;
+
+                               case 6:
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo6(ndr, NDR_BUFFERS, &r->info6));
+                               break;
+
+                               case 8:
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo8(ndr, NDR_BUFFERS, &r->info8));
+                               break;
+
+                               case 101:
+                                       NDR_CHECK(ndr_pull_spoolss_DriverInfo101(ndr, NDR_BUFFERS, &r->info101));
+                               break;
+
+                               default:
+                               break;
+
+                       }
+               }
+               ndr->flags = _flags_save_UNION;
        }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+       ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_DriverInfo(struct ndr_print *ndr, const char *name, const union spoolss_DriverInfo *r)
+{
+       int level;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_DriverInfo");
                switch (level) {
                        case 1:
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               ndr_print_spoolss_DriverInfo1(ndr, "info1", &r->info1);
                        break;
 
                        case 2:
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               ndr_print_spoolss_DriverInfo2(ndr, "info2", &r->info2);
                        break;
 
                        case 3:
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo3(ndr, NDR_BUFFERS, &r->info3));
+                               ndr_print_spoolss_DriverInfo3(ndr, "info3", &r->info3);
                        break;
 
                        case 4:
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo4(ndr, NDR_BUFFERS, &r->info4));
+                               ndr_print_spoolss_DriverInfo4(ndr, "info4", &r->info4);
                        break;
 
                        case 5:
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo5(ndr, NDR_BUFFERS, &r->info5));
+                               ndr_print_spoolss_DriverInfo5(ndr, "info5", &r->info5);
                        break;
 
                        case 6:
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo6(ndr, NDR_BUFFERS, &r->info6));
+                               ndr_print_spoolss_DriverInfo6(ndr, "info6", &r->info6);
                        break;
 
                        case 8:
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo8(ndr, NDR_BUFFERS, &r->info8));
+                               ndr_print_spoolss_DriverInfo8(ndr, "info8", &r->info8);
                        break;
 
                        case 101:
-                               NDR_CHECK(ndr_pull_spoolss_DriverInfo101(ndr, NDR_BUFFERS, &r->info101));
+                               ndr_print_spoolss_DriverInfo101(ndr, "info101", &r->info101);
                        break;
 
                        default:
                        break;
 
                }
-       }
-       ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
-       return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_spoolss_DriverInfo(struct ndr_print *ndr, const char *name, const union spoolss_DriverInfo *r)
-{
-       int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_DriverInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_DriverInfo1(ndr, "info1", &r->info1);
-               break;
-
-               case 2:
-                       ndr_print_spoolss_DriverInfo2(ndr, "info2", &r->info2);
-               break;
-
-               case 3:
-                       ndr_print_spoolss_DriverInfo3(ndr, "info3", &r->info3);
-               break;
-
-               case 4:
-                       ndr_print_spoolss_DriverInfo4(ndr, "info4", &r->info4);
-               break;
-
-               case 5:
-                       ndr_print_spoolss_DriverInfo5(ndr, "info5", &r->info5);
-               break;
-
-               case 6:
-                       ndr_print_spoolss_DriverInfo6(ndr, "info6", &r->info6);
-               break;
-
-               case 8:
-                       ndr_print_spoolss_DriverInfo8(ndr, "info8", &r->info8);
-               break;
-
-               case 101:
-                       ndr_print_spoolss_DriverInfo101(ndr, "info101", &r->info101);
-               break;
-
-               default:
-               break;
-
+               ndr->flags = _flags_save_UNION;
        }
 }
 
 _PUBLIC_ size_t ndr_size_spoolss_DriverInfo(const union spoolss_DriverInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
 {
+       flags |= LIBNDR_FLAG_RELATIVE_REVERSE;
        return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_DriverInfo, ic);
 }
 
@@ -13788,34 +14296,39 @@ _PUBLIC_ size_t ndr_size_spoolss_DriverDirectoryInfo1(const struct spoolss_Drive
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverDirectoryInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_DriverDirectoryInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       default: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+                               default: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -13825,33 +14338,38 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverDirectoryInfo(struct ndr_pull
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       default: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+                               default: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -13860,22 +14378,28 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverDirectoryInfo(struct ndr_pull
 _PUBLIC_ void ndr_print_spoolss_DriverDirectoryInfo(struct ndr_print *ndr, const char *name, const union spoolss_DriverDirectoryInfo *r)
 {
        int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_DriverDirectoryInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_DriverDirectoryInfo1(ndr, "info1", &r->info1);
-               break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_DriverDirectoryInfo");
+               switch (level) {
+                       case 1:
+                               ndr_print_spoolss_DriverDirectoryInfo1(ndr, "info1", &r->info1);
+                       break;
 
-               default:
-                       ndr_print_spoolss_DriverDirectoryInfo1(ndr, "info1", &r->info1);
-               break;
+                       default:
+                               ndr_print_spoolss_DriverDirectoryInfo1(ndr, "info1", &r->info1);
+                       break;
 
+               }
+               ndr->flags = _flags_save_UNION;
        }
 }
 
 _PUBLIC_ size_t ndr_size_spoolss_DriverDirectoryInfo(const union spoolss_DriverDirectoryInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
 {
+       flags |= LIBNDR_FLAG_RELATIVE_REVERSE;
        return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_DriverDirectoryInfo, ic);
 }
 
@@ -13895,8 +14419,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcessorInfo1(struct ndr_push
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->print_processor_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->print_processor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->print_processor_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->print_processor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->print_processor_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -13964,32 +14489,37 @@ _PUBLIC_ size_t ndr_size_spoolss_PrintProcessorInfo1(const struct spoolss_PrintP
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcessorInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrintProcessorInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrintProcessorInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrintProcessorInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_push_spoolss_PrintProcessorInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_push_spoolss_PrintProcessorInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -13999,31 +14529,36 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcessorInfo(struct ndr_pull *
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -14032,16 +14567,21 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcessorInfo(struct ndr_pull *
 _PUBLIC_ void ndr_print_spoolss_PrintProcessorInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrintProcessorInfo *r)
 {
        int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_PrintProcessorInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_PrintProcessorInfo1(ndr, "info1", &r->info1);
-               break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_PrintProcessorInfo");
+               switch (level) {
+                       case 1:
+                               ndr_print_spoolss_PrintProcessorInfo1(ndr, "info1", &r->info1);
+                       break;
 
-               default:
-               break;
+                       default:
+                       break;
 
+               }
+               ndr->flags = _flags_save_UNION;
        }
 }
 
@@ -14093,34 +14633,39 @@ _PUBLIC_ size_t ndr_size_spoolss_PrintProcessorDirectoryInfo1(const struct spool
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcessorDirectoryInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrintProcessorDirectoryInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       default: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+                               default: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -14130,33 +14675,38 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcessorDirectoryInfo(struct n
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       default: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+                               default: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -14165,22 +14715,28 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcessorDirectoryInfo(struct n
 _PUBLIC_ void ndr_print_spoolss_PrintProcessorDirectoryInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrintProcessorDirectoryInfo *r)
 {
        int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_PrintProcessorDirectoryInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_PrintProcessorDirectoryInfo1(ndr, "info1", &r->info1);
-               break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_PrintProcessorDirectoryInfo");
+               switch (level) {
+                       case 1:
+                               ndr_print_spoolss_PrintProcessorDirectoryInfo1(ndr, "info1", &r->info1);
+                       break;
 
-               default:
-                       ndr_print_spoolss_PrintProcessorDirectoryInfo1(ndr, "info1", &r->info1);
-               break;
+                       default:
+                               ndr_print_spoolss_PrintProcessorDirectoryInfo1(ndr, "info1", &r->info1);
+                       break;
 
+               }
+               ndr->flags = _flags_save_UNION;
        }
 }
 
 _PUBLIC_ size_t ndr_size_spoolss_PrintProcessorDirectoryInfo(const union spoolss_PrintProcessorDirectoryInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
 {
+       flags |= LIBNDR_FLAG_RELATIVE_REVERSE;
        return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_PrintProcessorDirectoryInfo, ic);
 }
 
@@ -14218,10 +14774,16 @@ static enum ndr_err_code ndr_push_spoolss_DocumentInfo1(struct ndr_push *ndr, in
 static enum ndr_err_code ndr_pull_spoolss_DocumentInfo1(struct ndr_pull *ndr, int ndr_flags, struct spoolss_DocumentInfo1 *r)
 {
        uint32_t _ptr_document_name;
+       uint32_t size_document_name_1 = 0;
+       uint32_t length_document_name_1 = 0;
        TALLOC_CTX *_mem_save_document_name_0;
        uint32_t _ptr_output_file;
+       uint32_t size_output_file_1 = 0;
+       uint32_t length_output_file_1 = 0;
        TALLOC_CTX *_mem_save_output_file_0;
        uint32_t _ptr_datatype;
+       uint32_t size_datatype_1 = 0;
+       uint32_t length_datatype_1 = 0;
        TALLOC_CTX *_mem_save_datatype_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -14250,11 +14812,13 @@ static enum ndr_err_code ndr_pull_spoolss_DocumentInfo1(struct ndr_pull *ndr, in
                        NDR_PULL_SET_MEM_CTX(ndr, r->document_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->document_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->document_name));
-                       if (ndr_get_array_length(ndr, &r->document_name) > ndr_get_array_size(ndr, &r->document_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->document_name), ndr_get_array_length(ndr, &r->document_name));
+                       size_document_name_1 = ndr_get_array_size(ndr, &r->document_name);
+                       length_document_name_1 = ndr_get_array_length(ndr, &r->document_name);
+                       if (length_document_name_1 > size_document_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_document_name_1, length_document_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->document_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->document_name, ndr_get_array_length(ndr, &r->document_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_document_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->document_name, length_document_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_document_name_0, 0);
                }
                if (r->output_file) {
@@ -14262,11 +14826,13 @@ static enum ndr_err_code ndr_pull_spoolss_DocumentInfo1(struct ndr_pull *ndr, in
                        NDR_PULL_SET_MEM_CTX(ndr, r->output_file, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->output_file));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->output_file));
-                       if (ndr_get_array_length(ndr, &r->output_file) > ndr_get_array_size(ndr, &r->output_file)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->output_file), ndr_get_array_length(ndr, &r->output_file));
+                       size_output_file_1 = ndr_get_array_size(ndr, &r->output_file);
+                       length_output_file_1 = ndr_get_array_length(ndr, &r->output_file);
+                       if (length_output_file_1 > size_output_file_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_output_file_1, length_output_file_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->output_file), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->output_file, ndr_get_array_length(ndr, &r->output_file), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_output_file_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->output_file, length_output_file_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_output_file_0, 0);
                }
                if (r->datatype) {
@@ -14274,11 +14840,13 @@ static enum ndr_err_code ndr_pull_spoolss_DocumentInfo1(struct ndr_pull *ndr, in
                        NDR_PULL_SET_MEM_CTX(ndr, r->datatype, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->datatype));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->datatype));
-                       if (ndr_get_array_length(ndr, &r->datatype) > ndr_get_array_size(ndr, &r->datatype)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->datatype), ndr_get_array_length(ndr, &r->datatype));
+                       size_datatype_1 = ndr_get_array_size(ndr, &r->datatype);
+                       length_datatype_1 = ndr_get_array_length(ndr, &r->datatype);
+                       if (length_datatype_1 > size_datatype_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_datatype_1, length_datatype_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->datatype), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->datatype, ndr_get_array_length(ndr, &r->datatype), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_datatype_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->datatype, length_datatype_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_datatype_0, 0);
                }
        }
@@ -14359,6 +14927,7 @@ static enum ndr_err_code ndr_pull_spoolss_DocumentInfo(struct ndr_pull *ndr, int
        int level;
        uint32_t _level;
        TALLOC_CTX *_mem_save_info1_0;
+       uint32_t _ptr_info1;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -14367,7 +14936,6 @@ static enum ndr_err_code ndr_pull_spoolss_DocumentInfo(struct ndr_pull *ndr, int
                }
                switch (level) {
                        case 1: {
-                               uint32_t _ptr_info1;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
                                if (_ptr_info1) {
                                        NDR_PULL_ALLOC(ndr, r->info1);
@@ -14891,8 +15459,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo1(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->form_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->form_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->form_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->form_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->form_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -15027,8 +15596,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->form_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->form_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->form_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->form_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->form_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -15036,8 +15606,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
                        if (r->keyword) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->keyword));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->keyword));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->keyword));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->keyword));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -15045,8 +15616,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->mui_dll) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->mui_dll));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->mui_dll));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->mui_dll));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->mui_dll));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -15054,8 +15626,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->display_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->display_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->display_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->display_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->display_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -15240,42 +15813,47 @@ _PUBLIC_ size_t ndr_size_spoolss_FormInfo2(const struct spoolss_FormInfo2 *r, st
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_FormInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_FormInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_FormInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       case 2: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_FormInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
+                               case 2: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_FormInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_push_spoolss_FormInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_push_spoolss_FormInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       case 2:
-                               NDR_CHECK(ndr_push_spoolss_FormInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
+                               case 2:
+                                       NDR_CHECK(ndr_push_spoolss_FormInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -15285,41 +15863,46 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_FormInfo(struct ndr_pull *ndr, int n
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_FormInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_FormInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       case 2: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_FormInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
+                               case 2: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_FormInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_pull_spoolss_FormInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_pull_spoolss_FormInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       case 2:
-                               NDR_CHECK(ndr_pull_spoolss_FormInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
+                               case 2:
+                                       NDR_CHECK(ndr_pull_spoolss_FormInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -15328,25 +15911,31 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_FormInfo(struct ndr_pull *ndr, int n
 _PUBLIC_ void ndr_print_spoolss_FormInfo(struct ndr_print *ndr, const char *name, const union spoolss_FormInfo *r)
 {
        int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_FormInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_FormInfo1(ndr, "info1", &r->info1);
-               break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_FormInfo");
+               switch (level) {
+                       case 1:
+                               ndr_print_spoolss_FormInfo1(ndr, "info1", &r->info1);
+                       break;
 
-               case 2:
-                       ndr_print_spoolss_FormInfo2(ndr, "info2", &r->info2);
-               break;
+                       case 2:
+                               ndr_print_spoolss_FormInfo2(ndr, "info2", &r->info2);
+                       break;
 
-               default:
-               break;
+                       default:
+                       break;
 
+               }
+               ndr->flags = _flags_save_UNION;
        }
 }
 
 _PUBLIC_ size_t ndr_size_spoolss_FormInfo(const union spoolss_FormInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
 {
+       flags |= LIBNDR_FLAG_RELATIVE_REVERSE;
        return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_FormInfo, ic);
 }
 
@@ -15373,6 +15962,8 @@ static enum ndr_err_code ndr_push_spoolss_AddFormInfo1(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_AddFormInfo1(struct ndr_pull *ndr, int ndr_flags, struct spoolss_AddFormInfo1 *r)
 {
        uint32_t _ptr_form_name;
+       uint32_t size_form_name_1 = 0;
+       uint32_t length_form_name_1 = 0;
        TALLOC_CTX *_mem_save_form_name_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -15392,11 +15983,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddFormInfo1(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->form_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->form_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->form_name));
-                       if (ndr_get_array_length(ndr, &r->form_name) > ndr_get_array_size(ndr, &r->form_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->form_name), ndr_get_array_length(ndr, &r->form_name));
+                       size_form_name_1 = ndr_get_array_size(ndr, &r->form_name);
+                       length_form_name_1 = ndr_get_array_length(ndr, &r->form_name);
+                       if (length_form_name_1 > size_form_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_form_name_1, length_form_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->form_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->form_name, ndr_get_array_length(ndr, &r->form_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_form_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->form_name, length_form_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_form_name_0, 0);
                }
        }
@@ -15466,12 +16059,20 @@ static enum ndr_err_code ndr_push_spoolss_AddFormInfo2(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_AddFormInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_AddFormInfo2 *r)
 {
        uint32_t _ptr_form_name;
+       uint32_t size_form_name_1 = 0;
+       uint32_t length_form_name_1 = 0;
        TALLOC_CTX *_mem_save_form_name_0;
        uint32_t _ptr_keyword;
+       uint32_t size_keyword_1 = 0;
+       uint32_t length_keyword_1 = 0;
        TALLOC_CTX *_mem_save_keyword_0;
        uint32_t _ptr_mui_dll;
+       uint32_t size_mui_dll_1 = 0;
+       uint32_t length_mui_dll_1 = 0;
        TALLOC_CTX *_mem_save_mui_dll_0;
        uint32_t _ptr_display_name;
+       uint32_t size_display_name_1 = 0;
+       uint32_t length_display_name_1 = 0;
        TALLOC_CTX *_mem_save_display_name_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -15512,11 +16113,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddFormInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->form_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->form_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->form_name));
-                       if (ndr_get_array_length(ndr, &r->form_name) > ndr_get_array_size(ndr, &r->form_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->form_name), ndr_get_array_length(ndr, &r->form_name));
+                       size_form_name_1 = ndr_get_array_size(ndr, &r->form_name);
+                       length_form_name_1 = ndr_get_array_length(ndr, &r->form_name);
+                       if (length_form_name_1 > size_form_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_form_name_1, length_form_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->form_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->form_name, ndr_get_array_length(ndr, &r->form_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_form_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->form_name, length_form_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_form_name_0, 0);
                }
                if (r->keyword) {
@@ -15524,11 +16127,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddFormInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->keyword, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->keyword));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->keyword));
-                       if (ndr_get_array_length(ndr, &r->keyword) > ndr_get_array_size(ndr, &r->keyword)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->keyword), ndr_get_array_length(ndr, &r->keyword));
+                       size_keyword_1 = ndr_get_array_size(ndr, &r->keyword);
+                       length_keyword_1 = ndr_get_array_length(ndr, &r->keyword);
+                       if (length_keyword_1 > size_keyword_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_keyword_1, length_keyword_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->keyword), sizeof(uint8_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->keyword, ndr_get_array_length(ndr, &r->keyword), sizeof(uint8_t), CH_DOS));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_keyword_1, sizeof(uint8_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->keyword, length_keyword_1, sizeof(uint8_t), CH_DOS));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_keyword_0, 0);
                }
                if (r->mui_dll) {
@@ -15536,11 +16141,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddFormInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->mui_dll, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->mui_dll));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->mui_dll));
-                       if (ndr_get_array_length(ndr, &r->mui_dll) > ndr_get_array_size(ndr, &r->mui_dll)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->mui_dll), ndr_get_array_length(ndr, &r->mui_dll));
+                       size_mui_dll_1 = ndr_get_array_size(ndr, &r->mui_dll);
+                       length_mui_dll_1 = ndr_get_array_length(ndr, &r->mui_dll);
+                       if (length_mui_dll_1 > size_mui_dll_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_mui_dll_1, length_mui_dll_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->mui_dll), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->mui_dll, ndr_get_array_length(ndr, &r->mui_dll), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_mui_dll_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->mui_dll, length_mui_dll_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_mui_dll_0, 0);
                }
                if (r->display_name) {
@@ -15548,11 +16155,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddFormInfo2(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->display_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->display_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->display_name));
-                       if (ndr_get_array_length(ndr, &r->display_name) > ndr_get_array_size(ndr, &r->display_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->display_name), ndr_get_array_length(ndr, &r->display_name));
+                       size_display_name_1 = ndr_get_array_size(ndr, &r->display_name);
+                       length_display_name_1 = ndr_get_array_length(ndr, &r->display_name);
+                       if (length_display_name_1 > size_display_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_display_name_1, length_display_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->display_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->display_name, ndr_get_array_length(ndr, &r->display_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_display_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->display_name, length_display_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_0, 0);
                }
        }
@@ -15641,7 +16250,9 @@ static enum ndr_err_code ndr_pull_spoolss_AddFormInfo(struct ndr_pull *ndr, int
        int level;
        uint32_t _level;
        TALLOC_CTX *_mem_save_info1_0;
+       uint32_t _ptr_info1;
        TALLOC_CTX *_mem_save_info2_0;
+       uint32_t _ptr_info2;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -15650,7 +16261,6 @@ static enum ndr_err_code ndr_pull_spoolss_AddFormInfo(struct ndr_pull *ndr, int
                }
                switch (level) {
                        case 1: {
-                               uint32_t _ptr_info1;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
                                if (_ptr_info1) {
                                        NDR_PULL_ALLOC(ndr, r->info1);
@@ -15660,7 +16270,6 @@ static enum ndr_err_code ndr_pull_spoolss_AddFormInfo(struct ndr_pull *ndr, int
                        break; }
 
                        case 2: {
-                               uint32_t _ptr_info2;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
                                if (_ptr_info2) {
                                        NDR_PULL_ALLOC(ndr, r->info2);
@@ -15745,8 +16354,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo1(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->port_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->port_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->port_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->port_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->port_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -15866,8 +16476,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo2(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->port_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->port_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->port_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->port_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->port_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -15875,8 +16486,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo2(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->monitor_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -15884,8 +16496,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo2(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->description) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->description));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->description));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->description));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->description));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -16104,8 +16717,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo3(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->status_string) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->status_string));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->status_string));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->status_string));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->status_string));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -16191,8 +16805,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfoFF(struct ndr_push *ndr, int
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->port_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->port_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->port_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->port_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->port_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -16262,62 +16877,67 @@ _PUBLIC_ size_t ndr_size_spoolss_PortInfoFF(const struct spoolss_PortInfoFF *r,
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PortInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PortInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PortInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       case 2: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PortInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
+                               case 2: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PortInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
 
-                       case 3: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PortInfo3(ndr, NDR_SCALARS, &r->info3));
-                       break; }
+                               case 3: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PortInfo3(ndr, NDR_SCALARS, &r->info3));
+                               break; }
 
-                       case 0xff: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PortInfoFF(ndr, NDR_SCALARS, &r->infoFF));
-                       break; }
+                               case 0xff: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PortInfoFF(ndr, NDR_SCALARS, &r->infoFF));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_push_spoolss_PortInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_push_spoolss_PortInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       case 2:
-                               NDR_CHECK(ndr_push_spoolss_PortInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
+                               case 2:
+                                       NDR_CHECK(ndr_push_spoolss_PortInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
 
-                       case 3:
-                               NDR_CHECK(ndr_push_spoolss_PortInfo3(ndr, NDR_BUFFERS, &r->info3));
-                       break;
+                               case 3:
+                                       NDR_CHECK(ndr_push_spoolss_PortInfo3(ndr, NDR_BUFFERS, &r->info3));
+                               break;
 
-                       case 0xff:
-                               NDR_CHECK(ndr_push_spoolss_PortInfoFF(ndr, NDR_BUFFERS, &r->infoFF));
-                       break;
+                               case 0xff:
+                                       NDR_CHECK(ndr_push_spoolss_PortInfoFF(ndr, NDR_BUFFERS, &r->infoFF));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -16327,61 +16947,66 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PortInfo(struct ndr_pull *ndr, int n
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PortInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PortInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       case 2: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PortInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
+                               case 2: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PortInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
 
-                       case 3: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PortInfo3(ndr, NDR_SCALARS, &r->info3));
-                       break; }
+                               case 3: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PortInfo3(ndr, NDR_SCALARS, &r->info3));
+                               break; }
 
-                       case 0xff: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PortInfoFF(ndr, NDR_SCALARS, &r->infoFF));
-                       break; }
+                               case 0xff: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PortInfoFF(ndr, NDR_SCALARS, &r->infoFF));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_pull_spoolss_PortInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_pull_spoolss_PortInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       case 2:
-                               NDR_CHECK(ndr_pull_spoolss_PortInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
+                               case 2:
+                                       NDR_CHECK(ndr_pull_spoolss_PortInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
 
-                       case 3:
-                               NDR_CHECK(ndr_pull_spoolss_PortInfo3(ndr, NDR_BUFFERS, &r->info3));
-                       break;
+                               case 3:
+                                       NDR_CHECK(ndr_pull_spoolss_PortInfo3(ndr, NDR_BUFFERS, &r->info3));
+                               break;
 
-                       case 0xff:
-                               NDR_CHECK(ndr_pull_spoolss_PortInfoFF(ndr, NDR_BUFFERS, &r->infoFF));
-                       break;
+                               case 0xff:
+                                       NDR_CHECK(ndr_pull_spoolss_PortInfoFF(ndr, NDR_BUFFERS, &r->infoFF));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -16390,28 +17015,33 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PortInfo(struct ndr_pull *ndr, int n
 _PUBLIC_ void ndr_print_spoolss_PortInfo(struct ndr_print *ndr, const char *name, const union spoolss_PortInfo *r)
 {
        int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_PortInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_PortInfo1(ndr, "info1", &r->info1);
-               break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_PortInfo");
+               switch (level) {
+                       case 1:
+                               ndr_print_spoolss_PortInfo1(ndr, "info1", &r->info1);
+                       break;
 
-               case 2:
-                       ndr_print_spoolss_PortInfo2(ndr, "info2", &r->info2);
-               break;
+                       case 2:
+                               ndr_print_spoolss_PortInfo2(ndr, "info2", &r->info2);
+                       break;
 
-               case 3:
-                       ndr_print_spoolss_PortInfo3(ndr, "info3", &r->info3);
-               break;
+                       case 3:
+                               ndr_print_spoolss_PortInfo3(ndr, "info3", &r->info3);
+                       break;
 
-               case 0xff:
-                       ndr_print_spoolss_PortInfoFF(ndr, "infoFF", &r->infoFF);
-               break;
+                       case 0xff:
+                               ndr_print_spoolss_PortInfoFF(ndr, "infoFF", &r->infoFF);
+                       break;
 
-               default:
-               break;
+                       default:
+                       break;
 
+               }
+               ndr->flags = _flags_save_UNION;
        }
 }
 
@@ -16431,8 +17061,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo1(struct ndr_push *ndr, i
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->monitor_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -16525,8 +17156,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo2(struct ndr_push *ndr, i
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->monitor_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -16534,8 +17166,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo2(struct ndr_push *ndr, i
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->environment) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->environment));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->environment));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->environment));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->environment));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -16543,8 +17176,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo2(struct ndr_push *ndr, i
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->dll_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dll_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dll_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->dll_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dll_name));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -16682,42 +17316,47 @@ _PUBLIC_ size_t ndr_size_spoolss_MonitorInfo2(const struct spoolss_MonitorInfo2
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_MonitorInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_MonitorInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_MonitorInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       case 2: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_MonitorInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
+                               case 2: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_MonitorInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_push_spoolss_MonitorInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_push_spoolss_MonitorInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       case 2:
-                               NDR_CHECK(ndr_push_spoolss_MonitorInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
+                               case 2:
+                                       NDR_CHECK(ndr_push_spoolss_MonitorInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -16727,41 +17366,46 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_MonitorInfo(struct ndr_pull *ndr, in
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_MonitorInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_MonitorInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       case 2: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_MonitorInfo2(ndr, NDR_SCALARS, &r->info2));
-                       break; }
+                               case 2: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_MonitorInfo2(ndr, NDR_SCALARS, &r->info2));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_pull_spoolss_MonitorInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_pull_spoolss_MonitorInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       case 2:
-                               NDR_CHECK(ndr_pull_spoolss_MonitorInfo2(ndr, NDR_BUFFERS, &r->info2));
-                       break;
+                               case 2:
+                                       NDR_CHECK(ndr_pull_spoolss_MonitorInfo2(ndr, NDR_BUFFERS, &r->info2));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -16770,20 +17414,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_MonitorInfo(struct ndr_pull *ndr, in
 _PUBLIC_ void ndr_print_spoolss_MonitorInfo(struct ndr_print *ndr, const char *name, const union spoolss_MonitorInfo *r)
 {
        int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_MonitorInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_MonitorInfo1(ndr, "info1", &r->info1);
-               break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_MonitorInfo");
+               switch (level) {
+                       case 1:
+                               ndr_print_spoolss_MonitorInfo1(ndr, "info1", &r->info1);
+                       break;
 
-               case 2:
-                       ndr_print_spoolss_MonitorInfo2(ndr, "info2", &r->info2);
-               break;
+                       case 2:
+                               ndr_print_spoolss_MonitorInfo2(ndr, "info2", &r->info2);
+                       break;
 
-               default:
-               break;
+                       default:
+                       break;
 
+               }
+               ndr->flags = _flags_save_UNION;
        }
 }
 
@@ -16803,8 +17452,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcDataTypesInfo1(struct ndr_p
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->name_array) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->name_array));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->name_array));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->name_array));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->name_array));
                        }
                        ndr->flags = _flags_save_string;
                }
@@ -16872,32 +17522,37 @@ _PUBLIC_ size_t ndr_size_spoolss_PrintProcDataTypesInfo1(const struct spoolss_Pr
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcDataTypesInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrintProcDataTypesInfo *r)
 {
        uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);
-       if (ndr_flags & NDR_SCALARS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_push_align(ndr, 4));
-                               NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_push_spoolss_PrintProcDataTypesInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               if (ndr_flags & NDR_SCALARS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_push_align(ndr, 4));
+                                       NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_push_spoolss_PrintProcDataTypesInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
-               }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               int level = ndr_push_get_switch_value(ndr, r);
-               NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_push_spoolss_PrintProcDataTypesInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+                       }
+               }
+               if (ndr_flags & NDR_BUFFERS) {
+                       int level = ndr_push_get_switch_value(ndr, r);
+                       NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_push_spoolss_PrintProcDataTypesInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -16907,31 +17562,36 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcDataTypesInfo(struct ndr_pu
 {
        uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);
        int level;
-       level = ndr_pull_get_switch_value(ndr, r);
-       if (ndr_flags & NDR_SCALARS) {
-               switch (level) {
-                       case 1: {
-                               NDR_CHECK(ndr_pull_align(ndr, 4));
-                               NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
-                               NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo1(ndr, NDR_SCALARS, &r->info1));
-                       break; }
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_pull_get_switch_value(ndr, r);
+               if (ndr_flags & NDR_SCALARS) {
+                       switch (level) {
+                               case 1: {
+                                       NDR_CHECK(ndr_pull_align(ndr, 4));
+                                       NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset));
+                                       NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo1(ndr, NDR_SCALARS, &r->info1));
+                               break; }
 
-                       default: {
-                       break; }
+                               default: {
+                               break; }
 
+                       }
                }
-       }
-       if (ndr_flags & NDR_BUFFERS) {
-               NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
-               switch (level) {
-                       case 1:
-                               NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo1(ndr, NDR_BUFFERS, &r->info1));
-                       break;
+               if (ndr_flags & NDR_BUFFERS) {
+                       NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r));
+                       switch (level) {
+                               case 1:
+                                       NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo1(ndr, NDR_BUFFERS, &r->info1));
+                               break;
 
-                       default:
-                       break;
+                               default:
+                               break;
 
+                       }
                }
+               ndr->flags = _flags_save_UNION;
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
        return NDR_ERR_SUCCESS;
@@ -16940,16 +17600,21 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcDataTypesInfo(struct ndr_pu
 _PUBLIC_ void ndr_print_spoolss_PrintProcDataTypesInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrintProcDataTypesInfo *r)
 {
        int level;
-       level = ndr_print_get_switch_value(ndr, r);
-       ndr_print_union(ndr, name, level, "spoolss_PrintProcDataTypesInfo");
-       switch (level) {
-               case 1:
-                       ndr_print_spoolss_PrintProcDataTypesInfo1(ndr, "info1", &r->info1);
-               break;
+       {
+               uint32_t _flags_save_UNION = ndr->flags;
+               ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE);
+               level = ndr_print_get_switch_value(ndr, r);
+               ndr_print_union(ndr, name, level, "spoolss_PrintProcDataTypesInfo");
+               switch (level) {
+                       case 1:
+                               ndr_print_spoolss_PrintProcDataTypesInfo1(ndr, "info1", &r->info1);
+                       break;
 
-               default:
-               break;
+                       default:
+                       break;
 
+               }
+               ndr->flags = _flags_save_UNION;
        }
 }
 
@@ -17217,6 +17882,7 @@ static enum ndr_err_code ndr_push_spoolss_NotifyOptionType(struct ndr_push *ndr,
 static enum ndr_err_code ndr_pull_spoolss_NotifyOptionType(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyOptionType *r)
 {
        uint32_t _ptr_fields;
+       uint32_t size_fields_1 = 0;
        uint32_t cntr_fields_1;
        TALLOC_CTX *_mem_save_fields_0;
        TALLOC_CTX *_mem_save_fields_1;
@@ -17239,10 +17905,11 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyOptionType(struct ndr_pull *ndr,
                        _mem_save_fields_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->fields, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->fields));
-                       NDR_PULL_ALLOC_N(ndr, r->fields, ndr_get_array_size(ndr, &r->fields));
+                       size_fields_1 = ndr_get_array_size(ndr, &r->fields);
+                       NDR_PULL_ALLOC_N(ndr, r->fields, size_fields_1);
                        _mem_save_fields_1 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->fields, 0);
-                       for (cntr_fields_1 = 0; cntr_fields_1 < r->count; cntr_fields_1++) {
+                       for (cntr_fields_1 = 0; cntr_fields_1 < size_fields_1; cntr_fields_1++) {
                                NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->fields[cntr_fields_1], r->type));
                                NDR_CHECK(ndr_pull_spoolss_Field(ndr, NDR_SCALARS, &r->fields[cntr_fields_1]));
                        }
@@ -17334,6 +18001,7 @@ static enum ndr_err_code ndr_push_spoolss_NotifyOption(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_NotifyOption(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyOption *r)
 {
        uint32_t _ptr_types;
+       uint32_t size_types_1 = 0;
        uint32_t cntr_types_1;
        TALLOC_CTX *_mem_save_types_0;
        TALLOC_CTX *_mem_save_types_1;
@@ -17354,13 +18022,14 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyOption(struct ndr_pull *ndr, int
                        _mem_save_types_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->types, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->types));
-                       NDR_PULL_ALLOC_N(ndr, r->types, ndr_get_array_size(ndr, &r->types));
+                       size_types_1 = ndr_get_array_size(ndr, &r->types);
+                       NDR_PULL_ALLOC_N(ndr, r->types, size_types_1);
                        _mem_save_types_1 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->types, 0);
-                       for (cntr_types_1 = 0; cntr_types_1 < r->count; cntr_types_1++) {
+                       for (cntr_types_1 = 0; cntr_types_1 < size_types_1; cntr_types_1++) {
                                NDR_CHECK(ndr_pull_spoolss_NotifyOptionType(ndr, NDR_SCALARS, &r->types[cntr_types_1]));
                        }
-                       for (cntr_types_1 = 0; cntr_types_1 < r->count; cntr_types_1++) {
+                       for (cntr_types_1 = 0; cntr_types_1 < size_types_1; cntr_types_1++) {
                                NDR_CHECK(ndr_pull_spoolss_NotifyOptionType(ndr, NDR_BUFFERS, &r->types[cntr_types_1]));
                        }
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_types_1, 0);
@@ -17418,6 +18087,7 @@ static enum ndr_err_code ndr_push_spoolss_NotifyString(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_NotifyString(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyString *r)
 {
        uint32_t _ptr_string;
+       uint32_t size_string_1 = 0;
        TALLOC_CTX *_mem_save_string_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -17434,7 +18104,8 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyString(struct ndr_pull *ndr, int
                        _mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->string, ndr_get_array_size(ndr, &r->string), sizeof(uint16_t), CH_UTF16));
+                       size_string_1 = ndr_get_array_size(ndr, &r->string);
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->string, size_string_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
                }
                if (r->string) {
@@ -17552,6 +18223,8 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyData(struct ndr_pull *ndr, int n
 {
        int level;
        uint32_t _level;
+       uint32_t size_integer_0 = 0;
+       uint32_t cntr_integer_0;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -17560,8 +18233,8 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyData(struct ndr_pull *ndr, int n
                }
                switch (level) {
                        case 1: {
-                               uint32_t cntr_integer_0;
-                               for (cntr_integer_0 = 0; cntr_integer_0 < 2; cntr_integer_0++) {
+                               size_integer_0 = 2;
+                               for (cntr_integer_0 = 0; cntr_integer_0 < size_integer_0; cntr_integer_0++) {
                                        NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->integer[cntr_integer_0]));
                                }
                        break; }
@@ -17728,6 +18401,7 @@ static enum ndr_err_code ndr_push_spoolss_NotifyInfo(struct ndr_push *ndr, int n
 
 static enum ndr_err_code ndr_pull_spoolss_NotifyInfo(struct ndr_pull *ndr, int ndr_flags, struct spoolss_NotifyInfo *r)
 {
+       uint32_t size_notifies_0 = 0;
        uint32_t cntr_notifies_0;
        TALLOC_CTX *_mem_save_notifies_0;
        if (ndr_flags & NDR_SCALARS) {
@@ -17736,10 +18410,11 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyInfo(struct ndr_pull *ndr, int n
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->flags));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-               NDR_PULL_ALLOC_N(ndr, r->notifies, ndr_get_array_size(ndr, &r->notifies));
+               size_notifies_0 = ndr_get_array_size(ndr, &r->notifies);
+               NDR_PULL_ALLOC_N(ndr, r->notifies, size_notifies_0);
                _mem_save_notifies_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->notifies, 0);
-               for (cntr_notifies_0 = 0; cntr_notifies_0 < r->count; cntr_notifies_0++) {
+               for (cntr_notifies_0 = 0; cntr_notifies_0 < size_notifies_0; cntr_notifies_0++) {
                        NDR_CHECK(ndr_pull_spoolss_Notify(ndr, NDR_SCALARS, &r->notifies[cntr_notifies_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_notifies_0, 0);
@@ -17748,9 +18423,10 @@ static enum ndr_err_code ndr_pull_spoolss_NotifyInfo(struct ndr_pull *ndr, int n
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               size_notifies_0 = ndr_get_array_size(ndr, &r->notifies);
                _mem_save_notifies_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->notifies, 0);
-               for (cntr_notifies_0 = 0; cntr_notifies_0 < r->count; cntr_notifies_0++) {
+               for (cntr_notifies_0 = 0; cntr_notifies_0 < size_notifies_0; cntr_notifies_0++) {
                        NDR_CHECK(ndr_pull_spoolss_Notify(ndr, NDR_BUFFERS, &r->notifies[cntr_notifies_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_notifies_0, 0);
@@ -17814,6 +18490,7 @@ static enum ndr_err_code ndr_pull_spoolss_ReplyPrinterInfo(struct ndr_pull *ndr,
        int level;
        uint32_t _level;
        TALLOC_CTX *_mem_save_info0_0;
+       uint32_t _ptr_info0;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -17822,7 +18499,6 @@ static enum ndr_err_code ndr_pull_spoolss_ReplyPrinterInfo(struct ndr_pull *ndr,
                }
                switch (level) {
                        case 0: {
-                               uint32_t _ptr_info0;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
                                if (_ptr_info0) {
                                        NDR_PULL_ALLOC(ndr, r->info0);
@@ -17929,8 +18605,12 @@ static enum ndr_err_code ndr_push_spoolss_UserLevel1(struct ndr_push *ndr, int n
 static enum ndr_err_code ndr_pull_spoolss_UserLevel1(struct ndr_pull *ndr, int ndr_flags, struct spoolss_UserLevel1 *r)
 {
        uint32_t _ptr_client;
+       uint32_t size_client_1 = 0;
+       uint32_t length_client_1 = 0;
        TALLOC_CTX *_mem_save_client_0;
        uint32_t _ptr_user;
+       uint32_t size_user_1 = 0;
+       uint32_t length_user_1 = 0;
        TALLOC_CTX *_mem_save_user_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -17958,11 +18638,13 @@ static enum ndr_err_code ndr_pull_spoolss_UserLevel1(struct ndr_pull *ndr, int n
                        NDR_PULL_SET_MEM_CTX(ndr, r->client, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->client));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->client));
-                       if (ndr_get_array_length(ndr, &r->client) > ndr_get_array_size(ndr, &r->client)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client), ndr_get_array_length(ndr, &r->client));
+                       size_client_1 = ndr_get_array_size(ndr, &r->client);
+                       length_client_1 = ndr_get_array_length(ndr, &r->client);
+                       if (length_client_1 > size_client_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_client_1, length_client_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_client_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, length_client_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
                }
                if (r->user) {
@@ -17970,11 +18652,13 @@ static enum ndr_err_code ndr_pull_spoolss_UserLevel1(struct ndr_pull *ndr, int n
                        NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-                       if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
+                       size_user_1 = ndr_get_array_size(ndr, &r->user);
+                       length_user_1 = ndr_get_array_length(ndr, &r->user);
+                       if (length_user_1 > size_user_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_user_1, length_user_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_user_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, length_user_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
                }
        }
@@ -18070,8 +18754,12 @@ static enum ndr_err_code ndr_push_spoolss_UserLevel3(struct ndr_push *ndr, int n
 static enum ndr_err_code ndr_pull_spoolss_UserLevel3(struct ndr_pull *ndr, int ndr_flags, struct spoolss_UserLevel3 *r)
 {
        uint32_t _ptr_client;
+       uint32_t size_client_1 = 0;
+       uint32_t length_client_1 = 0;
        TALLOC_CTX *_mem_save_client_0;
        uint32_t _ptr_user;
+       uint32_t size_user_1 = 0;
+       uint32_t length_user_1 = 0;
        TALLOC_CTX *_mem_save_user_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -18102,11 +18790,13 @@ static enum ndr_err_code ndr_pull_spoolss_UserLevel3(struct ndr_pull *ndr, int n
                        NDR_PULL_SET_MEM_CTX(ndr, r->client, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->client));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->client));
-                       if (ndr_get_array_length(ndr, &r->client) > ndr_get_array_size(ndr, &r->client)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client), ndr_get_array_length(ndr, &r->client));
+                       size_client_1 = ndr_get_array_size(ndr, &r->client);
+                       length_client_1 = ndr_get_array_length(ndr, &r->client);
+                       if (length_client_1 > size_client_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_client_1, length_client_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_client_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, length_client_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
                }
                if (r->user) {
@@ -18114,11 +18804,13 @@ static enum ndr_err_code ndr_pull_spoolss_UserLevel3(struct ndr_pull *ndr, int n
                        NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-                       if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
+                       size_user_1 = ndr_get_array_size(ndr, &r->user);
+                       length_user_1 = ndr_get_array_length(ndr, &r->user);
+                       if (length_user_1 > size_user_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_user_1, length_user_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_user_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, length_user_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
                }
        }
@@ -18207,8 +18899,11 @@ static enum ndr_err_code ndr_pull_spoolss_UserLevel(struct ndr_pull *ndr, int nd
        int level;
        uint32_t _level;
        TALLOC_CTX *_mem_save_level1_0;
+       uint32_t _ptr_level1;
        TALLOC_CTX *_mem_save_level2_0;
+       uint32_t _ptr_level2;
        TALLOC_CTX *_mem_save_level3_0;
+       uint32_t _ptr_level3;
        level = ndr_pull_get_switch_value(ndr, r);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
@@ -18217,7 +18912,6 @@ static enum ndr_err_code ndr_pull_spoolss_UserLevel(struct ndr_pull *ndr, int nd
                }
                switch (level) {
                        case 1: {
-                               uint32_t _ptr_level1;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_level1));
                                if (_ptr_level1) {
                                        NDR_PULL_ALLOC(ndr, r->level1);
@@ -18227,7 +18921,6 @@ static enum ndr_err_code ndr_pull_spoolss_UserLevel(struct ndr_pull *ndr, int nd
                        break; }
 
                        case 2: {
-                               uint32_t _ptr_level2;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_level2));
                                if (_ptr_level2) {
                                        NDR_PULL_ALLOC(ndr, r->level2);
@@ -18237,7 +18930,6 @@ static enum ndr_err_code ndr_pull_spoolss_UserLevel(struct ndr_pull *ndr, int nd
                        break; }
 
                        case 3: {
-                               uint32_t _ptr_level3;
                                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_level3));
                                if (_ptr_level3) {
                                        NDR_PULL_ALLOC(ndr, r->level3);
@@ -18403,8 +19095,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));
        }
        if (ndr_flags & NDR_BUFFERS) {
                NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r));
@@ -18412,20 +19109,26 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterEnumValues(struct ndr_push *n
                        uint32_t _flags_save_string = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
                        if (r->value_name) {
-                               NDR_CHECK(ndr_push_relative_ptr2(ndr, r->value_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->value_name));
                                NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->value_name));
+                               NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->value_name));
                        }
                        ndr->flags = _flags_save_string;
                }
-               if (r->data) {
-                       NDR_CHECK(ndr_push_relative_ptr2(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->flags = _flags_save_DATA_BLOB;
                }
        }
        ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset);
@@ -18456,12 +19159,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));
        }
@@ -18482,21 +19190,25 @@ _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));
+               {
+                       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);
+                               ndr->offset = _relative_save_offset;
                        }
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-                       ndr->offset = _relative_save_offset;
+                       ndr->flags = _flags_save_DATA_BLOB;
                }
        }
        ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);
@@ -18518,11 +19230,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--;
 }
 
@@ -18531,6 +19242,103 @@ _PUBLIC_ size_t ndr_size_spoolss_PrinterEnumValues(const struct spoolss_PrinterE
        return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterEnumValues, ic);
 }
 
+static enum ndr_err_code ndr_push_spoolss_KeyNames(struct ndr_push *ndr, int ndr_flags, const union spoolss_KeyNames *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               int level = ndr_push_get_switch_value(ndr, r);
+               switch (level) {
+                       case 0: {
+                       break; }
+
+                       case 1: {
+                       break; }
+
+                       default: {
+                               {
+                                       uint32_t _flags_save_string_array = ndr->flags;
+                                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                                       NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->string_array));
+                                       ndr->flags = _flags_save_string_array;
+                               }
+                       break; }
+
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               int level = ndr_push_get_switch_value(ndr, r);
+               switch (level) {
+                       case 0:
+                       break;
+
+                       case 1:
+                       break;
+
+                       default:
+                       break;
+
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_KeyNames(struct ndr_pull *ndr, int ndr_flags, union spoolss_KeyNames *r)
+{
+       int level;
+       level = ndr_pull_get_switch_value(ndr, r);
+       if (ndr_flags & NDR_SCALARS) {
+               switch (level) {
+                       case 0: {
+                       break; }
+
+                       case 1: {
+                       break; }
+
+                       default: {
+                               {
+                                       uint32_t _flags_save_string_array = ndr->flags;
+                                       ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+                                       NDR_CHECK(ndr_pull_string_array(ndr, NDR_SCALARS, &r->string_array));
+                                       ndr->flags = _flags_save_string_array;
+                               }
+                       break; }
+
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               switch (level) {
+                       case 0:
+                       break;
+
+                       case 1:
+                       break;
+
+                       default:
+                       break;
+
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_KeyNames(struct ndr_print *ndr, const char *name, const union spoolss_KeyNames *r)
+{
+       int level;
+       level = ndr_print_get_switch_value(ndr, r);
+       ndr_print_union(ndr, name, level, "spoolss_KeyNames");
+       switch (level) {
+               case 0:
+               break;
+
+               case 1:
+               break;
+
+               default:
+                       ndr_print_string_array(ndr, "string_array", r->string_array);
+               break;
+
+       }
+}
+
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DeleteDriverFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
 {
        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
@@ -18607,20 +19415,34 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortData1(struct ndr_push *ndr, int
 
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PortData1(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PortData1 *r)
 {
+       uint32_t size_portname_0 = 0;
+       uint32_t size_hostaddress_0 = 0;
+       uint32_t size_snmpcommunity_0 = 0;
+       uint32_t size_queue_0 = 0;
+       uint32_t size_ip_address_0 = 0;
+       uint32_t size_hardware_address_0 = 0;
+       uint32_t size_device_type_0 = 0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->portname, 64, sizeof(uint16_t), CH_UTF16));
+               size_portname_0 = 64;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->portname, size_portname_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version));
                NDR_CHECK(ndr_pull_spoolss_PortProtocol(ndr, NDR_SCALARS, &r->protocol));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->reserved));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hostaddress, 49, sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->snmpcommunity, 33, sizeof(uint16_t), CH_UTF16));
+               size_hostaddress_0 = 49;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hostaddress, size_hostaddress_0, sizeof(uint16_t), CH_UTF16));
+               size_snmpcommunity_0 = 33;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->snmpcommunity, size_snmpcommunity_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dblspool));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->queue, 33, sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->ip_address, 16, sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hardware_address, 13, sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->device_type, 257, sizeof(uint16_t), CH_UTF16));
+               size_queue_0 = 33;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->queue, size_queue_0, sizeof(uint16_t), CH_UTF16));
+               size_ip_address_0 = 16;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->ip_address, size_ip_address_0, sizeof(uint16_t), CH_UTF16));
+               size_hardware_address_0 = 13;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hardware_address, size_hardware_address_0, sizeof(uint16_t), CH_UTF16));
+               size_device_type_0 = 257;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->device_type, size_device_type_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->port_number));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->snmp_enabled));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->snmp_dev_index));
@@ -18678,18 +19500,28 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortData2(struct ndr_push *ndr, int
 
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PortData2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PortData2 *r)
 {
+       uint32_t size_portname_0 = 0;
+       uint32_t size_hostaddress_0 = 0;
+       uint32_t size_snmpcommunity_0 = 0;
+       uint32_t size_queue_0 = 0;
+       uint32_t size_device_type_0 = 0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->portname, 64, sizeof(uint16_t), CH_UTF16));
+               size_portname_0 = 64;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->portname, size_portname_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version));
                NDR_CHECK(ndr_pull_spoolss_PortProtocol(ndr, NDR_SCALARS, &r->protocol));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->reserved));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hostaddress, 128, sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->snmpcommunity, 33, sizeof(uint16_t), CH_UTF16));
+               size_hostaddress_0 = 128;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->hostaddress, size_hostaddress_0, sizeof(uint16_t), CH_UTF16));
+               size_snmpcommunity_0 = 33;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->snmpcommunity, size_snmpcommunity_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dblspool));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->queue, 33, sizeof(uint16_t), CH_UTF16));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->device_type, 257, sizeof(uint16_t), CH_UTF16));
+               size_queue_0 = 33;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->queue, size_queue_0, sizeof(uint16_t), CH_UTF16));
+               size_device_type_0 = 257;
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->device_type, size_device_type_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->port_number));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->snmp_enabled));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->snmp_dev_index));
@@ -18829,6 +19661,8 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_EnumPrinters(struct ndr_push *ndr,
 _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrinters(struct ndr_pull *ndr, int flags, struct _spoolss_EnumPrinters *r)
 {
        uint32_t _ptr_server;
+       uint32_t size_server_1 = 0;
+       uint32_t length_server_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_server_0;
@@ -18851,11 +19685,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrinters(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-                       if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
+                       size_server_1 = ndr_get_array_size(ndr, &r->in.server);
+                       length_server_1 = ndr_get_array_length(ndr, &r->in.server);
+                       if (length_server_1 > size_server_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_1, length_server_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, length_server_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -18930,6 +19766,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumPrinters(struct ndr_push *ndr,
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrinters(struct ndr_pull *ndr, int flags, struct __spoolss_EnumPrinters *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -18939,14 +19776,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrinters(struct ndr_pull *ndr,
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
                        NDR_CHECK(ndr_pull_spoolss_PrinterInfo(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_PrinterInfo(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -19051,7 +19889,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_OpenPrinter(struct ndr_push *ndr, in
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_OpenPrinter(struct ndr_pull *ndr, int flags, struct spoolss_OpenPrinter *r)
 {
        uint32_t _ptr_printername;
+       uint32_t size_printername_1 = 0;
+       uint32_t length_printername_1 = 0;
        uint32_t _ptr_datatype;
+       uint32_t size_datatype_1 = 0;
+       uint32_t length_datatype_1 = 0;
        TALLOC_CTX *_mem_save_printername_0;
        TALLOC_CTX *_mem_save_datatype_0;
        TALLOC_CTX *_mem_save_handle_0;
@@ -19069,11 +19911,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_OpenPrinter(struct ndr_pull *ndr, in
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.printername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.printername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.printername));
-                       if (ndr_get_array_length(ndr, &r->in.printername) > ndr_get_array_size(ndr, &r->in.printername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.printername), ndr_get_array_length(ndr, &r->in.printername));
+                       size_printername_1 = ndr_get_array_size(ndr, &r->in.printername);
+                       length_printername_1 = ndr_get_array_length(ndr, &r->in.printername);
+                       if (length_printername_1 > size_printername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printername_1, length_printername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.printername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.printername, ndr_get_array_length(ndr, &r->in.printername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.printername, length_printername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printername_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_datatype));
@@ -19087,11 +19931,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_OpenPrinter(struct ndr_pull *ndr, in
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.datatype, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.datatype));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.datatype));
-                       if (ndr_get_array_length(ndr, &r->in.datatype) > ndr_get_array_size(ndr, &r->in.datatype)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.datatype), ndr_get_array_length(ndr, &r->in.datatype));
+                       size_datatype_1 = ndr_get_array_size(ndr, &r->in.datatype);
+                       length_datatype_1 = ndr_get_array_length(ndr, &r->in.datatype);
+                       if (length_datatype_1 > size_datatype_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_datatype_1, length_datatype_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.datatype), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.datatype, ndr_get_array_length(ndr, &r->in.datatype), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_datatype_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.datatype, length_datatype_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_datatype_0, 0);
                }
                NDR_CHECK(ndr_pull_spoolss_DevmodeContainer(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.devmode_ctr));
@@ -19512,6 +20358,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumJobs(struct ndr_push *ndr, int
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumJobs(struct ndr_pull *ndr, int flags, struct __spoolss_EnumJobs *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -19521,14 +20368,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumJobs(struct ndr_pull *ndr, int
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
                        NDR_CHECK(ndr_pull_spoolss_JobInfo(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_JobInfo(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -19973,6 +20821,8 @@ static enum ndr_err_code ndr_push_spoolss_AddPrinterDriver(struct ndr_push *ndr,
 static enum ndr_err_code ndr_pull_spoolss_AddPrinterDriver(struct ndr_pull *ndr, int flags, struct spoolss_AddPrinterDriver *r)
 {
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        TALLOC_CTX *_mem_save_servername_0;
        TALLOC_CTX *_mem_save_info_ctr_0;
        if (flags & NDR_IN) {
@@ -19987,11 +20837,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddPrinterDriver(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-                       if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->in.servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->in.servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -20084,7 +20936,11 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_EnumPrinterDrivers(struct ndr_push
 _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrinterDrivers(struct ndr_pull *ndr, int flags, struct _spoolss_EnumPrinterDrivers *r)
 {
        uint32_t _ptr_server;
+       uint32_t size_server_1 = 0;
+       uint32_t length_server_1 = 0;
        uint32_t _ptr_environment;
+       uint32_t size_environment_1 = 0;
+       uint32_t length_environment_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_server_0;
@@ -20107,11 +20963,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrinterDrivers(struct ndr_pull
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-                       if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
+                       size_server_1 = ndr_get_array_size(ndr, &r->in.server);
+                       length_server_1 = ndr_get_array_length(ndr, &r->in.server);
+                       if (length_server_1 > size_server_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_1, length_server_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, length_server_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_environment));
@@ -20125,11 +20983,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrinterDrivers(struct ndr_pull
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.environment, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.environment));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.environment));
-                       if (ndr_get_array_length(ndr, &r->in.environment) > ndr_get_array_size(ndr, &r->in.environment)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.environment), ndr_get_array_length(ndr, &r->in.environment));
+                       size_environment_1 = ndr_get_array_size(ndr, &r->in.environment);
+                       length_environment_1 = ndr_get_array_length(ndr, &r->in.environment);
+                       if (length_environment_1 > size_environment_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_environment_1, length_environment_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.environment), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.environment, ndr_get_array_length(ndr, &r->in.environment), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_environment_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.environment, length_environment_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_environment_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -20204,6 +21064,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumPrinterDrivers(struct ndr_push
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrinterDrivers(struct ndr_pull *ndr, int flags, struct __spoolss_EnumPrinterDrivers *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -20213,14 +21074,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrinterDrivers(struct ndr_pull
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
                        NDR_CHECK(ndr_pull_spoolss_DriverInfo(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_DriverInfo(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -20385,7 +21247,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_GetPrinterDriverDirectory(struct ndr
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_GetPrinterDriverDirectory(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterDriverDirectory *r)
 {
        uint32_t _ptr_server;
+       uint32_t size_server_1 = 0;
+       uint32_t length_server_1 = 0;
        uint32_t _ptr_environment;
+       uint32_t size_environment_1 = 0;
+       uint32_t length_environment_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_server_0;
@@ -20407,11 +21273,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_GetPrinterDriverDirectory(struct ndr
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-                       if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
+                       size_server_1 = ndr_get_array_size(ndr, &r->in.server);
+                       length_server_1 = ndr_get_array_length(ndr, &r->in.server);
+                       if (length_server_1 > size_server_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_1, length_server_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, length_server_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_environment));
@@ -20425,11 +21293,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_GetPrinterDriverDirectory(struct ndr
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.environment, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.environment));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.environment));
-                       if (ndr_get_array_length(ndr, &r->in.environment) > ndr_get_array_size(ndr, &r->in.environment)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.environment), ndr_get_array_length(ndr, &r->in.environment));
+                       size_environment_1 = ndr_get_array_size(ndr, &r->in.environment);
+                       length_environment_1 = ndr_get_array_length(ndr, &r->in.environment);
+                       if (length_environment_1 > size_environment_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_environment_1, length_environment_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.environment), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.environment, ndr_get_array_length(ndr, &r->in.environment), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_environment_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.environment, length_environment_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_environment_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -20560,6 +21430,12 @@ static enum ndr_err_code ndr_push_spoolss_DeletePrinterDriver(struct ndr_push *n
 static enum ndr_err_code ndr_pull_spoolss_DeletePrinterDriver(struct ndr_pull *ndr, int flags, struct spoolss_DeletePrinterDriver *r)
 {
        uint32_t _ptr_server;
+       uint32_t size_server_1 = 0;
+       uint32_t length_server_1 = 0;
+       uint32_t size_architecture_0 = 0;
+       uint32_t length_architecture_0 = 0;
+       uint32_t size_driver_0 = 0;
+       uint32_t length_driver_0 = 0;
        TALLOC_CTX *_mem_save_server_0;
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
@@ -20573,27 +21449,33 @@ static enum ndr_err_code ndr_pull_spoolss_DeletePrinterDriver(struct ndr_pull *n
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-                       if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
+                       size_server_1 = ndr_get_array_size(ndr, &r->in.server);
+                       length_server_1 = ndr_get_array_length(ndr, &r->in.server);
+                       if (length_server_1 > size_server_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_1, length_server_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, length_server_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
                }
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.architecture));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.architecture));
-               if (ndr_get_array_length(ndr, &r->in.architecture) > ndr_get_array_size(ndr, &r->in.architecture)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.architecture), ndr_get_array_length(ndr, &r->in.architecture));
+               size_architecture_0 = ndr_get_array_size(ndr, &r->in.architecture);
+               length_architecture_0 = ndr_get_array_length(ndr, &r->in.architecture);
+               if (length_architecture_0 > size_architecture_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_0, length_architecture_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, length_architecture_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.driver));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.driver));
-               if (ndr_get_array_length(ndr, &r->in.driver) > ndr_get_array_size(ndr, &r->in.driver)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.driver), ndr_get_array_length(ndr, &r->in.driver));
+               size_driver_0 = ndr_get_array_size(ndr, &r->in.driver);
+               length_driver_0 = ndr_get_array_length(ndr, &r->in.driver);
+               if (length_driver_0 > size_driver_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_0, length_driver_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.driver), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.driver, ndr_get_array_length(ndr, &r->in.driver), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.driver, length_driver_0, sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -20662,6 +21544,14 @@ static enum ndr_err_code ndr_push_spoolss_AddPrintProcessor(struct ndr_push *ndr
 static enum ndr_err_code ndr_pull_spoolss_AddPrintProcessor(struct ndr_pull *ndr, int flags, struct spoolss_AddPrintProcessor *r)
 {
        uint32_t _ptr_server;
+       uint32_t size_server_1 = 0;
+       uint32_t length_server_1 = 0;
+       uint32_t size_architecture_0 = 0;
+       uint32_t length_architecture_0 = 0;
+       uint32_t size_path_name_0 = 0;
+       uint32_t length_path_name_0 = 0;
+       uint32_t size_print_processor_name_0 = 0;
+       uint32_t length_print_processor_name_0 = 0;
        TALLOC_CTX *_mem_save_server_0;
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
@@ -20675,34 +21565,42 @@ static enum ndr_err_code ndr_pull_spoolss_AddPrintProcessor(struct ndr_pull *ndr
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-                       if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
+                       size_server_1 = ndr_get_array_size(ndr, &r->in.server);
+                       length_server_1 = ndr_get_array_length(ndr, &r->in.server);
+                       if (length_server_1 > size_server_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_1, length_server_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, length_server_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
                }
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.architecture));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.architecture));
-               if (ndr_get_array_length(ndr, &r->in.architecture) > ndr_get_array_size(ndr, &r->in.architecture)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.architecture), ndr_get_array_length(ndr, &r->in.architecture));
+               size_architecture_0 = ndr_get_array_size(ndr, &r->in.architecture);
+               length_architecture_0 = ndr_get_array_length(ndr, &r->in.architecture);
+               if (length_architecture_0 > size_architecture_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_0, length_architecture_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, length_architecture_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path_name));
-               if (ndr_get_array_length(ndr, &r->in.path_name) > ndr_get_array_size(ndr, &r->in.path_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.path_name), ndr_get_array_length(ndr, &r->in.path_name));
+               size_path_name_0 = ndr_get_array_size(ndr, &r->in.path_name);
+               length_path_name_0 = ndr_get_array_length(ndr, &r->in.path_name);
+               if (length_path_name_0 > size_path_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_path_name_0, length_path_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path_name, ndr_get_array_length(ndr, &r->in.path_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_path_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path_name, length_path_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.print_processor_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.print_processor_name));
-               if (ndr_get_array_length(ndr, &r->in.print_processor_name) > ndr_get_array_size(ndr, &r->in.print_processor_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.print_processor_name), ndr_get_array_length(ndr, &r->in.print_processor_name));
+               size_print_processor_name_0 = ndr_get_array_size(ndr, &r->in.print_processor_name);
+               length_print_processor_name_0 = ndr_get_array_length(ndr, &r->in.print_processor_name);
+               if (length_print_processor_name_0 > size_print_processor_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_print_processor_name_0, length_print_processor_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.print_processor_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.print_processor_name, ndr_get_array_length(ndr, &r->in.print_processor_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_print_processor_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.print_processor_name, length_print_processor_name_0, sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -20785,7 +21683,11 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_EnumPrintProcessors(struct ndr_push
 _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrintProcessors(struct ndr_pull *ndr, int flags, struct _spoolss_EnumPrintProcessors *r)
 {
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        uint32_t _ptr_environment;
+       uint32_t size_environment_1 = 0;
+       uint32_t length_environment_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_servername_0;
@@ -20808,11 +21710,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrintProcessors(struct ndr_pull
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-                       if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->in.servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->in.servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_environment));
@@ -20826,11 +21730,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrintProcessors(struct ndr_pull
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.environment, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.environment));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.environment));
-                       if (ndr_get_array_length(ndr, &r->in.environment) > ndr_get_array_size(ndr, &r->in.environment)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.environment), ndr_get_array_length(ndr, &r->in.environment));
+                       size_environment_1 = ndr_get_array_size(ndr, &r->in.environment);
+                       length_environment_1 = ndr_get_array_length(ndr, &r->in.environment);
+                       if (length_environment_1 > size_environment_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_environment_1, length_environment_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.environment), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.environment, ndr_get_array_length(ndr, &r->in.environment), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_environment_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.environment, length_environment_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_environment_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -20905,6 +21811,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumPrintProcessors(struct ndr_pus
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrintProcessors(struct ndr_pull *ndr, int flags, struct __spoolss_EnumPrintProcessors *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -20914,14 +21821,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrintProcessors(struct ndr_pul
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
                        NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -21045,7 +21953,11 @@ static enum ndr_err_code ndr_push_spoolss_GetPrintProcessorDirectory(struct ndr_
 static enum ndr_err_code ndr_pull_spoolss_GetPrintProcessorDirectory(struct ndr_pull *ndr, int flags, struct spoolss_GetPrintProcessorDirectory *r)
 {
        uint32_t _ptr_server;
+       uint32_t size_server_1 = 0;
+       uint32_t length_server_1 = 0;
        uint32_t _ptr_environment;
+       uint32_t size_environment_1 = 0;
+       uint32_t length_environment_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_server_0;
@@ -21067,11 +21979,13 @@ static enum ndr_err_code ndr_pull_spoolss_GetPrintProcessorDirectory(struct ndr_
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-                       if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
+                       size_server_1 = ndr_get_array_size(ndr, &r->in.server);
+                       length_server_1 = ndr_get_array_length(ndr, &r->in.server);
+                       if (length_server_1 > size_server_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_1, length_server_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, length_server_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_environment));
@@ -21085,11 +21999,13 @@ static enum ndr_err_code ndr_pull_spoolss_GetPrintProcessorDirectory(struct ndr_
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.environment, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.environment));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.environment));
-                       if (ndr_get_array_length(ndr, &r->in.environment) > ndr_get_array_size(ndr, &r->in.environment)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.environment), ndr_get_array_length(ndr, &r->in.environment));
+                       size_environment_1 = ndr_get_array_size(ndr, &r->in.environment);
+                       length_environment_1 = ndr_get_array_length(ndr, &r->in.environment);
+                       if (length_environment_1 > size_environment_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_environment_1, length_environment_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.environment), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.environment, ndr_get_array_length(ndr, &r->in.environment), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_environment_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.environment, length_environment_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_environment_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -21558,6 +22474,7 @@ static enum ndr_err_code ndr_push_spoolss_ReadPrinter(struct ndr_push *ndr, int
 
 static enum ndr_err_code ndr_pull_spoolss_ReadPrinter(struct ndr_pull *ndr, int flags, struct spoolss_ReadPrinter *r)
 {
+       uint32_t size_data_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save__data_size_0;
        if (flags & NDR_IN) {
@@ -21578,10 +22495,11 @@ static enum ndr_err_code ndr_pull_spoolss_ReadPrinter(struct ndr_pull *ndr, int
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_array_size(ndr, &r->out.data));
+               size_data_1 = ndr_get_array_size(ndr, &r->out.data);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC_N(ndr, r->out.data, ndr_get_array_size(ndr, &r->out.data));
+                       NDR_PULL_ALLOC_N(ndr, r->out.data, size_data_1);
                }
-               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, ndr_get_array_size(ndr, &r->out.data)));
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, size_data_1));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out._data_size);
                }
@@ -21721,6 +22639,7 @@ static enum ndr_err_code ndr_push_spoolss_AddJob(struct ndr_push *ndr, int flags
 static enum ndr_err_code ndr_pull_spoolss_AddJob(struct ndr_pull *ndr, int flags, struct spoolss_AddJob *r)
 {
        uint32_t _ptr_buffer;
+       uint32_t size_buffer_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_buffer_0;
        TALLOC_CTX *_mem_save_needed_0;
@@ -21745,8 +22664,9 @@ static enum ndr_err_code ndr_pull_spoolss_AddJob(struct ndr_pull *ndr, int flags
                        _mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.buffer, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.buffer));
-                       NDR_PULL_ALLOC_N(ndr, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer));
-                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer)));
+                       size_buffer_1 = ndr_get_array_size(ndr, &r->in.buffer);
+                       NDR_PULL_ALLOC_N(ndr, r->in.buffer, size_buffer_1);
+                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, size_buffer_1));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
@@ -21767,8 +22687,9 @@ static enum ndr_err_code ndr_pull_spoolss_AddJob(struct ndr_pull *ndr, int flags
                        _mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->out.buffer, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->out.buffer));
-                       NDR_PULL_ALLOC_N(ndr, r->out.buffer, ndr_get_array_size(ndr, &r->out.buffer));
-                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.buffer, ndr_get_array_size(ndr, &r->out.buffer)));
+                       size_buffer_1 = ndr_get_array_size(ndr, &r->out.buffer);
+                       NDR_PULL_ALLOC_N(ndr, r->out.buffer, size_buffer_1);
+                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.buffer, size_buffer_1));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
                }
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -21889,7 +22810,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) {
@@ -21910,7 +22831,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_uint32(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");
                }
@@ -21920,11 +22842,13 @@ _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)
 {
+       uint32_t size_value_name_0 = 0;
+       uint32_t length_value_name_0 = 0;
+       uint32_t size_data_1 = 0;
        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);
@@ -21938,16 +22862,18 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.value_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.value_name));
-               if (ndr_get_array_length(ndr, &r->in.value_name) > ndr_get_array_size(ndr, &r->in.value_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.value_name), ndr_get_array_length(ndr, &r->in.value_name));
+               size_value_name_0 = ndr_get_array_size(ndr, &r->in.value_name);
+               length_value_name_0 = ndr_get_array_length(ndr, &r->in.value_name);
+               if (length_value_name_0 > size_value_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_value_name_0, length_value_name_0);
                }
-               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_check_string_terminator(ndr, length_value_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, length_value_name_0, sizeof(uint16_t), CH_UTF16));
                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);
        }
@@ -21959,13 +22885,12 @@ _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));
+               size_data_1 = ndr_get_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, size_data_1);
                }
-               _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, size_data_1));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.needed);
                }
@@ -21974,44 +22899,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;
 }
@@ -22043,8 +22933,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++;
@@ -22056,7 +22945,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) {
@@ -22068,8 +22957,12 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterData(struct ndr_push *ndr
                NDR_CHECK(ndr_push_uint32(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_uint32(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));
@@ -22077,23 +22970,11 @@ _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)
 {
+       uint32_t size_value_name_0 = 0;
+       uint32_t length_value_name_0 = 0;
+       uint32_t size_data_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -22105,20 +22986,24 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterData(struct ndr_pull *ndr, i
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.value_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.value_name));
-               if (ndr_get_array_length(ndr, &r->in.value_name) > ndr_get_array_size(ndr, &r->in.value_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.value_name), ndr_get_array_length(ndr, &r->in.value_name));
+               size_value_name_0 = ndr_get_array_size(ndr, &r->in.value_name);
+               length_value_name_0 = ndr_get_array_length(ndr, &r->in.value_name);
+               if (length_value_name_0 > size_value_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_value_name_0, length_value_name_0);
                }
-               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_check_string_terminator(ndr, length_value_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, length_value_name_0, 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));
+               size_data_1 = ndr_get_array_size(ndr, &r->in.data);
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC_N(ndr, r->in.data, size_data_1);
+               }
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.data, size_data_1));
+               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));
@@ -22142,9 +23027,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) {
@@ -22359,6 +23246,8 @@ static enum ndr_err_code ndr_push_spoolss_DeleteForm(struct ndr_push *ndr, int f
 
 static enum ndr_err_code ndr_pull_spoolss_DeleteForm(struct ndr_pull *ndr, int flags, struct spoolss_DeleteForm *r)
 {
+       uint32_t size_form_name_0 = 0;
+       uint32_t length_form_name_0 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -22370,11 +23259,13 @@ static enum ndr_err_code ndr_pull_spoolss_DeleteForm(struct ndr_pull *ndr, int f
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.form_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.form_name));
-               if (ndr_get_array_length(ndr, &r->in.form_name) > ndr_get_array_size(ndr, &r->in.form_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.form_name), ndr_get_array_length(ndr, &r->in.form_name));
+               size_form_name_0 = ndr_get_array_size(ndr, &r->in.form_name);
+               length_form_name_0 = ndr_get_array_length(ndr, &r->in.form_name);
+               if (length_form_name_0 > size_form_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_form_name_0, length_form_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.form_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.form_name, ndr_get_array_length(ndr, &r->in.form_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_form_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.form_name, length_form_name_0, sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -22448,6 +23339,8 @@ static enum ndr_err_code ndr_push_spoolss_GetForm(struct ndr_push *ndr, int flag
 
 static enum ndr_err_code ndr_pull_spoolss_GetForm(struct ndr_pull *ndr, int flags, struct spoolss_GetForm *r)
 {
+       uint32_t size_form_name_0 = 0;
+       uint32_t length_form_name_0 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_handle_0;
@@ -22466,11 +23359,13 @@ static enum ndr_err_code ndr_pull_spoolss_GetForm(struct ndr_pull *ndr, int flag
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.form_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.form_name));
-               if (ndr_get_array_length(ndr, &r->in.form_name) > ndr_get_array_size(ndr, &r->in.form_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.form_name), ndr_get_array_length(ndr, &r->in.form_name));
+               size_form_name_0 = ndr_get_array_size(ndr, &r->in.form_name);
+               length_form_name_0 = ndr_get_array_length(ndr, &r->in.form_name);
+               if (length_form_name_0 > size_form_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_form_name_0, length_form_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.form_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.form_name, ndr_get_array_length(ndr, &r->in.form_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_form_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.form_name, length_form_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_buffer));
                if (_ptr_buffer) {
@@ -22587,6 +23482,8 @@ static enum ndr_err_code ndr_push_spoolss_SetForm(struct ndr_push *ndr, int flag
 
 static enum ndr_err_code ndr_pull_spoolss_SetForm(struct ndr_pull *ndr, int flags, struct spoolss_SetForm *r)
 {
+       uint32_t size_form_name_0 = 0;
+       uint32_t length_form_name_0 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -22598,11 +23495,13 @@ static enum ndr_err_code ndr_pull_spoolss_SetForm(struct ndr_pull *ndr, int flag
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.form_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.form_name));
-               if (ndr_get_array_length(ndr, &r->in.form_name) > ndr_get_array_size(ndr, &r->in.form_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.form_name), ndr_get_array_length(ndr, &r->in.form_name));
+               size_form_name_0 = ndr_get_array_size(ndr, &r->in.form_name);
+               length_form_name_0 = ndr_get_array_length(ndr, &r->in.form_name);
+               if (length_form_name_0 > size_form_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_form_name_0, length_form_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.form_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.form_name, ndr_get_array_length(ndr, &r->in.form_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_form_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.form_name, length_form_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
                NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.info, r->in.level));
                NDR_CHECK(ndr_pull_spoolss_AddFormInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.info));
@@ -22765,6 +23664,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumForms(struct ndr_push *ndr, in
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumForms(struct ndr_pull *ndr, int flags, struct __spoolss_EnumForms *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -22774,14 +23674,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumForms(struct ndr_pull *ndr, in
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
                        NDR_CHECK(ndr_pull_spoolss_FormInfo(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_FormInfo(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -22888,6 +23789,8 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_EnumPorts(struct ndr_push *ndr, int
 _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPorts(struct ndr_pull *ndr, int flags, struct _spoolss_EnumPorts *r)
 {
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_servername_0;
@@ -22909,11 +23812,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPorts(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-                       if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->in.servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->in.servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -22988,6 +23893,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumPorts(struct ndr_push *ndr, in
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPorts(struct ndr_pull *ndr, int flags, struct __spoolss_EnumPorts *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -22997,14 +23903,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPorts(struct ndr_pull *ndr, in
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
                        NDR_CHECK(ndr_pull_spoolss_PortInfo(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_PortInfo(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -23113,6 +24020,8 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_EnumMonitors(struct ndr_push *ndr,
 _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumMonitors(struct ndr_pull *ndr, int flags, struct _spoolss_EnumMonitors *r)
 {
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_servername_0;
@@ -23134,11 +24043,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumMonitors(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-                       if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->in.servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->in.servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -23213,6 +24124,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumMonitors(struct ndr_push *ndr,
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumMonitors(struct ndr_pull *ndr, int flags, struct __spoolss_EnumMonitors *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -23222,14 +24134,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumMonitors(struct ndr_pull *ndr,
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
                        NDR_CHECK(ndr_pull_spoolss_MonitorInfo(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_MonitorInfo(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -23325,6 +24238,10 @@ static enum ndr_err_code ndr_push_spoolss_AddPort(struct ndr_push *ndr, int flag
 static enum ndr_err_code ndr_pull_spoolss_AddPort(struct ndr_pull *ndr, int flags, struct spoolss_AddPort *r)
 {
        uint32_t _ptr_server_name;
+       uint32_t size_server_name_1 = 0;
+       uint32_t length_server_name_1 = 0;
+       uint32_t size_monitor_name_0 = 0;
+       uint32_t length_monitor_name_0 = 0;
        TALLOC_CTX *_mem_save_server_name_0;
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
@@ -23338,21 +24255,25 @@ static enum ndr_err_code ndr_pull_spoolss_AddPort(struct ndr_pull *ndr, int flag
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-                       if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
+                       size_server_name_1 = ndr_get_array_size(ndr, &r->in.server_name);
+                       length_server_name_1 = ndr_get_array_length(ndr, &r->in.server_name);
+                       if (length_server_name_1 > size_server_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_name_1, length_server_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, length_server_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown));
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.monitor_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.monitor_name));
-               if (ndr_get_array_length(ndr, &r->in.monitor_name) > ndr_get_array_size(ndr, &r->in.monitor_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.monitor_name), ndr_get_array_length(ndr, &r->in.monitor_name));
+               size_monitor_name_0 = ndr_get_array_size(ndr, &r->in.monitor_name);
+               length_monitor_name_0 = ndr_get_array_length(ndr, &r->in.monitor_name);
+               if (length_monitor_name_0 > size_monitor_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_monitor_name_0, length_monitor_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.monitor_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.monitor_name, ndr_get_array_length(ndr, &r->in.monitor_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_monitor_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.monitor_name, length_monitor_name_0, sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -23967,7 +24888,11 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_EnumPrintProcDataTypes(struct ndr_p
 _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrintProcDataTypes(struct ndr_pull *ndr, int flags, struct _spoolss_EnumPrintProcDataTypes *r)
 {
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        uint32_t _ptr_print_processor_name;
+       uint32_t size_print_processor_name_1 = 0;
+       uint32_t length_print_processor_name_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_servername_0;
@@ -23990,11 +24915,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrintProcDataTypes(struct ndr_p
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-                       if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->in.servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->in.servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_print_processor_name));
@@ -24008,11 +24935,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrintProcDataTypes(struct ndr_p
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.print_processor_name, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.print_processor_name));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.print_processor_name));
-                       if (ndr_get_array_length(ndr, &r->in.print_processor_name) > ndr_get_array_size(ndr, &r->in.print_processor_name)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.print_processor_name), ndr_get_array_length(ndr, &r->in.print_processor_name));
+                       size_print_processor_name_1 = ndr_get_array_size(ndr, &r->in.print_processor_name);
+                       length_print_processor_name_1 = ndr_get_array_length(ndr, &r->in.print_processor_name);
+                       if (length_print_processor_name_1 > size_print_processor_name_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_print_processor_name_1, length_print_processor_name_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.print_processor_name), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.print_processor_name, ndr_get_array_length(ndr, &r->in.print_processor_name), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_print_processor_name_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.print_processor_name, length_print_processor_name_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_print_processor_name_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -24087,6 +25016,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumPrintProcDataTypes(struct ndr_
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrintProcDataTypes(struct ndr_pull *ndr, int flags, struct __spoolss_EnumPrintProcDataTypes *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -24096,14 +25026,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrintProcDataTypes(struct ndr_
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info[cntr_info_0], r->in.level));
                        NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -24208,6 +25139,8 @@ static enum ndr_err_code ndr_push_spoolss_ResetPrinter(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_ResetPrinter(struct ndr_pull *ndr, int flags, struct spoolss_ResetPrinter *r)
 {
        uint32_t _ptr_data_type;
+       uint32_t size_data_type_1 = 0;
+       uint32_t length_data_type_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_data_type_0;
        TALLOC_CTX *_mem_save_devmode_ctr_0;
@@ -24230,11 +25163,13 @@ static enum ndr_err_code ndr_pull_spoolss_ResetPrinter(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.data_type, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.data_type));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.data_type));
-                       if (ndr_get_array_length(ndr, &r->in.data_type) > ndr_get_array_size(ndr, &r->in.data_type)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.data_type), ndr_get_array_length(ndr, &r->in.data_type));
+                       size_data_type_1 = ndr_get_array_size(ndr, &r->in.data_type);
+                       length_data_type_1 = ndr_get_array_length(ndr, &r->in.data_type);
+                       if (length_data_type_1 > size_data_type_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_data_type_1, length_data_type_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.data_type), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.data_type, ndr_get_array_length(ndr, &r->in.data_type), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_data_type_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.data_type, length_data_type_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_type_0, 0);
                }
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -24340,6 +25275,8 @@ static enum ndr_err_code ndr_push_spoolss_GetPrinterDriver2(struct ndr_push *ndr
 static enum ndr_err_code ndr_pull_spoolss_GetPrinterDriver2(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterDriver2 *r)
 {
        uint32_t _ptr_architecture;
+       uint32_t size_architecture_1 = 0;
+       uint32_t length_architecture_1 = 0;
        uint32_t _ptr_buffer;
        uint32_t _ptr_info;
        TALLOC_CTX *_mem_save_handle_0;
@@ -24370,11 +25307,13 @@ static enum ndr_err_code ndr_pull_spoolss_GetPrinterDriver2(struct ndr_pull *ndr
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.architecture, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.architecture));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.architecture));
-                       if (ndr_get_array_length(ndr, &r->in.architecture) > ndr_get_array_size(ndr, &r->in.architecture)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.architecture), ndr_get_array_length(ndr, &r->in.architecture));
+                       size_architecture_1 = ndr_get_array_size(ndr, &r->in.architecture);
+                       length_architecture_1 = ndr_get_array_length(ndr, &r->in.architecture);
+                       if (length_architecture_1 > size_architecture_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_1, length_architecture_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, length_architecture_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_architecture_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
@@ -24713,7 +25652,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_ReplyOpenPrinter(struct ndr_push *nd
 
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_ReplyOpenPrinter(struct ndr_pull *ndr, int flags, struct spoolss_ReplyOpenPrinter *r)
 {
+       uint32_t size_server_name_0 = 0;
+       uint32_t length_server_name_0 = 0;
        uint32_t _ptr_buffer;
+       uint32_t size_buffer_1 = 0;
        TALLOC_CTX *_mem_save_buffer_0;
        TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
@@ -24721,11 +25663,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_ReplyOpenPrinter(struct ndr_pull *nd
 
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-               if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
+               size_server_name_0 = ndr_get_array_size(ndr, &r->in.server_name);
+               length_server_name_0 = ndr_get_array_length(ndr, &r->in.server_name);
+               if (length_server_name_0 > size_server_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_name_0, length_server_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_server_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, length_server_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.printer_local));
                NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.bufsize));
@@ -24742,8 +25686,9 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_ReplyOpenPrinter(struct ndr_pull *nd
                        _mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.buffer, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.buffer));
-                       NDR_PULL_ALLOC_N(ndr, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer));
-                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer)));
+                       size_buffer_1 = ndr_get_array_size(ndr, &r->in.buffer);
+                       NDR_PULL_ALLOC_N(ndr, r->in.buffer, size_buffer_1);
+                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, size_buffer_1));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
                }
                NDR_PULL_ALLOC(ndr, r->out.handle);
@@ -24824,6 +25769,7 @@ static enum ndr_err_code ndr_push_spoolss_RouterReplyPrinter(struct ndr_push *nd
 static enum ndr_err_code ndr_pull_spoolss_RouterReplyPrinter(struct ndr_pull *ndr, int flags, struct spoolss_RouterReplyPrinter *r)
 {
        uint32_t _ptr_buffer;
+       uint32_t size_buffer_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_buffer_0;
        if (flags & NDR_IN) {
@@ -24849,8 +25795,9 @@ static enum ndr_err_code ndr_pull_spoolss_RouterReplyPrinter(struct ndr_pull *nd
                        _mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.buffer, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.buffer));
-                       NDR_PULL_ALLOC_N(ndr, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer));
-                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer)));
+                       size_buffer_1 = ndr_get_array_size(ndr, &r->in.buffer);
+                       NDR_PULL_ALLOC_N(ndr, r->in.buffer, size_buffer_1);
+                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, size_buffer_1));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
                }
                if (r->in.buffer) {
@@ -25167,6 +26114,8 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_RemoteFindFirstPrinterChangeNotifyEx
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct ndr_pull *ndr, int flags, struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r)
 {
        uint32_t _ptr_local_machine;
+       uint32_t size_local_machine_1 = 0;
+       uint32_t length_local_machine_1 = 0;
        uint32_t _ptr_notify_options;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_local_machine_0;
@@ -25192,11 +26141,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_RemoteFindFirstPrinterChangeNotifyEx
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.local_machine, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.local_machine));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.local_machine));
-                       if (ndr_get_array_length(ndr, &r->in.local_machine) > ndr_get_array_size(ndr, &r->in.local_machine)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.local_machine), ndr_get_array_length(ndr, &r->in.local_machine));
+                       size_local_machine_1 = ndr_get_array_size(ndr, &r->in.local_machine);
+                       length_local_machine_1 = ndr_get_array_length(ndr, &r->in.local_machine);
+                       if (length_local_machine_1 > size_local_machine_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_local_machine_1, length_local_machine_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.local_machine), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.local_machine, ndr_get_array_length(ndr, &r->in.local_machine), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_local_machine_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.local_machine, length_local_machine_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_local_machine_0, 0);
                }
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.printer_local));
@@ -25553,7 +26504,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_OpenPrinterEx(struct ndr_push *ndr,
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_OpenPrinterEx(struct ndr_pull *ndr, int flags, struct spoolss_OpenPrinterEx *r)
 {
        uint32_t _ptr_printername;
+       uint32_t size_printername_1 = 0;
+       uint32_t length_printername_1 = 0;
        uint32_t _ptr_datatype;
+       uint32_t size_datatype_1 = 0;
+       uint32_t length_datatype_1 = 0;
        TALLOC_CTX *_mem_save_printername_0;
        TALLOC_CTX *_mem_save_datatype_0;
        TALLOC_CTX *_mem_save_handle_0;
@@ -25571,11 +26526,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_OpenPrinterEx(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.printername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.printername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.printername));
-                       if (ndr_get_array_length(ndr, &r->in.printername) > ndr_get_array_size(ndr, &r->in.printername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.printername), ndr_get_array_length(ndr, &r->in.printername));
+                       size_printername_1 = ndr_get_array_size(ndr, &r->in.printername);
+                       length_printername_1 = ndr_get_array_length(ndr, &r->in.printername);
+                       if (length_printername_1 > size_printername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_printername_1, length_printername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.printername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.printername, ndr_get_array_length(ndr, &r->in.printername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_printername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.printername, length_printername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_printername_0, 0);
                }
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_datatype));
@@ -25589,11 +26546,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_OpenPrinterEx(struct ndr_pull *ndr,
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.datatype, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.datatype));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.datatype));
-                       if (ndr_get_array_length(ndr, &r->in.datatype) > ndr_get_array_size(ndr, &r->in.datatype)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.datatype), ndr_get_array_length(ndr, &r->in.datatype));
+                       size_datatype_1 = ndr_get_array_size(ndr, &r->in.datatype);
+                       length_datatype_1 = ndr_get_array_length(ndr, &r->in.datatype);
+                       if (length_datatype_1 > size_datatype_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_datatype_1, length_datatype_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.datatype), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.datatype, ndr_get_array_length(ndr, &r->in.datatype), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_datatype_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.datatype, length_datatype_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_datatype_0, 0);
                }
                NDR_CHECK(ndr_pull_spoolss_DevmodeContainer(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.devmode_ctr));
@@ -25699,6 +26658,8 @@ static enum ndr_err_code ndr_push_spoolss_AddPrinterEx(struct ndr_push *ndr, int
 static enum ndr_err_code ndr_pull_spoolss_AddPrinterEx(struct ndr_pull *ndr, int flags, struct spoolss_AddPrinterEx *r)
 {
        uint32_t _ptr_server;
+       uint32_t size_server_1 = 0;
+       uint32_t length_server_1 = 0;
        TALLOC_CTX *_mem_save_server_0;
        TALLOC_CTX *_mem_save_info_ctr_0;
        TALLOC_CTX *_mem_save_devmode_ctr_0;
@@ -25719,11 +26680,13 @@ static enum ndr_err_code ndr_pull_spoolss_AddPrinterEx(struct ndr_pull *ndr, int
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-                       if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
+                       size_server_1 = ndr_get_array_size(ndr, &r->in.server);
+                       length_server_1 = ndr_get_array_length(ndr, &r->in.server);
+                       if (length_server_1 > size_server_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_1, length_server_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, length_server_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
                }
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -25901,6 +26864,8 @@ static enum ndr_err_code ndr_push_spoolss_EnumPrinterData(struct ndr_push *ndr,
 
 static enum ndr_err_code ndr_pull_spoolss_EnumPrinterData(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrinterData *r)
 {
+       uint32_t size_value_name_0 = 0;
+       uint32_t size_data_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_value_needed_0;
        TALLOC_CTX *_mem_save_type_0;
@@ -25929,7 +26894,8 @@ static enum ndr_err_code ndr_pull_spoolss_EnumPrinterData(struct ndr_pull *ndr,
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_array_size(ndr, &r->out.value_name));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->out.value_name, ndr_get_array_size(ndr, &r->out.value_name), sizeof(uint16_t), CH_UTF16));
+               size_value_name_0 = ndr_get_array_size(ndr, &r->out.value_name);
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->out.value_name, size_value_name_0, sizeof(uint16_t), CH_UTF16));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.value_needed);
                }
@@ -25948,10 +26914,11 @@ static enum ndr_err_code ndr_pull_spoolss_EnumPrinterData(struct ndr_pull *ndr,
                        uint32_t _flags_save_uint8 = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->out.data));
+                       size_data_1 = ndr_get_array_size(ndr, &r->out.data);
                        if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                               NDR_PULL_ALLOC_N(ndr, r->out.data, ndr_get_array_size(ndr, &r->out.data));
+                               NDR_PULL_ALLOC_N(ndr, r->out.data, size_data_1);
                        }
-                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, ndr_get_array_size(ndr, &r->out.data)));
+                       NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, size_data_1));
                        ndr->flags = _flags_save_uint8;
                }
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -26037,6 +27004,8 @@ static enum ndr_err_code ndr_push_spoolss_DeletePrinterData(struct ndr_push *ndr
 
 static enum ndr_err_code ndr_pull_spoolss_DeletePrinterData(struct ndr_pull *ndr, int flags, struct spoolss_DeletePrinterData *r)
 {
+       uint32_t size_value_name_0 = 0;
+       uint32_t length_value_name_0 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -26048,11 +27017,13 @@ static enum ndr_err_code ndr_pull_spoolss_DeletePrinterData(struct ndr_pull *ndr
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.value_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.value_name));
-               if (ndr_get_array_length(ndr, &r->in.value_name) > ndr_get_array_size(ndr, &r->in.value_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.value_name), ndr_get_array_length(ndr, &r->in.value_name));
+               size_value_name_0 = ndr_get_array_size(ndr, &r->in.value_name);
+               length_value_name_0 = ndr_get_array_length(ndr, &r->in.value_name);
+               if (length_value_name_0 > size_value_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_value_name_0, length_value_name_0);
                }
-               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_check_string_terminator(ndr, length_value_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, length_value_name_0, sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -26225,11 +27196,11 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterDataEx(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_uint32(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));
-               if (r->in.buffer == NULL) {
+               if (r->in.data == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.offered));
-               NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.buffer, 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) {
@@ -26240,6 +27211,11 @@ static enum ndr_err_code ndr_push_spoolss_SetPrinterDataEx(struct ndr_push *ndr,
 
 static enum ndr_err_code ndr_pull_spoolss_SetPrinterDataEx(struct ndr_pull *ndr, int flags, struct spoolss_SetPrinterDataEx *r)
 {
+       uint32_t size_key_name_0 = 0;
+       uint32_t length_key_name_0 = 0;
+       uint32_t size_value_name_0 = 0;
+       uint32_t length_value_name_0 = 0;
+       uint32_t size_data_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -26251,27 +27227,32 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterDataEx(struct ndr_pull *ndr,
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.key_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.key_name));
-               if (ndr_get_array_length(ndr, &r->in.key_name) > ndr_get_array_size(ndr, &r->in.key_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.key_name), ndr_get_array_length(ndr, &r->in.key_name));
+               size_key_name_0 = ndr_get_array_size(ndr, &r->in.key_name);
+               length_key_name_0 = ndr_get_array_length(ndr, &r->in.key_name);
+               if (length_key_name_0 > size_key_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_key_name_0, length_key_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_key_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, length_key_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.value_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.value_name));
-               if (ndr_get_array_length(ndr, &r->in.value_name) > ndr_get_array_size(ndr, &r->in.value_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.value_name), ndr_get_array_length(ndr, &r->in.value_name));
+               size_value_name_0 = ndr_get_array_size(ndr, &r->in.value_name);
+               length_value_name_0 = ndr_get_array_length(ndr, &r->in.value_name);
+               if (length_value_name_0 > size_value_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_value_name_0, length_value_name_0);
                }
-               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_check_string_terminator(ndr, length_value_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, length_value_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
-               NDR_CHECK(ndr_pull_array_size(ndr, &r->in.buffer));
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->in.data));
+               size_data_1 = ndr_get_array_size(ndr, &r->in.data);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC_N(ndr, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer));
+                       NDR_PULL_ALLOC_N(ndr, r->in.data, size_data_1);
                }
-               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer)));
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.data, size_data_1));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
-               if (r->in.buffer) {
-                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.buffer, r->in.offered));
+               if (r->in.data) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.data, r->in.offered));
                }
        }
        if (flags & NDR_OUT) {
@@ -26297,9 +27278,9 @@ _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_ptr(ndr, "buffer", r->in.buffer);
+               ndr_print_ptr(ndr, "data", r->in.data);
                ndr->depth++;
-               ndr_print_array_uint8(ndr, "buffer", r->in.buffer, r->in.offered);
+               ndr_print_array_uint8(ndr, "data", r->in.data, r->in.offered);
                ndr->depth--;
                ndr_print_uint32(ndr, "offered", r->in.offered);
                ndr->depth--;
@@ -26335,11 +27316,11 @@ static enum ndr_err_code ndr_push_spoolss_GetPrinterDataEx(struct ndr_push *ndr,
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
                NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, *r->out.type));
-               if (r->out.buffer == NULL) {
+               if (r->out.data == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.offered));
-               NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.buffer, 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");
                }
@@ -26351,6 +27332,11 @@ static enum ndr_err_code ndr_push_spoolss_GetPrinterDataEx(struct ndr_push *ndr,
 
 static enum ndr_err_code ndr_pull_spoolss_GetPrinterDataEx(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterDataEx *r)
 {
+       uint32_t size_key_name_0 = 0;
+       uint32_t length_key_name_0 = 0;
+       uint32_t size_value_name_0 = 0;
+       uint32_t length_value_name_0 = 0;
+       uint32_t size_data_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_type_0;
        TALLOC_CTX *_mem_save_needed_0;
@@ -26366,23 +27352,27 @@ static enum ndr_err_code ndr_pull_spoolss_GetPrinterDataEx(struct ndr_pull *ndr,
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.key_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.key_name));
-               if (ndr_get_array_length(ndr, &r->in.key_name) > ndr_get_array_size(ndr, &r->in.key_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.key_name), ndr_get_array_length(ndr, &r->in.key_name));
+               size_key_name_0 = ndr_get_array_size(ndr, &r->in.key_name);
+               length_key_name_0 = ndr_get_array_length(ndr, &r->in.key_name);
+               if (length_key_name_0 > size_key_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_key_name_0, length_key_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_key_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, length_key_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.value_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.value_name));
-               if (ndr_get_array_length(ndr, &r->in.value_name) > ndr_get_array_size(ndr, &r->in.value_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.value_name), ndr_get_array_length(ndr, &r->in.value_name));
+               size_value_name_0 = ndr_get_array_size(ndr, &r->in.value_name);
+               length_value_name_0 = ndr_get_array_length(ndr, &r->in.value_name);
+               if (length_value_name_0 > size_value_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_value_name_0, length_value_name_0);
                }
-               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_check_string_terminator(ndr, length_value_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, length_value_name_0, sizeof(uint16_t), CH_UTF16));
                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_N(ndr, r->out.buffer, r->in.offered);
-               memset(r->out.buffer, 0, (r->in.offered) * sizeof(*r->out.buffer));
+               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);
        }
@@ -26394,11 +27384,12 @@ static enum ndr_err_code ndr_pull_spoolss_GetPrinterDataEx(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.buffer));
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->out.data));
+               size_data_1 = ndr_get_array_size(ndr, &r->out.data);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC_N(ndr, r->out.buffer, ndr_get_array_size(ndr, &r->out.buffer));
+                       NDR_PULL_ALLOC_N(ndr, r->out.data, size_data_1);
                }
-               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.buffer, ndr_get_array_size(ndr, &r->out.buffer)));
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, size_data_1));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.needed);
                }
@@ -26407,8 +27398,8 @@ static enum ndr_err_code ndr_pull_spoolss_GetPrinterDataEx(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));
-               if (r->out.buffer) {
-                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.buffer, r->in.offered));
+               if (r->out.data) {
+                       NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.data, r->in.offered));
                }
        }
        return NDR_ERR_SUCCESS;
@@ -26440,9 +27431,9 @@ _PUBLIC_ void ndr_print_spoolss_GetPrinterDataEx(struct ndr_print *ndr, const ch
                ndr->depth++;
                ndr_print_winreg_Type(ndr, "type", *r->out.type);
                ndr->depth--;
-               ndr_print_ptr(ndr, "buffer", r->out.buffer);
+               ndr_print_ptr(ndr, "data", r->out.data);
                ndr->depth++;
-               ndr_print_array_uint8(ndr, "buffer", r->out.buffer, r->in.offered);
+               ndr_print_array_uint8(ndr, "data", r->out.data, r->in.offered);
                ndr->depth--;
                ndr_print_ptr(ndr, "needed", r->out.needed);
                ndr->depth++;
@@ -26484,6 +27475,8 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_EnumPrinterDataEx(struct ndr_push *
 
 _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrinterDataEx(struct ndr_pull *ndr, int flags, struct _spoolss_EnumPrinterDataEx *r)
 {
+       uint32_t size_key_name_0 = 0;
+       uint32_t length_key_name_0 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_needed_0;
        TALLOC_CTX *_mem_save_count_0;
@@ -26499,11 +27492,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_EnumPrinterDataEx(struct ndr_pull *
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.key_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.key_name));
-               if (ndr_get_array_length(ndr, &r->in.key_name) > ndr_get_array_size(ndr, &r->in.key_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.key_name), ndr_get_array_length(ndr, &r->in.key_name));
+               size_key_name_0 = ndr_get_array_size(ndr, &r->in.key_name);
+               length_key_name_0 = ndr_get_array_length(ndr, &r->in.key_name);
+               if (length_key_name_0 > size_key_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_key_name_0, length_key_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_key_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, length_key_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
                NDR_PULL_ALLOC(ndr, r->out.needed);
                ZERO_STRUCTP(r->out.needed);
@@ -26550,6 +27545,7 @@ _PUBLIC_ enum ndr_err_code ndr_push___spoolss_EnumPrinterDataEx(struct ndr_push
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrinterDataEx(struct ndr_pull *ndr, int flags, struct __spoolss_EnumPrinterDataEx *r)
 {
+       uint32_t size_info_0 = 0;
        uint32_t cntr_info_0;
        TALLOC_CTX *_mem_save_info_0;
        if (flags & NDR_IN) {
@@ -26558,13 +27554,14 @@ _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_EnumPrinterDataEx(struct ndr_pull
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
        }
        if (flags & NDR_OUT) {
-               NDR_PULL_ALLOC_N(ndr, r->out.info, r->in.count);
+               size_info_0 = r->in.count;
+               NDR_PULL_ALLOC_N(ndr, r->out.info, size_info_0);
                _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_PrinterEnumValues(ndr, NDR_SCALARS, &r->out.info[cntr_info_0]));
                }
-               for (cntr_info_0 = 0; cntr_info_0 < r->in.count; cntr_info_0++) {
+               for (cntr_info_0 = 0; cntr_info_0 < size_info_0; cntr_info_0++) {
                        NDR_CHECK(ndr_pull_spoolss_PrinterEnumValues(ndr, NDR_BUFFERS, &r->out.info[cntr_info_0]));
                }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
@@ -26640,10 +27637,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_EnumPrinterKey(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.offered));
        }
        if (flags & NDR_OUT) {
+               if (r->out._ndr_size == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out._ndr_size));
                if (r->out.key_buffer == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_spoolss_StringArray2(ndr, NDR_SCALARS, r->out.key_buffer));
+               {
+                       struct ndr_push *_ndr_key_buffer;
+                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_key_buffer, 0, *r->out._ndr_size * 2));
+                       NDR_CHECK(ndr_push_set_switch_value(_ndr_key_buffer, r->out.key_buffer, *r->out._ndr_size));
+                       NDR_CHECK(ndr_push_spoolss_KeyNames(_ndr_key_buffer, NDR_SCALARS|NDR_BUFFERS, r->out.key_buffer));
+                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_key_buffer, 0, *r->out._ndr_size * 2));
+               }
                if (r->out.needed == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
@@ -26655,7 +27662,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_EnumPrinterKey(struct ndr_push *ndr,
 
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_EnumPrinterKey(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrinterKey *r)
 {
+       uint32_t size_key_name_0 = 0;
+       uint32_t length_key_name_0 = 0;
        TALLOC_CTX *_mem_save_handle_0;
+       TALLOC_CTX *_mem_save__ndr_size_0;
        TALLOC_CTX *_mem_save_key_buffer_0;
        TALLOC_CTX *_mem_save_needed_0;
        if (flags & NDR_IN) {
@@ -26670,24 +27680,41 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_EnumPrinterKey(struct ndr_pull *ndr,
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.key_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.key_name));
-               if (ndr_get_array_length(ndr, &r->in.key_name) > ndr_get_array_size(ndr, &r->in.key_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.key_name), ndr_get_array_length(ndr, &r->in.key_name));
+               size_key_name_0 = ndr_get_array_size(ndr, &r->in.key_name);
+               length_key_name_0 = ndr_get_array_length(ndr, &r->in.key_name);
+               if (length_key_name_0 > size_key_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_key_name_0, length_key_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_key_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, length_key_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
+               NDR_PULL_ALLOC(ndr, r->out._ndr_size);
+               ZERO_STRUCTP(r->out._ndr_size);
                NDR_PULL_ALLOC(ndr, r->out.key_buffer);
                ZERO_STRUCTP(r->out.key_buffer);
                NDR_PULL_ALLOC(ndr, r->out.needed);
                ZERO_STRUCTP(r->out.needed);
        }
        if (flags & NDR_OUT) {
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, r->out._ndr_size);
+               }
+               _mem_save__ndr_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->out._ndr_size, LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out._ndr_size));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save__ndr_size_0, LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.key_buffer);
                }
                _mem_save_key_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
                NDR_PULL_SET_MEM_CTX(ndr, r->out.key_buffer, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_spoolss_StringArray2(ndr, NDR_SCALARS, r->out.key_buffer));
+               {
+                       struct ndr_pull *_ndr_key_buffer;
+                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_key_buffer, 0, *r->out._ndr_size * 2));
+                       NDR_CHECK(ndr_pull_set_switch_value(_ndr_key_buffer, r->out.key_buffer, *r->out._ndr_size));
+                       NDR_CHECK(ndr_pull_spoolss_KeyNames(_ndr_key_buffer, NDR_SCALARS|NDR_BUFFERS, r->out.key_buffer));
+                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_key_buffer, 0, *r->out._ndr_size * 2));
+               }
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_key_buffer_0, LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.needed);
@@ -26722,9 +27749,14 @@ _PUBLIC_ void ndr_print_spoolss_EnumPrinterKey(struct ndr_print *ndr, const char
        if (flags & NDR_OUT) {
                ndr_print_struct(ndr, "out", "spoolss_EnumPrinterKey");
                ndr->depth++;
+               ndr_print_ptr(ndr, "_ndr_size", r->out._ndr_size);
+               ndr->depth++;
+               ndr_print_uint32(ndr, "_ndr_size", *r->out._ndr_size);
+               ndr->depth--;
                ndr_print_ptr(ndr, "key_buffer", r->out.key_buffer);
                ndr->depth++;
-               ndr_print_spoolss_StringArray2(ndr, "key_buffer", r->out.key_buffer);
+               ndr_print_set_switch_value(ndr, r->out.key_buffer, *r->out._ndr_size);
+               ndr_print_spoolss_KeyNames(ndr, "key_buffer", r->out.key_buffer);
                ndr->depth--;
                ndr_print_ptr(ndr, "needed", r->out.needed);
                ndr->depth++;
@@ -26760,6 +27792,10 @@ static enum ndr_err_code ndr_push_spoolss_DeletePrinterDataEx(struct ndr_push *n
 
 static enum ndr_err_code ndr_pull_spoolss_DeletePrinterDataEx(struct ndr_pull *ndr, int flags, struct spoolss_DeletePrinterDataEx *r)
 {
+       uint32_t size_key_name_0 = 0;
+       uint32_t length_key_name_0 = 0;
+       uint32_t size_value_name_0 = 0;
+       uint32_t length_value_name_0 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -26771,18 +27807,22 @@ static enum ndr_err_code ndr_pull_spoolss_DeletePrinterDataEx(struct ndr_pull *n
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.key_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.key_name));
-               if (ndr_get_array_length(ndr, &r->in.key_name) > ndr_get_array_size(ndr, &r->in.key_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.key_name), ndr_get_array_length(ndr, &r->in.key_name));
+               size_key_name_0 = ndr_get_array_size(ndr, &r->in.key_name);
+               length_key_name_0 = ndr_get_array_length(ndr, &r->in.key_name);
+               if (length_key_name_0 > size_key_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_key_name_0, length_key_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_key_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, length_key_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.value_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.value_name));
-               if (ndr_get_array_length(ndr, &r->in.value_name) > ndr_get_array_size(ndr, &r->in.value_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.value_name), ndr_get_array_length(ndr, &r->in.value_name));
+               size_value_name_0 = ndr_get_array_size(ndr, &r->in.value_name);
+               length_value_name_0 = ndr_get_array_length(ndr, &r->in.value_name);
+               if (length_value_name_0 > size_value_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_value_name_0, length_value_name_0);
                }
-               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_check_string_terminator(ndr, length_value_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, length_value_name_0, sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -26837,6 +27877,8 @@ static enum ndr_err_code ndr_push_spoolss_DeletePrinterKey(struct ndr_push *ndr,
 
 static enum ndr_err_code ndr_pull_spoolss_DeletePrinterKey(struct ndr_pull *ndr, int flags, struct spoolss_DeletePrinterKey *r)
 {
+       uint32_t size_key_name_0 = 0;
+       uint32_t length_key_name_0 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        if (flags & NDR_IN) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -26848,11 +27890,13 @@ static enum ndr_err_code ndr_pull_spoolss_DeletePrinterKey(struct ndr_pull *ndr,
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.key_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.key_name));
-               if (ndr_get_array_length(ndr, &r->in.key_name) > ndr_get_array_size(ndr, &r->in.key_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.key_name), ndr_get_array_length(ndr, &r->in.key_name));
+               size_key_name_0 = ndr_get_array_size(ndr, &r->in.key_name);
+               length_key_name_0 = ndr_get_array_length(ndr, &r->in.key_name);
+               if (length_key_name_0 > size_key_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_key_name_0, length_key_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, ndr_get_array_length(ndr, &r->in.key_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_key_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.key_name, length_key_name_0, sizeof(uint16_t), CH_UTF16));
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -26957,6 +28001,12 @@ static enum ndr_err_code ndr_push_spoolss_DeletePrinterDriverEx(struct ndr_push
 static enum ndr_err_code ndr_pull_spoolss_DeletePrinterDriverEx(struct ndr_pull *ndr, int flags, struct spoolss_DeletePrinterDriverEx *r)
 {
        uint32_t _ptr_server;
+       uint32_t size_server_1 = 0;
+       uint32_t length_server_1 = 0;
+       uint32_t size_architecture_0 = 0;
+       uint32_t length_architecture_0 = 0;
+       uint32_t size_driver_0 = 0;
+       uint32_t length_driver_0 = 0;
        TALLOC_CTX *_mem_save_server_0;
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
@@ -26970,27 +28020,33 @@ static enum ndr_err_code ndr_pull_spoolss_DeletePrinterDriverEx(struct ndr_pull
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-                       if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
+                       size_server_1 = ndr_get_array_size(ndr, &r->in.server);
+                       length_server_1 = ndr_get_array_length(ndr, &r->in.server);
+                       if (length_server_1 > size_server_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_server_1, length_server_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_server_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, length_server_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
                }
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.architecture));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.architecture));
-               if (ndr_get_array_length(ndr, &r->in.architecture) > ndr_get_array_size(ndr, &r->in.architecture)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.architecture), ndr_get_array_length(ndr, &r->in.architecture));
+               size_architecture_0 = ndr_get_array_size(ndr, &r->in.architecture);
+               length_architecture_0 = ndr_get_array_length(ndr, &r->in.architecture);
+               if (length_architecture_0 > size_architecture_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_architecture_0, length_architecture_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_architecture_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, length_architecture_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.driver));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.driver));
-               if (ndr_get_array_length(ndr, &r->in.driver) > ndr_get_array_size(ndr, &r->in.driver)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.driver), ndr_get_array_length(ndr, &r->in.driver));
+               size_driver_0 = ndr_get_array_size(ndr, &r->in.driver);
+               length_driver_0 = ndr_get_array_length(ndr, &r->in.driver);
+               if (length_driver_0 > size_driver_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_driver_0, length_driver_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.driver), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.driver, ndr_get_array_length(ndr, &r->in.driver), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_driver_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.driver, length_driver_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_spoolss_DeleteDriverFlags(ndr, NDR_SCALARS, &r->in.delete_flags));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.version));
        }
@@ -27194,6 +28250,9 @@ static enum ndr_err_code ndr_push_spoolss_XcvData(struct ndr_push *ndr, int flag
 
 static enum ndr_err_code ndr_pull_spoolss_XcvData(struct ndr_pull *ndr, int flags, struct spoolss_XcvData *r)
 {
+       uint32_t size_function_name_0 = 0;
+       uint32_t length_function_name_0 = 0;
+       uint32_t size_out_data_1 = 0;
        TALLOC_CTX *_mem_save_handle_0;
        TALLOC_CTX *_mem_save_needed_0;
        TALLOC_CTX *_mem_save_status_code_0;
@@ -27209,11 +28268,13 @@ static enum ndr_err_code ndr_pull_spoolss_XcvData(struct ndr_pull *ndr, int flag
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_array_size(ndr, &r->in.function_name));
                NDR_CHECK(ndr_pull_array_length(ndr, &r->in.function_name));
-               if (ndr_get_array_length(ndr, &r->in.function_name) > ndr_get_array_size(ndr, &r->in.function_name)) {
-                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.function_name), ndr_get_array_length(ndr, &r->in.function_name));
+               size_function_name_0 = ndr_get_array_size(ndr, &r->in.function_name);
+               length_function_name_0 = ndr_get_array_length(ndr, &r->in.function_name);
+               if (length_function_name_0 > size_function_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_function_name_0, length_function_name_0);
                }
-               NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.function_name), sizeof(uint16_t)));
-               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.function_name, ndr_get_array_length(ndr, &r->in.function_name), sizeof(uint16_t), CH_UTF16));
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_function_name_0, sizeof(uint16_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.function_name, length_function_name_0, sizeof(uint16_t), CH_UTF16));
                NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->in.in_data));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in._in_data_length));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.out_data_size));
@@ -27233,10 +28294,11 @@ static enum ndr_err_code ndr_pull_spoolss_XcvData(struct ndr_pull *ndr, int flag
        }
        if (flags & NDR_OUT) {
                NDR_CHECK(ndr_pull_array_size(ndr, &r->out.out_data));
+               size_out_data_1 = ndr_get_array_size(ndr, &r->out.out_data);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC_N(ndr, r->out.out_data, ndr_get_array_size(ndr, &r->out.out_data));
+                       NDR_PULL_ALLOC_N(ndr, r->out.out_data, size_out_data_1);
                }
-               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.out_data, ndr_get_array_size(ndr, &r->out.out_data)));
+               NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.out_data, size_out_data_1));
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.needed);
                }
@@ -27329,6 +28391,8 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_AddPrinterDriverEx(struct ndr_push *
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_AddPrinterDriverEx(struct ndr_pull *ndr, int flags, struct spoolss_AddPrinterDriverEx *r)
 {
        uint32_t _ptr_servername;
+       uint32_t size_servername_1 = 0;
+       uint32_t length_servername_1 = 0;
        TALLOC_CTX *_mem_save_servername_0;
        TALLOC_CTX *_mem_save_info_ctr_0;
        if (flags & NDR_IN) {
@@ -27343,11 +28407,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_AddPrinterDriverEx(struct ndr_pull *
                        NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
                        NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
                        NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-                       if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
+                       size_servername_1 = ndr_get_array_size(ndr, &r->in.servername);
+                       length_servername_1 = ndr_get_array_length(ndr, &r->in.servername);
+                       if (length_servername_1 > size_servername_1) {
+                               return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_servername_1, length_servername_1);
                        }
-                       NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
+                       NDR_CHECK(ndr_check_string_terminator(ndr, length_servername_1, sizeof(uint16_t)));
+                       NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, length_servername_1, sizeof(uint16_t), CH_UTF16));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
                }
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {