parse_reg.c
来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 1,709 行 · 第 1/3 页
C
1,709 行
BOOL reg_io_q_restore_key(const char *desc, REG_Q_RESTORE_KEY *q_u, prs_struct *ps, int depth){ if ( !q_u ) return False; prs_debug(ps, depth, desc, "reg_io_q_restore_key"); depth++; if(!prs_align(ps)) return False; if(!smb_io_pol_hnd("", &q_u->pol, ps, depth)) return False; if(!prs_unistr4("filename", ps, depth, &q_u->filename)) return False; if(!prs_uint32("flags", ps, depth, &q_u->flags)) return False; return True;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_r_restore_key(const char *desc, REG_R_RESTORE_KEY *r_u, prs_struct *ps, int depth){ if ( !r_u ) return False; prs_debug(ps, depth, desc, "reg_io_r_restore_key"); depth++; if(!prs_align(ps)) return False; if(!prs_werror("status" , ps, depth, &r_u->status)) return False; return True;}/***************************************************************************************************************************************/void init_q_reg_save_key( REG_Q_SAVE_KEY *q_u, POLICY_HND *handle, const char *fname ){ memcpy(&q_u->pol, handle, sizeof(q_u->pol)); init_unistr4( &q_u->filename, fname, UNI_STR_TERMINATE ); q_u->sec_attr = NULL;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_q_save_key(const char *desc, REG_Q_SAVE_KEY *q_u, prs_struct *ps, int depth){ if ( !q_u ) return False; prs_debug(ps, depth, desc, "reg_io_q_save_key"); depth++; if(!prs_align(ps)) return False; if(!smb_io_pol_hnd("", &q_u->pol, ps, depth)) return False; if(!prs_unistr4("filename", ps, depth, &q_u->filename)) return False;#if 0 /* reg_io_sec_attr() */ if(!prs_uint32("unknown", ps, depth, &q_u->unknown)) return False;#endif return True;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_r_save_key(const char *desc, REG_R_SAVE_KEY *r_u, prs_struct *ps, int depth){ if ( !r_u ) return False; prs_debug(ps, depth, desc, "reg_io_r_save_key"); depth++; if(!prs_align(ps)) return False; if(!prs_werror("status" , ps, depth, &r_u->status)) return False; return True;}/******************************************************************* Inits an REG_Q_CLOSE structure.********************************************************************/void init_reg_q_close(REG_Q_CLOSE *q_c, POLICY_HND *hnd){ DEBUG(5,("init_reg_q_close\n")); memcpy(&q_c->pol, hnd, sizeof(q_c->pol));}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_q_close(const char *desc, REG_Q_CLOSE *q_u, prs_struct *ps, int depth){ if (q_u == NULL) return False; prs_debug(ps, depth, desc, "reg_io_q_close"); depth++; if(!prs_align(ps)) return False; if(!smb_io_pol_hnd("", &q_u->pol, ps, depth)) return False; if(!prs_align(ps)) return False; return True;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_r_close(const char *desc, REG_R_CLOSE *r_u, prs_struct *ps, int depth){ if ( !r_u ) return False; prs_debug(ps, depth, desc, "reg_io_r_close"); depth++; if(!prs_align(ps)) return False; if(!smb_io_pol_hnd("", &r_u->pol, ps, depth)) return False; if(!prs_align(ps)) return False; if(!prs_werror("status", ps, depth, &r_u->status)) return False; return True;}/*******************************************************************makes a structure.********************************************************************/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->handle, pol, sizeof(q_u->handle)); q_u->sec_info = sec_info; q_u->ptr = 1; init_buf_hdr(&q_u->hdr_sec, sec_desc_buf->len, sec_desc_buf->len); q_u->data = sec_desc_buf;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_q_set_key_sec(const char *desc, REG_Q_SET_KEY_SEC *q_u, prs_struct *ps, int depth){ if ( !q_u ) return False; prs_debug(ps, depth, desc, "reg_io_q_set_key_sec"); depth++; if(!prs_align(ps)) return False; if(!smb_io_pol_hnd("", &q_u->handle, ps, depth)) return False; if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info)) return False; if(!prs_uint32("ptr ", ps, depth, &q_u->ptr)) return False; if(!reg_io_hdrbuf_sec(q_u->ptr, NULL, &q_u->hdr_sec, q_u->data, ps, depth)) return False; return True;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_r_set_key_sec(const char *desc, REG_R_SET_KEY_SEC *q_u, prs_struct *ps, int depth){ if ( !q_u ) return False; prs_debug(ps, depth, desc, "reg_io_r_set_key_sec"); depth++; if(!prs_align(ps)) return False; if(!prs_werror("status", ps, depth, &q_u->status)) return False; return True;}/*******************************************************************makes a structure.********************************************************************/void init_reg_q_get_key_sec(REG_Q_GET_KEY_SEC *q_u, POLICY_HND *pol, uint32 sec_info, uint32 sec_buf_size, SEC_DESC_BUF *psdb){ memcpy(&q_u->handle, pol, sizeof(q_u->handle)); q_u->sec_info = sec_info; q_u->ptr = psdb != NULL ? 1 : 0; q_u->data = psdb; init_buf_hdr(&q_u->hdr_sec, sec_buf_size, 0);}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_q_get_key_sec(const char *desc, REG_Q_GET_KEY_SEC *q_u, prs_struct *ps, int depth){ if ( !q_u ) return False; prs_debug(ps, depth, desc, "reg_io_q_get_key_sec"); depth++; if(!prs_align(ps)) return False; if(!smb_io_pol_hnd("", &q_u->handle, ps, depth)) return False; if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info)) return False; if(!prs_uint32("ptr ", ps, depth, &q_u->ptr)) return False; if(!reg_io_hdrbuf_sec(q_u->ptr, NULL, &q_u->hdr_sec, q_u->data, ps, depth)) return False; return True;}#if 0/*******************************************************************makes a structure.********************************************************************/ void init_reg_r_get_key_sec(REG_R_GET_KEY_SEC *r_i, POLICY_HND *pol, uint32 buf_len, uint8 *buf, NTSTATUS status){ r_i->ptr = 1; init_buf_hdr(&r_i->hdr_sec, buf_len, buf_len); init_sec_desc_buf(r_i->data, buf_len, 1); r_i->status = status; /* 0x0000 0000 or 0x0000 007a */}#endif /*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_r_get_key_sec(const char *desc, REG_R_GET_KEY_SEC *q_u, prs_struct *ps, int depth){ if ( !q_u ) return False; prs_debug(ps, depth, desc, "reg_io_r_get_key_sec"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr ", ps, depth, &q_u->ptr)) return False; if (q_u->ptr != 0) { if(!smb_io_hdrbuf("", &q_u->hdr_sec, ps, depth)) return False; if(!sec_io_desc_buf("", &q_u->data, ps, depth)) return False; if(!prs_align(ps)) return False; } if(!prs_werror("status", ps, depth, &q_u->status)) return False; return True;}/*******************************************************************makes a structure.********************************************************************/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) return False; q_u->pol = *pol; init_unistr4(&q_u->name, val_name, UNI_STR_TERMINATE); q_u->ptr_reserved = 1; q_u->ptr_buf = 1; q_u->ptr_bufsize = 1; q_u->bufsize = value_output->buf_max_len; q_u->buf_unk = 0; q_u->unk1 = 0; q_u->ptr_buflen = 1; q_u->buflen = value_output->buf_max_len; q_u->ptr_buflen2 = 1; q_u->buflen2 = 0; return True;}/*******************************************************************reads or writes a structure.********************************************************************/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_query_value"); depth++; if(!prs_align(ps)) return False; if(!smb_io_pol_hnd("", &q_u->pol, ps, depth)) return False; if(!prs_unistr4("name", ps, depth, &q_u->name)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_reserved", ps, depth, &(q_u->ptr_reserved))) return False; if(!prs_uint32("ptr_buf", ps, depth, &(q_u->ptr_buf))) return False; if(q_u->ptr_buf) { if(!prs_uint32("ptr_bufsize", ps, depth, &(q_u->ptr_bufsize))) return False; if(!prs_uint32("bufsize", ps, depth, &(q_u->bufsize))) return False; if(!prs_uint32("buf_unk", ps, depth, &(q_u->buf_unk))) return False; } if(!prs_uint32("unk1", ps, depth, &(q_u->unk1))) return False; if(!prs_uint32("ptr_buflen", ps, depth, &(q_u->ptr_buflen))) return False; if (q_u->ptr_buflen) { if(!prs_uint32("buflen", ps, depth, &(q_u->buflen))) return False; if(!prs_uint32("ptr_buflen2", ps, depth, &(q_u->ptr_buflen2))) return False; if(!prs_uint32("buflen2", ps, depth, &(q_u->buflen2))) return False; } return True;}/******************************************************************* Inits a structure. New version to replace older init_reg_r_query_value()********************************************************************/BOOL init_reg_r_query_value(uint32 include_keyval, REG_R_QUERY_VALUE *r_u, REGISTRY_VALUE *val, WERROR status){ uint32 buf_len = 0; REGVAL_BUFFER buf2; if( !r_u || !val ) return False; r_u->type = TALLOC_P( get_talloc_ctx(), uint32 ); *r_u->type = val->type; buf_len = reg_init_regval_buffer( &buf2, val ); r_u->buf_max_len = TALLOC_P( get_talloc_ctx(), uint32 ); *r_u->buf_max_len = buf_len; r_u->buf_len = TALLOC_P( get_talloc_ctx(), uint32 ); *r_u->buf_len = buf_len; /* if include_keyval is not set, don't send the key value, just the buflen data. probably used by NT5 to allocate buffer space - SK */ if ( include_keyval ) { r_u->value = TALLOC_P( get_talloc_ctx(), REGVAL_BUFFER ); /* steal the memory */ *r_u->value = buf2; } r_u->status = status; return True;}/*******************************************************************reads or writes a structure.********************************************************************/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_query_value"); depth++; if(!prs_align(ps)) return False; if ( !prs_pointer("type", ps, depth, (void**)&r_u->type, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32)) return False; if ( !prs_pointer("value", ps, depth, (void**)&r_u->value, sizeof(REGVAL_BUFFER), (PRS_POINTER_CAST)smb_io_regval_buffer)) return False; if(!prs_align(ps)) return False; if ( !prs_pointer("buf_max_len", ps, depth, (void**)&r_u->buf_max_len, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32)) return False; if ( !prs_pointer("buf_len", ps, depth, (void**)&r_u->buf_len, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32)) return False; if(!prs_werror("status", ps, depth, &r_u->status)) return False; return True;}/*******************************************************************makes a structure.********************************************************************/void init_reg_q_enum_val(REG_Q_ENUM_VALUE *q_u, POLICY_HND *pol, uint32 val_idx, uint32 max_name_len, uint32 max_buf_len){ ZERO_STRUCTP(q_u); memcpy(&q_u->pol, pol, sizeof(q_u->pol)); q_u->val_index = val_idx; q_u->name.size = max_name_len*2; q_u->name.string = TALLOC_ZERO_P( get_talloc_ctx(), UNISTR2 ); q_u->name.string->uni_max_len = max_name_len; q_u->type = TALLOC_P( get_talloc_ctx(), uint32 ); *q_u->type = 0x0; q_u->value = TALLOC_ZERO_P( get_talloc_ctx(), REGVAL_BUFFER ); q_u->value->buf_max_len = max_buf_len; q_u->buffer_len = TALLOC_P( get_talloc_ctx(), uint32 ); *q_u->buffer_len = max_buf_len; q_u->name_len = TALLOC_P( get_talloc_ctx(), uint32 ); *q_u->name_len = 0x0;}/*******************************************************************makes a structure.********************************************************************/void init_reg_r_enum_val(REG_R_ENUM_VALUE *r_u, REGISTRY_VALUE *val ){ uint32 real_size; ZERO_STRUCTP(r_u); /* value name */ DEBUG(10,("init_reg_r_enum_val: Valuename => [%s]\n", val->valuename)); init_unistr4( &r_u->name, val->valuename, UNI_STR_TERMINATE); /* type */ r_u->type = TALLOC_P( get_talloc_ctx(), uint32 ); *r_u->type = val->type; /* REG_SZ & REG_MULTI_SZ must be converted to UNICODE */ r_u->value = TALLOC_P( get_talloc_ctx(), REGVAL_BUFFER ); real_size = reg_init_regval_buffer( r_u->value, val ); /* lengths */ r_u->buffer_len1 = TALLOC_P( get_talloc_ctx(), uint32 ); *r_u->buffer_len1 = real_size; r_u->buffer_len2 = TALLOC_P( get_talloc_ctx(), uint32 ); *r_u->buffer_len2 = real_size;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL reg_io_q_enum_val(const char *desc, REG_Q_ENUM_VALUE *q_u, prs_struct *ps, int depth){ if (q_u == NULL) return False; prs_debug(ps, depth, desc, "reg_io_q_enum_val"); depth++; if(!prs_align(ps)) return False; if(!smb_io_pol_hnd("", &q_u->pol, ps, depth)) return False;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?