[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-2377-g2ec2eef

Günther Deschner gd at samba.org
Mon Feb 18 00:42:34 GMT 2008


The branch, v3-2-test has been updated
       via  2ec2eefc703df882599b6eac9147350c4df33006 (commit)
       via  7b7ce50e4bd8bc1ac94e882acf412e69b652f7d0 (commit)
       via  8d8cf915f793980bdd0d89fc8d53ea1c1e759065 (commit)
       via  cbc3f328d0deecdb7a6c2ff6088ab10ce7d0fbd5 (commit)
       via  1ec619fd025cf0ba0b9af05bffa90b61e8ab0f97 (commit)
       via  ddb3838be1ab5080add4db060432dfd007b1fd73 (commit)
       via  b30d812b30b5a5b286db68fc94b09fff38db5306 (commit)
       via  c184a711464d11ebb62989487d33d51d39c97092 (commit)
       via  5e0f27c2a717ab2daa3b25c450c9cc560aad6218 (commit)
       via  121e73aa49a95b3cdb2b680c0ee30d8308bd5988 (commit)
      from  bc1df536fa04e004ccf177e0f3ba56f3c47709aa (commit)

http://gitweb.samba.org/?samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 2ec2eefc703df882599b6eac9147350c4df33006
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:34:13 2008 +0100

    Remove unused marshalling for NTSVCS_GET_HW_PROFILE_INFO.
    
    Guenther

commit 7b7ce50e4bd8bc1ac94e882acf412e69b652f7d0
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:32:29 2008 +0100

    Use pidl for _PNP_GetHwProfInfo().
    
    Guenther

commit 8d8cf915f793980bdd0d89fc8d53ea1c1e759065
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:29:55 2008 +0100

    Add ntsvcs_hwprofinfo command to rpcclient.
    
    Guenther

commit cbc3f328d0deecdb7a6c2ff6088ab10ce7d0fbd5
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:38:08 2008 +0100

    Re-run make idl.
    
    Guenther

commit 1ec619fd025cf0ba0b9af05bffa90b61e8ab0f97
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:29:13 2008 +0100

    Add IDL for PNP_GetHwProfInfo.
    
    Guenther

commit ddb3838be1ab5080add4db060432dfd007b1fd73
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:10:37 2008 +0100

    Remove unused marshalling for NTSVCS_HW_PROFILE_FLAGS.
    
    Guenther

commit b30d812b30b5a5b286db68fc94b09fff38db5306
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:09:34 2008 +0100

    Use pidl for _PNP_HwProfFlags().
    
    Guenther

commit c184a711464d11ebb62989487d33d51d39c97092
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:07:12 2008 +0100

    Add ntsvcs_hwprofflags command to rpcclient.
    
    Guenther

commit 5e0f27c2a717ab2daa3b25c450c9cc560aad6218
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:37:06 2008 +0100

    Re-run make idl.
    
    Guenther

commit 121e73aa49a95b3cdb2b680c0ee30d8308bd5988
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 18 01:06:08 2008 +0100

    Fill in (very unfinished) IDL for PNP_HwProfFlags.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/include/rpc_ntsvcs.h        |   38 -----
 source/librpc/gen_ndr/cli_ntsvcs.c |   33 ++++
 source/librpc/gen_ndr/cli_ntsvcs.h |   13 ++
 source/librpc/gen_ndr/ndr_ntsvcs.c |  294 ++++++++++++++++++++++++++++++++++++
 source/librpc/gen_ndr/ndr_ntsvcs.h |    1 +
 source/librpc/gen_ndr/ntsvcs.h     |   28 ++++
 source/librpc/gen_ndr/srv_ntsvcs.c |   11 ++
 source/librpc/idl/ntsvcs.idl       |   25 +++-
 source/rpc_parse/parse_ntsvcs.c    |  146 ------------------
 source/rpc_server/srv_ntsvcs.c     |   36 +----
 source/rpc_server/srv_ntsvcs_nt.c  |   33 +---
 source/rpcclient/cmd_ntsvcs.c      |   65 ++++++++
 12 files changed, 477 insertions(+), 246 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/rpc_ntsvcs.h b/source/include/rpc_ntsvcs.h
index 55f3662..71274cc 100644
--- a/source/include/rpc_ntsvcs.h
+++ b/source/include/rpc_ntsvcs.h
@@ -68,42 +68,4 @@ typedef struct {
 	WERROR status;
 } NTSVCS_R_GET_DEVICE_REG_PROPERTY;
 
-
-/**************************/
-
-typedef struct {
-	uint32 index;
-	uint8 *buffer;
-	uint32 buffer_size;
-	uint32 unknown1;
-} NTSVCS_Q_GET_HW_PROFILE_INFO;
-
-typedef struct {
-	uint32 buffer_size;	/* the size (not included in the reply) 
-				   if just matched from the request */
-	uint8 *buffer;
-	WERROR status;
-} NTSVCS_R_GET_HW_PROFILE_INFO;
-
-
-/**************************/
-
-typedef struct {
-	uint32 unknown1;
-	UNISTR2 devicepath;
-	uint32 unknown2;
-	uint32 unknown3;
-	uint32 unknown4;
-	uint32 unknown5;
-	uint32 unknown6;
-	uint32 unknown7;
-} NTSVCS_Q_HW_PROFILE_FLAGS;
-
-typedef struct {
-	uint32 unknown1;
-	uint32 unknown2;
-	uint32 unknown3;
-	WERROR status;
-} NTSVCS_R_HW_PROFILE_FLAGS;
-
 #endif /* _RPC_NTSVCS_H */
diff --git a/source/librpc/gen_ndr/cli_ntsvcs.c b/source/librpc/gen_ndr/cli_ntsvcs.c
index 7f27580..5597fcc 100644
--- a/source/librpc/gen_ndr/cli_ntsvcs.c
+++ b/source/librpc/gen_ndr/cli_ntsvcs.c
@@ -1700,12 +1700,29 @@ NTSTATUS rpccli_PNP_RequestEjectPC(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_PNP_HwProfFlags(struct rpc_pipe_client *cli,
 				TALLOC_CTX *mem_ctx,
+				uint32_t unknown1,
+				const char *devicepath,
+				uint32_t unknown2,
+				uint32_t *unknown3,
+				uint16_t *unknown4,
+				const char *unknown5,
+				const char **unknown5a,
+				uint32_t unknown6,
+				uint32_t unknown7,
 				WERROR *werror)
 {
 	struct PNP_HwProfFlags r;
 	NTSTATUS status;
 
 	/* In parameters */
+	r.in.unknown1 = unknown1;
+	r.in.devicepath = devicepath;
+	r.in.unknown2 = unknown2;
+	r.in.unknown3 = unknown3;
+	r.in.unknown4 = unknown4;
+	r.in.unknown5 = unknown5;
+	r.in.unknown6 = unknown6;
+	r.in.unknown7 = unknown7;
 
 	if (DEBUGLEVEL >= 10) {
 		NDR_PRINT_IN_DEBUG(PNP_HwProfFlags, &r);
@@ -1731,6 +1748,13 @@ NTSTATUS rpccli_PNP_HwProfFlags(struct rpc_pipe_client *cli,
 	}
 
 	/* Return variables */
+	*unknown3 = *r.out.unknown3;
+	if (unknown4 && r.out.unknown4) {
+		*unknown4 = *r.out.unknown4;
+	}
+	if (unknown5a && r.out.unknown5a) {
+		*unknown5a = *r.out.unknown5a;
+	}
 
 	/* Return result */
 	if (werror) {
@@ -1742,12 +1766,20 @@ NTSTATUS rpccli_PNP_HwProfFlags(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_PNP_GetHwProfInfo(struct rpc_pipe_client *cli,
 				  TALLOC_CTX *mem_ctx,
+				  uint32_t idx,
+				  struct PNP_HwProfInfo *info,
+				  uint32_t unknown1,
+				  uint32_t unknown2,
 				  WERROR *werror)
 {
 	struct PNP_GetHwProfInfo r;
 	NTSTATUS status;
 
 	/* In parameters */
+	r.in.idx = idx;
+	r.in.info = info;
+	r.in.unknown1 = unknown1;
+	r.in.unknown2 = unknown2;
 
 	if (DEBUGLEVEL >= 10) {
 		NDR_PRINT_IN_DEBUG(PNP_GetHwProfInfo, &r);
@@ -1773,6 +1805,7 @@ NTSTATUS rpccli_PNP_GetHwProfInfo(struct rpc_pipe_client *cli,
 	}
 
 	/* Return variables */
+	*info = *r.out.info;
 
 	/* Return result */
 	if (werror) {
diff --git a/source/librpc/gen_ndr/cli_ntsvcs.h b/source/librpc/gen_ndr/cli_ntsvcs.h
index 9112000..33df63e 100644
--- a/source/librpc/gen_ndr/cli_ntsvcs.h
+++ b/source/librpc/gen_ndr/cli_ntsvcs.h
@@ -129,9 +129,22 @@ NTSTATUS rpccli_PNP_RequestEjectPC(struct rpc_pipe_client *cli,
 				   WERROR *werror);
 NTSTATUS rpccli_PNP_HwProfFlags(struct rpc_pipe_client *cli,
 				TALLOC_CTX *mem_ctx,
+				uint32_t unknown1,
+				const char *devicepath,
+				uint32_t unknown2,
+				uint32_t *unknown3,
+				uint16_t *unknown4,
+				const char *unknown5,
+				const char **unknown5a,
+				uint32_t unknown6,
+				uint32_t unknown7,
 				WERROR *werror);
 NTSTATUS rpccli_PNP_GetHwProfInfo(struct rpc_pipe_client *cli,
 				  TALLOC_CTX *mem_ctx,
+				  uint32_t idx,
+				  struct PNP_HwProfInfo *info,
+				  uint32_t unknown1,
+				  uint32_t unknown2,
 				  WERROR *werror);
 NTSTATUS rpccli_PNP_AddEmptyLogConf(struct rpc_pipe_client *cli,
 				    TALLOC_CTX *mem_ctx,
diff --git a/source/librpc/gen_ndr/ndr_ntsvcs.c b/source/librpc/gen_ndr/ndr_ntsvcs.c
index c66ec2a..058b781 100644
--- a/source/librpc/gen_ndr/ndr_ntsvcs.c
+++ b/source/librpc/gen_ndr/ndr_ntsvcs.c
@@ -3,6 +3,59 @@
 #include "includes.h"
 #include "librpc/gen_ndr/ndr_ntsvcs.h"
 
+static enum ndr_err_code ndr_push_PNP_HwProfInfo(struct ndr_push *ndr, int ndr_flags, const struct PNP_HwProfInfo *r)
+{
+	uint32_t cntr_unknown2_0;
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
+		for (cntr_unknown2_0 = 0; cntr_unknown2_0 < 160; cntr_unknown2_0++) {
+			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown2[cntr_unknown2_0]));
+		}
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown3));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_PNP_HwProfInfo(struct ndr_pull *ndr, int ndr_flags, struct PNP_HwProfInfo *r)
+{
+	uint32_t cntr_unknown2_0;
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
+		for (cntr_unknown2_0 = 0; cntr_unknown2_0 < 160; cntr_unknown2_0++) {
+			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown2[cntr_unknown2_0]));
+		}
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown3));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_PNP_HwProfInfo(struct ndr_print *ndr, const char *name, const struct PNP_HwProfInfo *r)
+{
+	uint32_t cntr_unknown2_0;
+	ndr_print_struct(ndr, name, "PNP_HwProfInfo");
+	ndr->depth++;
+	ndr_print_uint32(ndr, "unknown1", r->unknown1);
+	ndr->print(ndr, "%s: ARRAY(%d)", "unknown2", 160);
+	ndr->depth++;
+	for (cntr_unknown2_0=0;cntr_unknown2_0<160;cntr_unknown2_0++) {
+		char *idx_0=NULL;
+		asprintf(&idx_0, "[%d]", cntr_unknown2_0);
+		if (idx_0) {
+			ndr_print_uint16(ndr, "unknown2", r->unknown2[cntr_unknown2_0]);
+			free(idx_0);
+		}
+	}
+	ndr->depth--;
+	ndr_print_uint32(ndr, "unknown3", r->unknown3);
+	ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_PNP_Disconnect(struct ndr_push *ndr, int flags, const struct PNP_Disconnect *r)
 {
 	if (flags & NDR_IN) {
@@ -1743,8 +1796,52 @@ _PUBLIC_ void ndr_print_PNP_RequestEjectPC(struct ndr_print *ndr, const char *na
 static enum ndr_err_code ndr_push_PNP_HwProfFlags(struct ndr_push *ndr, int flags, const struct PNP_HwProfFlags *r)
 {
 	if (flags & NDR_IN) {
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
+		if (r->in.devicepath == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicepath, CH_UTF16)));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicepath, CH_UTF16)));
+		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.devicepath, ndr_charset_length(r->in.devicepath, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
+		if (r->in.unknown3 == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.unknown3));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown4));
+		if (r->in.unknown4) {
+			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.unknown4));
+		}
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown5));
+		if (r->in.unknown5) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown5, CH_UTF16)));
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown5, CH_UTF16)));
+			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.unknown5, ndr_charset_length(r->in.unknown5, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+		}
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown6));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown7));
 	}
 	if (flags & NDR_OUT) {
+		if (r->out.unknown3 == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.unknown3));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.unknown4));
+		if (r->out.unknown4) {
+			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->out.unknown4));
+		}
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.unknown5a));
+		if (r->out.unknown5a) {
+			NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.unknown5a));
+			if (*r->out.unknown5a) {
+				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.unknown5a, CH_UTF16)));
+				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.unknown5a, CH_UTF16)));
+				NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.unknown5a, ndr_charset_length(*r->out.unknown5a, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+			}
+		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
 	return NDR_ERR_SUCCESS;
