Fill in a REGVAL_BUFFER for the data given a REGISTRY_VALUE
*******************************************************************/
-static uint32 reg_init_regval_buffer( REGVAL_BUFFER *buf2, REGISTRY_VALUE *val )
+uint32 reg_init_regval_buffer( REGVAL_BUFFER *buf2, REGISTRY_VALUE *val )
{
uint32 real_size = 0;
Inits a registry key create request
********************************************************************/
-void init_reg_q_create_key(REG_Q_CREATE_KEY *q_c, POLICY_HND *hnd,
- char *name, char *class, uint32 access_desired,
+void init_reg_q_create_key_ex(REG_Q_CREATE_KEY_EX *q_c, POLICY_HND *hnd,
+ char *name, char *key_class, uint32 access_desired,
SEC_DESC_BUF *sec_buf)
{
ZERO_STRUCTP(q_c);
- memcpy(&q_c->pnt_pol, hnd, sizeof(q_c->pnt_pol));
+ memcpy(&q_c->handle, hnd, sizeof(q_c->handle));
init_unistr4( &q_c->name, name, UNI_STR_TERMINATE );
- init_unistr4( &q_c->class, class, UNI_STR_TERMINATE );
+ init_unistr4( &q_c->key_class, key_class, UNI_STR_TERMINATE );
q_c->access = access_desired;
q_c->ptr2 = 1;
init_buf_hdr(&q_c->hdr_sec, sec_buf->len, sec_buf->len);
q_c->ptr3 = 1;
- q_c->unknown_2 = 0x00000000;
+ q_c->disposition = TALLOC_P( get_talloc_ctx(), uint32 );
}
/*******************************************************************
Marshalls a registry key create request
********************************************************************/
-BOOL reg_io_q_create_key(const char *desc, REG_Q_CREATE_KEY *q_u,
+BOOL reg_io_q_create_key_ex(const char *desc, REG_Q_CREATE_KEY_EX *q_u,
prs_struct *ps, int depth)
{
if ( !q_u )
return False;
- prs_debug(ps, depth, desc, "reg_io_q_create_key");
+ prs_debug(ps, depth, desc, "reg_io_q_create_key_ex");
depth++;
if(!prs_align(ps))
return False;
- if(!smb_io_pol_hnd("", &q_u->pnt_pol, ps, depth))
+ if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
return False;
if(!prs_unistr4 ("name", ps, depth, &q_u->name))
if(!prs_align(ps))
return False;
- if(!prs_unistr4 ("class", ps, depth, &q_u->class))
+ if(!prs_unistr4 ("key_class", ps, depth, &q_u->key_class))
return False;
if(!prs_align(ps))
return False;
- if(!prs_uint32("reserved", ps, depth, &q_u->reserved))
+ if(!prs_uint32("options", ps, depth, &q_u->options))
return False;
if(!prs_uint32("access", ps, depth, &q_u->access))
return False;
if(!prs_pointer("sec_info", ps, depth, (void**)&q_u->sec_info, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
return False;
- if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
- return False;
- if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data,
- ps, depth))
- return False;
+ if ( q_u->sec_info ) {
+ if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
+ return False;
+ if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data, ps, depth))
+ return False;
+ }
-#if 0
- if(!prs_uint32("unknown_2", ps, depth, &q_u->unknown_2))
+ if(!prs_pointer("disposition", ps, depth, (void**)&q_u->disposition, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
return False;
-#endif
return True;
}
Unmarshalls a registry key create response
********************************************************************/
-BOOL reg_io_r_create_key(const char *desc, REG_R_CREATE_KEY *r_u,
+BOOL reg_io_r_create_key_ex(const char *desc, REG_R_CREATE_KEY_EX *r_u,
prs_struct *ps, int depth)
{
if ( !r_u )
return False;
- prs_debug(ps, depth, desc, "reg_io_r_create_key");
+ prs_debug(ps, depth, desc, "reg_io_r_create_key_ex");
depth++;
if(!prs_align(ps))
return False;
- if(!smb_io_pol_hnd("", &r_u->key_pol, ps, depth))
+ if(!smb_io_pol_hnd("", &r_u->handle, ps, depth))
return False;
- if(!prs_uint32("unknown", ps, depth, &r_u->unknown))
+ if(!prs_uint32("disposition", ps, depth, &r_u->disposition))
return False;
if(!prs_werror("status", ps, depth, &r_u->status))
{
ZERO_STRUCTP(q_c);
- memcpy(&q_c->pnt_pol, hnd, sizeof(q_c->pnt_pol));
+ memcpy(&q_c->handle, hnd, sizeof(q_c->handle));
init_unistr4(&q_c->name, name, UNI_STR_TERMINATE);
}
reads or writes a structure.
********************************************************************/
-BOOL reg_io_q_delete_val(const char *desc, REG_Q_DELETE_VALUE *q_u,
+BOOL reg_io_q_delete_value(const char *desc, REG_Q_DELETE_VALUE *q_u,
prs_struct *ps, int depth)
{
if ( !q_u )
return False;
- prs_debug(ps, depth, desc, "reg_io_q_delete_val");
+ prs_debug(ps, depth, desc, "reg_io_q_delete_value");
depth++;
if(!prs_align(ps))
return False;
- if(!smb_io_pol_hnd("", &q_u->pnt_pol, ps, depth))
+ if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
return False;
if(!prs_unistr4("name", ps, depth, &q_u->name))
return False;
- if(!prs_align(ps))
- return False;
return True;
}
reads or writes a structure.
********************************************************************/
-BOOL reg_io_r_delete_val(const char *desc, REG_R_DELETE_VALUE *r_u,
+BOOL reg_io_r_delete_value(const char *desc, REG_R_DELETE_VALUE *r_u,
prs_struct *ps, int depth)
{
if ( !r_u )
return False;
- prs_debug(ps, depth, desc, "reg_io_r_delete_val");
+ prs_debug(ps, depth, desc, "reg_io_r_delete_value");
depth++;
if(!prs_align(ps))
{
ZERO_STRUCTP(q_c);
- memcpy(&q_c->pnt_pol, hnd, sizeof(q_c->pnt_pol));
+ memcpy(&q_c->handle, hnd, sizeof(q_c->handle));
init_unistr4(&q_c->name, name, UNI_STR_TERMINATE);
}
if(!prs_align(ps))
return False;
- if(!smb_io_pol_hnd("", &q_u->pnt_pol, ps, depth))
+ if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
return False;
if(!prs_unistr4("", ps, depth, &q_u->name))
return False;
- if(!prs_align(ps))
- return False;
return True;
}
Inits a structure.
********************************************************************/
-void init_reg_q_query_key(REG_Q_QUERY_KEY *q_o, POLICY_HND *hnd, const char *class)
+void init_reg_q_query_key(REG_Q_QUERY_KEY *q_o, POLICY_HND *hnd, const char *key_class)
{
ZERO_STRUCTP(q_o);
memcpy(&q_o->pol, hnd, sizeof(q_o->pol));
- init_unistr4(&q_o->class, class, UNI_STR_TERMINATE);
+ init_unistr4(&q_o->key_class, key_class, UNI_STR_TERMINATE);
}
/*******************************************************************
if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
return False;
- if(!prs_unistr4("class", ps, depth, &q_u->class))
- return False;
-
- if(!prs_align(ps))
+ if(!prs_unistr4("key_class", ps, depth, &q_u->key_class))
return False;
return True;
if(!prs_align(ps))
return False;
- if(!prs_unistr4("class", ps, depth, &r_u->class))
+ if(!prs_unistr4("key_class", ps, depth, &r_u->key_class))
return False;
if(!prs_align(ps))
if(!prs_align(ps))
return False;
- if(!prs_uint32("unknown", ps, depth, &r_u->unknown))
+ if(!prs_uint32("win_version", ps, depth, &r_u->win_version))
return False;
if(!prs_werror("status" , ps, depth, &r_u->status))
return False;
void init_reg_q_set_key_sec(REG_Q_SET_KEY_SEC *q_u, POLICY_HND *pol,
uint32 sec_info, SEC_DESC_BUF *sec_desc_buf)
{
- memcpy(&q_u->pol, pol, sizeof(q_u->pol));
+ memcpy(&q_u->handle, pol, sizeof(q_u->handle));
q_u->sec_info = sec_info;
if(!prs_align(ps))
return False;
- if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+ if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
return False;
if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info))
uint32 sec_info, uint32 sec_buf_size,
SEC_DESC_BUF *psdb)
{
- memcpy(&q_u->pol, pol, sizeof(q_u->pol));
+ memcpy(&q_u->handle, pol, sizeof(q_u->handle));
q_u->sec_info = sec_info;
if(!prs_align(ps))
return False;
- if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+ if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
return False;
if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info))
makes a structure.
********************************************************************/
-BOOL init_reg_q_info(REG_Q_INFO *q_u, POLICY_HND *pol, const char *val_name,
+BOOL init_reg_q_query_value(REG_Q_QUERY_VALUE *q_u, POLICY_HND *pol, const char *val_name,
REGVAL_BUFFER *value_output)
{
if (q_u == NULL)
reads or writes a structure.
********************************************************************/
-BOOL reg_io_q_info(const char *desc, REG_Q_INFO *q_u, prs_struct *ps, int depth)
+BOOL reg_io_q_query_value(const char *desc, REG_Q_QUERY_VALUE *q_u, prs_struct *ps, int depth)
{
if ( !q_u )
return False;
- prs_debug(ps, depth, desc, "reg_io_q_info");
+ prs_debug(ps, depth, desc, "reg_io_q_query_value");
depth++;
if(!prs_align(ps))
/*******************************************************************
Inits a structure.
- New version to replace older init_reg_r_info()
+ New version to replace older init_reg_r_query_value()
********************************************************************/
-BOOL init_reg_r_info(uint32 include_keyval, REG_R_INFO *r_u,
+BOOL init_reg_r_query_value(uint32 include_keyval, REG_R_QUERY_VALUE *r_u,
REGISTRY_VALUE *val, WERROR status)
{
uint32 buf_len = 0;
reads or writes a structure.
********************************************************************/
-BOOL reg_io_r_info(const char *desc, REG_R_INFO *r_u, prs_struct *ps, int depth)
+BOOL reg_io_r_query_value(const char *desc, REG_R_QUERY_VALUE *r_u, prs_struct *ps, int depth)
{
if ( !r_u )
return False;
- prs_debug(ps, depth, desc, "reg_io_r_info");
+ prs_debug(ps, depth, desc, "reg_io_r_query_value");
depth++;
if(!prs_align(ps))
{
ZERO_STRUCTP(q_u);
- memcpy(&q_u->pol, pol, sizeof(q_u->pol));
+ memcpy(&q_u->handle, pol, sizeof(q_u->handle));
init_unistr4(&q_u->name, val_name, UNI_STR_TERMINATE);
reads or writes a structure.
********************************************************************/
-BOOL reg_io_q_set_val(const char *desc, REG_Q_SET_VALUE *q_u, prs_struct *ps, int depth)
+BOOL reg_io_q_set_value(const char *desc, REG_Q_SET_VALUE *q_u, prs_struct *ps, int depth)
{
if (q_u == NULL)
return False;
- prs_debug(ps, depth, desc, "reg_io_q_set_val");
+ prs_debug(ps, depth, desc, "reg_io_q_set_value");
depth++;
if(!prs_align(ps))
return False;
- if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+ if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
return False;
if(!prs_unistr4("name", ps, depth, &q_u->name ))
reads or writes a structure.
********************************************************************/
-BOOL reg_io_r_set_val(const char *desc, REG_R_SET_VALUE *q_u, prs_struct *ps, int depth)
+BOOL reg_io_r_set_value(const char *desc, REG_R_SET_VALUE *q_u, prs_struct *ps, int depth)
{
if ( !q_u )
return False;
- prs_debug(ps, depth, desc, "reg_io_r_set_val");
+ prs_debug(ps, depth, desc, "reg_io_r_set_value");
depth++;
if(!prs_align(ps))
if ( !r_u )
return;
- init_unistr4( &r_u->keyname, subkey, STR_TERMINATE );
+ init_unistr4( &r_u->keyname, subkey, UNI_STR_TERMINATE );
r_u->classname = TALLOC_ZERO_P( get_talloc_ctx(), UNISTR4 );
r_u->time = TALLOC_ZERO_P( get_talloc_ctx(), NTTIME );
}
return True;
}
-/*******************************************************************
- Inits a structure.
-********************************************************************/
-
-void init_reg_r_open_entry(REG_R_OPEN_ENTRY *r_u,
- POLICY_HND *pol, WERROR werr)
-{
- if (W_ERROR_IS_OK(werr)) {
- memcpy(&r_u->pol, pol, sizeof(r_u->pol));
- } else {
- ZERO_STRUCT(r_u->pol);
- }
- r_u->status = werr;
-}
-
/*******************************************************************
reads or writes a structure.
********************************************************************/
if(!prs_align(ps))
return False;
- if(!smb_io_pol_hnd("", &r_u->pol, ps, depth))
+ if(!smb_io_pol_hnd("handle", &r_u->handle, ps, depth))
return False;
if(!prs_werror("status", ps, depth, &r_u->status))
q_u->server = TALLOC_P( get_talloc_ctx(), uint16 );
*q_u->server = 0x1;
- q_u->message = TALLOC_P( get_talloc_ctx(), UNISTR4 );
- init_unistr4( q_u->message, msg, UNI_FLAGS_NONE );
+ q_u->message = TALLOC_ZERO_P( get_talloc_ctx(), UNISTR4 );
+
+ if ( msg && *msg ) {
+ init_unistr4( q_u->message, msg, UNI_FLAGS_NONE );
+
+ /* Win2000 is apparently very sensitive to these lengths */
+ /* do a special case here */
+
+ q_u->message->string->uni_max_len++;
+ q_u->message->size += 2;
+
+ }
q_u->timeout = timeout;
if (!prs_pointer("server", ps, depth, (void**)&q_u->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
return False;
+ if (!prs_align(ps))
+ return False;
if (!prs_pointer("message", ps, depth, (void**)&q_u->message, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
return False;
if (!prs_pointer("server", ps, depth, (void**)&q_u->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
return False;
+ if (!prs_align(ps))
+ return False;
if (!prs_pointer("message", ps, depth, (void**)&q_u->message, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
return False;
if (!prs_pointer("server", ps, depth, (void**)&q_u->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
return False;
+ if (!prs_align(ps))
+ return False;
return True;
}