}
NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.data));
if (r->in.data) {
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.size));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.data_size));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.length));
- NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.data, *r->in.length));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.value_length));
+ NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.data, *r->in.value_length));
}
- NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.size));
- if (r->in.size) {
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.size));
+ NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.data_size));
+ if (r->in.data_size) {
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.data_size));
}
- NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.length));
- if (r->in.length) {
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.length));
+ NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.value_length));
+ if (r->in.value_length) {
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.value_length));
}
}
if (flags & NDR_OUT) {
}
NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.data));
if (r->out.data) {
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.size));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.data_size));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.length));
- NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.data, *r->out.length));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.value_length));
+ NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.data, *r->out.value_length));
}
- NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.size));
- if (r->out.size) {
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.size));
+ NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.data_size));
+ if (r->out.data_size) {
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.data_size));
}
- NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.length));
- if (r->out.length) {
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.length));
+ NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.value_length));
+ if (r->out.value_length) {
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.value_length));
}
NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
}
{
uint32_t _ptr_type;
uint32_t _ptr_data;
- uint32_t _ptr_size;
- uint32_t _ptr_length;
+ uint32_t _ptr_data_size;
+ uint32_t _ptr_value_length;
TALLOC_CTX *_mem_save_handle_0;
TALLOC_CTX *_mem_save_type_0;
TALLOC_CTX *_mem_save_data_0;
- TALLOC_CTX *_mem_save_size_0;
- TALLOC_CTX *_mem_save_length_0;
+ TALLOC_CTX *_mem_save_data_size_0;
+ TALLOC_CTX *_mem_save_value_length_0;
if (flags & NDR_IN) {
ZERO_STRUCT(r->out);
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.data, ndr_get_array_length(ndr, &r->in.data)));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
}
- NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_size));
- if (_ptr_size) {
- NDR_PULL_ALLOC(ndr, r->in.size);
+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data_size));
+ if (_ptr_data_size) {
+ NDR_PULL_ALLOC(ndr, r->in.data_size);
} else {
- r->in.size = NULL;
+ r->in.data_size = NULL;
}
- if (r->in.size) {
- _mem_save_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->in.size, 0);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.size));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_size_0, 0);
+ if (r->in.data_size) {
+ _mem_save_data_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->in.data_size, 0);
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.data_size));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_size_0, 0);
}
- NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_length));
- if (_ptr_length) {
- NDR_PULL_ALLOC(ndr, r->in.length);
+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_value_length));
+ if (_ptr_value_length) {
+ NDR_PULL_ALLOC(ndr, r->in.value_length);
} else {
- r->in.length = NULL;
+ r->in.value_length = NULL;
}
- if (r->in.length) {
- _mem_save_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->in.length, 0);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.length));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_length_0, 0);
+ if (r->in.value_length) {
+ _mem_save_value_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->in.value_length, 0);
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.value_length));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_value_length_0, 0);
}
if (r->in.data) {
- if (r->in.size == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
- NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.data, *r->in.size));
+ if (r->in.data_size == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+ NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.data, *r->in.data_size));
}
if (r->in.data) {
- if (r->in.length == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
- NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->in.data, *r->in.length));
+ if (r->in.value_length == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+ NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->in.data, *r->in.value_length));
}
}
if (flags & NDR_OUT) {
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, ndr_get_array_length(ndr, &r->out.data)));
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
}
- NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_size));
- if (_ptr_size) {
- NDR_PULL_ALLOC(ndr, r->out.size);
+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data_size));
+ if (_ptr_data_size) {
+ NDR_PULL_ALLOC(ndr, r->out.data_size);
} else {
- r->out.size = NULL;
+ r->out.data_size = NULL;
}
- if (r->out.size) {
- _mem_save_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->out.size, 0);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.size));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_size_0, 0);
+ if (r->out.data_size) {
+ _mem_save_data_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->out.data_size, 0);
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.data_size));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_size_0, 0);
}
- NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_length));
- if (_ptr_length) {
- NDR_PULL_ALLOC(ndr, r->out.length);
+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_value_length));
+ if (_ptr_value_length) {
+ NDR_PULL_ALLOC(ndr, r->out.value_length);
} else {
- r->out.length = NULL;
+ r->out.value_length = NULL;
}
- if (r->out.length) {
- _mem_save_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
- NDR_PULL_SET_MEM_CTX(ndr, r->out.length, 0);
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.length));
- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_length_0, 0);
+ if (r->out.value_length) {
+ _mem_save_value_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
+ NDR_PULL_SET_MEM_CTX(ndr, r->out.value_length, 0);
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.value_length));
+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_value_length_0, 0);
}
NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
if (r->out.data) {
- if (r->out.size == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
- NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.data, *r->out.size));
+ if (r->out.data_size == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+ NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.data, *r->out.data_size));
}
if (r->out.data) {
- if (r->out.length == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
- NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->out.data, *r->out.length));
+ if (r->out.value_length == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+ NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->out.data, *r->out.value_length));
}
}
return NT_STATUS_OK;
ndr_print_ptr(ndr, "data", r->in.data);
ndr->depth++;
if (r->in.data) {
- ndr_print_array_uint8(ndr, "data", r->in.data, *r->in.length);
+ ndr_print_array_uint8(ndr, "data", r->in.data, *r->in.value_length);
}
ndr->depth--;
- ndr_print_ptr(ndr, "size", r->in.size);
+ ndr_print_ptr(ndr, "data_size", r->in.data_size);
ndr->depth++;
- if (r->in.size) {
- ndr_print_uint32(ndr, "size", *r->in.size);
+ if (r->in.data_size) {
+ ndr_print_uint32(ndr, "data_size", *r->in.data_size);
}
ndr->depth--;
- ndr_print_ptr(ndr, "length", r->in.length);
+ ndr_print_ptr(ndr, "value_length", r->in.value_length);
ndr->depth++;
- if (r->in.length) {
- ndr_print_uint32(ndr, "length", *r->in.length);
+ if (r->in.value_length) {
+ ndr_print_uint32(ndr, "value_length", *r->in.value_length);
}
ndr->depth--;
ndr->depth--;
ndr_print_ptr(ndr, "data", r->out.data);
ndr->depth++;
if (r->out.data) {
- ndr_print_array_uint8(ndr, "data", r->out.data, *r->out.length);
+ ndr_print_array_uint8(ndr, "data", r->out.data, *r->out.value_length);
}
ndr->depth--;
- ndr_print_ptr(ndr, "size", r->out.size);
+ ndr_print_ptr(ndr, "data_size", r->out.data_size);
ndr->depth++;
- if (r->out.size) {
- ndr_print_uint32(ndr, "size", *r->out.size);
+ if (r->out.data_size) {
+ ndr_print_uint32(ndr, "data_size", *r->out.data_size);
}
ndr->depth--;
- ndr_print_ptr(ndr, "length", r->out.length);
+ ndr_print_ptr(ndr, "value_length", r->out.value_length);
ndr->depth++;
- if (r->out.length) {
- ndr_print_uint32(ndr, "length", *r->out.length);
+ if (r->out.value_length) {
+ ndr_print_uint32(ndr, "value_length", *r->out.value_length);
}
ndr->depth--;
ndr_print_WERROR(ndr, "result", r->out.result);
reg_reply_info
********************************************************************/
-WERROR _winreg_QueryValue(pipes_struct *p, struct policy_handle *handle, struct winreg_String value_name, enum winreg_Type *type, uint8_t *data, uint32_t *size, uint32_t *length)
+WERROR _winreg_QueryValue(pipes_struct *p, struct policy_handle *handle, struct winreg_String value_name, enum winreg_Type *type, uint8_t *data, uint32_t *data_size, uint32_t *value_length)
{
WERROR status = WERR_BADFILE;
char *name;
if ( !regkey )
return WERR_BADFID;
- *size = *length = *type = 0;
+ *value_length = *type = 0;
DEBUG(7,("_reg_info: policy key name = [%s]\n", regkey->name));
DEBUG(7,("_reg_info: policy key type = [%08x]\n", regkey->type));
{
uint32 outbuf_len;
prs_struct prs_hkpd;
- prs_init(&prs_hkpd, *size, p->mem_ctx, MARSHALL);
- status = reg_perfcount_get_hkpd(&prs_hkpd, *size, &outbuf_len, NULL);
+ prs_init(&prs_hkpd, *data_size, p->mem_ctx, MARSHALL);
+ status = reg_perfcount_get_hkpd(&prs_hkpd, *data_size, &outbuf_len, NULL);
regval_ctr_addvalue(regvals, "HKPD", REG_BINARY,
prs_hkpd.data_p, outbuf_len);
val = dup_registry_value(regval_ctr_specific_value(regvals, 0));
/* we probably have a request for a specific object here */
uint32 outbuf_len;
prs_struct prs_hkpd;
- prs_init(&prs_hkpd, *size, p->mem_ctx, MARSHALL);
- status = reg_perfcount_get_hkpd(&prs_hkpd, *size, &outbuf_len, name);
+ prs_init(&prs_hkpd, *data_size, p->mem_ctx, MARSHALL);
+ status = reg_perfcount_get_hkpd(&prs_hkpd, *data_size, &outbuf_len, name);
regval_ctr_addvalue(regvals, "HKPD", REG_BINARY,
prs_hkpd.data_p, outbuf_len);
}
}
+ /* if we have a value then copy it to the output */
+
if ( val ) {
- *size = regval_size( val );
- *length = regval_size( val );
+ *value_length = regval_size( val );
+ *type = val->type;
-#if 0
- if ( (*data = talloc_memdup( p->mem_ctx, regval_data_p(val), *size )) == NULL ) {
- status = WERR_NOMEM;
+ if ( *data_size == 0 ) {
+ status = WERR_OK;
+ } else if ( *value_length > *data_size ) {
+ status = WERR_MORE_DATA;
+ } else {
+ memcpy( data, regval_data_p(val), *value_length );
+ status = WERR_OK;
}
-#endif
-
- *type = val->type;
}
TALLOC_FREE( regvals );