@@ -1752,9 +1849,117 @@ static enum ndr_err_code ndr_push_PNP_HwProfFlags(struct ndr_push *ndr, int flag
 
 static enum ndr_err_code ndr_pull_PNP_HwProfFlags(struct ndr_pull *ndr, int flags, struct PNP_HwProfFlags *r)
 {
+	uint32_t _ptr_unknown4;
+	uint32_t _ptr_unknown5;
+	uint32_t _ptr_unknown5a;
+	TALLOC_CTX *_mem_save_unknown3_0;
+	TALLOC_CTX *_mem_save_unknown4_0;
+	TALLOC_CTX *_mem_save_unknown5_0;
+	TALLOC_CTX *_mem_save_unknown5a_0;
+	TALLOC_CTX *_mem_save_unknown5a_1;
 	if (flags & NDR_IN) {
+		ZERO_STRUCT(r->out);
+
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
+		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.devicepath));
+		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.devicepath));
+		if (ndr_get_array_length(ndr, &r->in.devicepath) > ndr_get_array_size(ndr, &r->in.devicepath)) {
+			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.devicepath), ndr_get_array_length(ndr, &r->in.devicepath));
+		}
+		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.devicepath), sizeof(uint16_t)));
+		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.devicepath, ndr_get_array_length(ndr, &r->in.devicepath), sizeof(uint16_t), CH_UTF16));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->in.unknown3);
+		}
+		_mem_save_unknown3_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown3, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.unknown3));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown3_0, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown4));
+		if (_ptr_unknown4) {
+			NDR_PULL_ALLOC(ndr, r->in.unknown4);
+		} else {
+			r->in.unknown4 = NULL;
+		}
+		if (r->in.unknown4) {
+			_mem_save_unknown4_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown4, 0);
+			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.unknown4));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown4_0, 0);
+		}
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown5));
+		if (_ptr_unknown5) {
+			NDR_PULL_ALLOC(ndr, r->in.unknown5);
+		} else {
+			r->in.unknown5 = NULL;
+		}
+		if (r->in.unknown5) {
+			_mem_save_unknown5_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown5, 0);
+			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.unknown5));
+			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.unknown5));
+			if (ndr_get_array_length(ndr, &r->in.unknown5) > ndr_get_array_size(ndr, &r->in.unknown5)) {
+				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.unknown5), ndr_get_array_length(ndr, &r->in.unknown5));
+			}
+			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.unknown5), sizeof(uint16_t)));
+			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.unknown5, ndr_get_array_length(ndr, &r->in.unknown5), sizeof(uint16_t), CH_UTF16));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown5_0, 0);
+		}
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown6));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown7));
+		NDR_PULL_ALLOC(ndr, r->out.unknown3);
+		*r->out.unknown3 = *r->in.unknown3;
 	}
 	if (flags & NDR_OUT) {
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->out.unknown3);
+		}
+		_mem_save_unknown3_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown3, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.unknown3));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown3_0, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown4));
+		if (_ptr_unknown4) {
+			NDR_PULL_ALLOC(ndr, r->out.unknown4);
+		} else {
+			r->out.unknown4 = NULL;
+		}
+		if (r->out.unknown4) {
+			_mem_save_unknown4_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown4, 0);
+			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->out.unknown4));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown4_0, 0);
+		}
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown5a));
+		if (_ptr_unknown5a) {
+			NDR_PULL_ALLOC(ndr, r->out.unknown5a);
+		} else {
+			r->out.unknown5a = NULL;
+		}
+		if (r->out.unknown5a) {
+			_mem_save_unknown5a_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown5a, 0);
+			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown5a));
+			if (_ptr_unknown5a) {
+				NDR_PULL_ALLOC(ndr, *r->out.unknown5a);
+			} else {
+				*r->out.unknown5a = NULL;
+			}
+			if (*r->out.unknown5a) {
+				_mem_save_unknown5a_1 = NDR_PULL_GET_MEM_CTX(ndr);
+				NDR_PULL_SET_MEM_CTX(ndr, *r->out.unknown5a, 0);
+				NDR_CHECK(ndr_pull_array_size(ndr, r->out.unknown5a));
+				NDR_CHECK(ndr_pull_array_length(ndr, r->out.unknown5a));
+				if (ndr_get_array_length(ndr, r->out.unknown5a) > ndr_get_array_size(ndr, r->out.unknown5a)) {
+					return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.unknown5a), ndr_get_array_length(ndr, r->out.unknown5a));
+				}
+				NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.unknown5a), sizeof(uint16_t)));
+				NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.unknown5a, ndr_get_array_length(ndr, r->out.unknown5a), sizeof(uint16_t), CH_UTF16));
+				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown5a_1, 0);
+			}
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown5a_0, 0);
+		}
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
 	return NDR_ERR_SUCCESS;
@@ -1770,11 +1975,56 @@ _PUBLIC_ void ndr_print_PNP_HwProfFlags(struct ndr_print *ndr, const char *name,
 	if (flags & NDR_IN) {
 		ndr_print_struct(ndr, "in", "PNP_HwProfFlags");
 		ndr->depth++;
+		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
+		ndr_print_ptr(ndr, "devicepath", r->in.devicepath);
+		ndr->depth++;
+		ndr_print_string(ndr, "devicepath", r->in.devicepath);
+		ndr->depth--;
+		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
+		ndr_print_ptr(ndr, "unknown3", r->in.unknown3);
+		ndr->depth++;
+		ndr_print_uint32(ndr, "unknown3", *r->in.unknown3);
+		ndr->depth--;
+		ndr_print_ptr(ndr, "unknown4", r->in.unknown4);
+		ndr->depth++;
+		if (r->in.unknown4) {
+			ndr_print_uint16(ndr, "unknown4", *r->in.unknown4);
+		}
+		ndr->depth--;
+		ndr_print_ptr(ndr, "unknown5", r->in.unknown5);
+		ndr->depth++;
+		if (r->in.unknown5) {
+			ndr_print_string(ndr, "unknown5", r->in.unknown5);
+		}
+		ndr->depth--;
+		ndr_print_uint32(ndr, "unknown6", r->in.unknown6);
+		ndr_print_uint32(ndr, "unknown7", r->in.unknown7);
 		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
 		ndr_print_struct(ndr, "out", "PNP_HwProfFlags");
 		ndr->depth++;
+		ndr_print_ptr(ndr, "unknown3", r->out.unknown3);
+		ndr->depth++;
+		ndr_print_uint32(ndr, "unknown3", *r->out.unknown3);
+		ndr->depth--;
+		ndr_print_ptr(ndr, "unknown4", r->out.unknown4);
+		ndr->depth++;
+		if (r->out.unknown4) {
+			ndr_print_uint16(ndr, "unknown4", *r->out.unknown4);
+		}
+		ndr->depth--;
+		ndr_print_ptr(ndr, "unknown5a", r->out.unknown5a);
+		ndr->depth++;
+		if (r->out.unknown5a) {
+			ndr_print_ptr(ndr, "unknown5a", *r->out.unknown5a);
+			ndr->depth++;
+			if (*r->out.unknown5a) {
+				ndr_print_string(ndr, "unknown5a", *r->out.unknown5a);
+			}
+			ndr->depth--;
+		}
+		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
@@ -1784,8 +2034,19 @@ _PUBLIC_ void ndr_print_PNP_HwProfFlags(struct ndr_print *ndr, const char *name,
 static enum ndr_err_code ndr_push_PNP_GetHwProfInfo(struct ndr_push *ndr, int flags, const struct PNP_GetHwProfInfo *r)
 {
 	if (flags & NDR_IN) {
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.idx));
+		if (r->in.info == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_PNP_HwProfInfo(ndr, NDR_SCALARS, r->in.info));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
 	}
 	if (flags & NDR_OUT) {
+		if (r->out.info == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_PNP_HwProfInfo(ndr, NDR_SCALARS, r->out.info));
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
 	return NDR_ERR_SUCCESS;
@@ -1793,9 +2054,31 @@ static enum ndr_err_code ndr_push_PNP_GetHwProfInfo(struct ndr_push *ndr, int fl
 
 static enum ndr_err_code ndr_pull_PNP_GetHwProfInfo(struct ndr_pull *ndr, int flags, struct PNP_GetHwProfInfo *r)
 {
+	TALLOC_CTX *_mem_save_info_0;
 	if (flags & NDR_IN) {
+		ZERO_STRUCT(r->out);
+
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.idx));
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->in.info);
+		}
+		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_PNP_HwProfInfo(ndr, NDR_SCALARS, r->in.info));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
+		NDR_PULL_ALLOC(ndr, r->out.info);
+		*r->out.info = *r->in.info;
 	}
 	if (flags & NDR_OUT) {
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->out.info);
+		}
+		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_PNP_HwProfInfo(ndr, NDR_SCALARS, r->out.info));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
 	return NDR_ERR_SUCCESS;
@@ -1811,11 +2094,22 @@ _PUBLIC_ void ndr_print_PNP_GetHwProfInfo(struct ndr_print *ndr, const char *nam
 	if (flags & NDR_IN) {
 		ndr_print_struct(ndr, "in", "PNP_GetHwProfInfo");
 		ndr->depth++;
+		ndr_print_uint32(ndr, "idx", r->in.idx);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list