registry/reg_objects.c

ソースコードを見る。

関数

int regsubkey_ctr_addkey (REGSUBKEY_CTR *ctr, const char *keyname)
int regsubkey_ctr_delkey (REGSUBKEY_CTR *ctr, const char *keyname)
BOOL regsubkey_ctr_key_exists (REGSUBKEY_CTR *ctr, const char *keyname)
int regsubkey_ctr_numkeys (REGSUBKEY_CTR *ctr)
char * regsubkey_ctr_specific_key (REGSUBKEY_CTR *ctr, uint32 key_index)
int regval_ctr_numvals (REGVAL_CTR *ctr)
REGISTRY_VALUEdup_registry_value (REGISTRY_VALUE *val)
void free_registry_value (REGISTRY_VALUE *val)
uint8 * regval_data_p (REGISTRY_VALUE *val)
uint32 regval_size (REGISTRY_VALUE *val)
char * regval_name (REGISTRY_VALUE *val)
uint32 regval_type (REGISTRY_VALUE *val)
REGISTRY_VALUEregval_ctr_specific_value (REGVAL_CTR *ctr, uint32 idx)
BOOL regval_ctr_key_exists (REGVAL_CTR *ctr, const char *value)
int regval_ctr_addvalue (REGVAL_CTR *ctr, const char *name, uint16 type, const char *data_p, size_t size)
int regval_ctr_copyvalue (REGVAL_CTR *ctr, REGISTRY_VALUE *val)
int regval_ctr_delvalue (REGVAL_CTR *ctr, const char *name)
REGISTRY_VALUEregval_ctr_getvalue (REGVAL_CTR *ctr, const char *name)
uint32 regval_dword (REGISTRY_VALUE *val)
char * regval_sz (REGISTRY_VALUE *val)


関数

int regsubkey_ctr_addkey ( REGSUBKEY_CTR ctr,
const char *  keyname 
)

reg_objects.c44 行で定義されています。

参照先 REGSUBKEY_CTR::num_subkeysregsubkey_ctr_key_exists()REGSUBKEY_CTR::subkeystalloc_strdup().

参照元 _reg_create_key_ex()add_new_svc_name()copy_registry_tree()eventlog_add_source()eventlog_init_keys()init_registry_data()key_driver_fetch_keys()key_print_fetch_keys()key_printers_fetch_keys()reg_load_tree()regdb_fetch_keys()shares_subkey_info()write_registry_tree().

00045 {
00046         if ( !keyname )
00047                 return ctr->num_subkeys;
00048 
00049         /* make sure the keyname is not already there */
00050 
00051         if ( regsubkey_ctr_key_exists( ctr, keyname ) )
00052                 return ctr->num_subkeys;
00053                 
00054         /* allocate a space for the char* in the array */
00055                 
00056         if (ctr->subkeys == NULL) {
00057                 ctr->subkeys = TALLOC_P(ctr, char *);
00058         } else {
00059                 ctr->subkeys = TALLOC_REALLOC_ARRAY(ctr, ctr->subkeys, char *, ctr->num_subkeys+1);
00060         }
00061 
00062         if (!ctr->subkeys) {
00063                 ctr->num_subkeys = 0;
00064                 return 0;
00065         }
00066 
00067         /* allocate the string and save it in the array */
00068         
00069         ctr->subkeys[ctr->num_subkeys] = talloc_strdup( ctr, keyname );
00070         ctr->num_subkeys++;
00071         
00072         return ctr->num_subkeys;
00073 }

int regsubkey_ctr_delkey ( REGSUBKEY_CTR ctr,
const char *  keyname 
)

reg_objects.c79 行で定義されています。

参照先 REGSUBKEY_CTR::num_subkeysstrequal()REGSUBKEY_CTR::subkeys.

参照元 _reg_delete_key().

00080 {
00081         int i;
00082 
00083         if ( !keyname )
00084                 return ctr->num_subkeys;
00085 
00086         /* make sure the keyname is actually already there */
00087 
00088         for ( i=0; i<ctr->num_subkeys; i++ ) {
00089                 if ( strequal( ctr->subkeys[i], keyname ) )
00090                         break;
00091         }
00092         
00093         if ( i == ctr->num_subkeys )
00094                 return ctr->num_subkeys;
00095 
00096         /* update if we have any keys left */
00097         ctr->num_subkeys--;
00098         if ( i < ctr->num_subkeys )
00099                 memmove( &ctr->subkeys[i], &ctr->subkeys[i+1], sizeof(char*) * (ctr->num_subkeys-i) );
00100         
00101         return ctr->num_subkeys;
00102 }

BOOL regsubkey_ctr_key_exists ( REGSUBKEY_CTR ctr,
const char *  keyname 
)

reg_objects.c108 行で定義されています。

参照先 REGSUBKEY_CTR::num_subkeysstrequal()REGSUBKEY_CTR::subkeys.

参照元 eventlog_add_source()key_printers_store_keys()regdb_store_keys()regsubkey_ctr_addkey()svcctl_init_keys().

00109 {
00110         int     i;
00111         
00112         if (!ctr->subkeys) {
00113                 return False;
00114         }
00115 
00116         for ( i=0; i<ctr->num_subkeys; i++ ) {
00117                 if ( strequal( ctr->subkeys[i],keyname ) )
00118                         return True;
00119         }
00120         
00121         return False;
00122 }

int regsubkey_ctr_numkeys ( REGSUBKEY_CTR ctr  ) 

reg_objects.c128 行で定義されています。

参照先 REGSUBKEY_CTR::num_subkeys.

参照元 add_printers_by_registry()get_subkey_information()key_driver_fetch_keys()key_print_fetch_keys()key_printers_fetch_keys()key_printers_store_keys()reg_write_tree()regdb_store_keys()regdb_store_keys_internal()regfio_write_key().

00129 {
00130         return ctr->num_subkeys;
00131 }

char* regsubkey_ctr_specific_key ( REGSUBKEY_CTR ctr,
uint32  key_index 
)

reg_objects.c137 行で定義されています。

参照先 REGSUBKEY_CTR::subkeys.

参照元 add_printers_by_registry()fetch_reg_keys_specific()get_subkey_information()key_printers_store_keys()reg_write_tree()regdb_store_keys()regdb_store_keys_internal()regfio_write_key().

00138 {
00139         if ( ! (key_index < ctr->num_subkeys) )
00140                 return NULL;
00141                 
00142         return ctr->subkeys[key_index];
00143 }

int regval_ctr_numvals ( REGVAL_CTR ctr  ) 

reg_objects.c153 行で定義されています。

参照先 REGVAL_CTR::num_values.

参照元 _spoolss_enumprinterdata()_spoolss_enumprinterdataex()convert_values_to_printer_info_2()current_version()driver_arch_fetch_values()get_remote_printer_publishing_data()get_value_information()hkpt_params()key_forms_fetch_values()key_printers_fetch_values()key_printers_store_values()netlogon_params()pack_values()perflib_009_params()perflib_params()prod_options()regdb_fetch_values()regdb_pack_values()regfio_write_key()spoolss_hnd_enumprinterdataex()tcpip_params().

00154 {
00155         return ctr->num_values;
00156 }

REGISTRY_VALUE* dup_registry_value ( REGISTRY_VALUE val  ) 

reg_objects.c163 行で定義されています。

参照先 REGISTRY_VALUE::data_pmemdup()REGISTRY_VALUE::size.

参照元 _reg_query_value()fetch_reg_values_specific().

00164 {
00165         REGISTRY_VALUE  *copy = NULL;
00166         
00167         if ( !val )
00168                 return NULL;
00169         
00170         if ( !(copy = SMB_MALLOC_P( REGISTRY_VALUE)) ) {
00171                 DEBUG(0,("dup_registry_value: malloc() failed!\n"));
00172                 return NULL;
00173         }
00174         
00175         /* copy all the non-pointer initial data */
00176         
00177         memcpy( copy, val, sizeof(REGISTRY_VALUE) );
00178         
00179         copy->size = 0;
00180         copy->data_p = NULL;
00181         
00182         if ( val->data_p && val->size ) 
00183         {
00184                 if ( !(copy->data_p = (uint8 *)memdup( val->data_p,
00185                                                        val->size )) ) {
00186                         DEBUG(0,("dup_registry_value: memdup() failed for [%d] bytes!\n",
00187                                 val->size));
00188                         SAFE_FREE( copy );
00189                         return NULL;
00190                 }
00191                 copy->size = val->size;
00192         }
00193         
00194         return copy;    
00195 }

void free_registry_value ( REGISTRY_VALUE val  ) 

reg_objects.c201 行で定義されています。

参照先 REGISTRY_VALUE::data_p.

参照元 _reg_enum_value()_reg_query_value().

00202 {
00203         if ( !val )
00204                 return;
00205                 
00206         SAFE_FREE( val->data_p );
00207         SAFE_FREE( val );
00208         
00209         return;
00210 }

uint8* regval_data_p ( REGISTRY_VALUE val  ) 

reg_objects.c215 行で定義されています。

参照先 REGISTRY_VALUE::data_p.

参照元 _reg_enum_value()_spoolss_enumprinterdata()_spoolss_enumprinterdataex()convert_values_to_printer_info_2()create_vk_record()get_printer_dataex()is_printer_published()key_printers_store_values()pack_values()reg_init_regval_buffer()regdb_pack_values()regval_dword()regval_sz()svcctl_get_secdesc()svcctl_lookup_description()svcctl_lookup_dispname()sync_eventlog_params().

00216 {
00217         return val->data_p;
00218 }

uint32 regval_size ( REGISTRY_VALUE val  ) 

reg_objects.c223 行で定義されています。

参照先 REGISTRY_VALUE::size.

参照元 _reg_enum_value()_spoolss_enumprinterdata()_spoolss_enumprinterdataex()convert_values_to_printer_info_2()create_vk_record()get_printer_dataex()is_printer_published()key_printers_store_values()pack_values()reg_init_regval_buffer()regdb_pack_values()regfio_write_key()regval_sz()svcctl_get_secdesc()svcctl_lookup_description()svcctl_lookup_dispname().

00224 {
00225         return val->size;
00226 }

char* regval_name ( REGISTRY_VALUE val  ) 

reg_objects.c231 行で定義されています。

参照先 REGISTRY_VALUE::valuename.

参照元 _spoolss_enumprinterdata()_spoolss_enumprinterdataex()convert_values_to_printer_info_2()create_vk_record()key_printers_store_values()pack_values()regdb_pack_values()regfio_write_key().

00232 {
00233         return val->valuename;
00234 }

uint32 regval_type ( REGISTRY_VALUE val  ) 

reg_objects.c239 行で定義されています。

参照先 REGISTRY_VALUE::type.

参照元 _spoolss_enumprinterdata()_spoolss_enumprinterdataex()create_vk_record()get_printer_dataex()is_printer_published()key_printers_store_values()pack_values()regdb_pack_values().

00240 {
00241         return val->type;
00242 }

REGISTRY_VALUE* regval_ctr_specific_value ( REGVAL_CTR ctr,
uint32  idx 
)

reg_objects.c249 行で定義されています。

参照先 REGVAL_CTR::values.

参照元 _reg_query_value()_spoolss_enumprinterdata()_spoolss_enumprinterdataex()convert_values_to_printer_info_2()fetch_reg_values_specific()get_value_information()key_printers_fetch_values()key_printers_store_values()pack_values()regdb_pack_values()regfio_write_key()spoolss_hnd_enumprinterdataex().

00250 {
00251         if ( !(idx < ctr->num_values) )
00252                 return NULL;
00253                 
00254         return ctr->values[idx];
00255 }

BOOL regval_ctr_key_exists ( REGVAL_CTR ctr,
const char *  value 
)

reg_objects.c261 行で定義されています。

参照先 REGVAL_CTR::num_valuesstrequal()REGISTRY_VALUE::valuenameREGVAL_CTR::values.

参照元 eventlog_init_keys()init_registry_data().

00262 {
00263         int     i;
00264         
00265         for ( i=0; i<ctr->num_values; i++ ) {
00266                 if ( strequal( ctr->values[i]->valuename, value) )
00267                         return True;
00268         }
00269         
00270         return False;
00271 }

int regval_ctr_addvalue ( REGVAL_CTR ctr,
const char *  name,
uint16  type,
const char *  data_p,
size_t  size 
)

reg_objects.c276 行で定義されています。

参照先 REGISTRY_VALUE::data_pREGVAL_CTR::num_valuesregval_ctr_delvalue()REGISTRY_VALUE::sizeREGISTRY_VALUE::typeREGVAL_CTR::values.

参照元 _reg_query_value()_reg_set_value()add_new_svc_name()add_printer_data()copy_registry_tree()current_version()eventlog_add_source()eventlog_init_keys()fill_in_driver_values()fill_in_printer_values()fill_service_values()hkpt_params()init_registry_data()key_forms_fetch_values()map_bool_into_ctr()map_dword_into_ctr()map_single_multi_sz_into_ctr()map_sz_into_ctr()netlogon_params()perflib_009_params()perflib_params()prod_options()reg_load_tree()regdb_unpack_values()rpccli_spoolss_enumprinterdataex()store_printer_guid()svcctl_set_secdesc()tcpip_params()unpack_values()write_registry_tree().

00278 {
00279         if ( !name )
00280                 return ctr->num_values;
00281 
00282         /* Delete the current value (if it exists) and add the new one */
00283 
00284         regval_ctr_delvalue( ctr, name );
00285 
00286         /* allocate a slot in the array of pointers */
00287                 
00288         if (  ctr->num_values == 0 ) {
00289                 ctr->values = TALLOC_P( ctr, REGISTRY_VALUE *);
00290         } else {
00291                 ctr->values = TALLOC_REALLOC_ARRAY( ctr, ctr->values, REGISTRY_VALUE *, ctr->num_values+1 );
00292         }
00293 
00294         if (!ctr->values) {
00295                 ctr->num_values = 0;
00296                 return 0;
00297         }
00298 
00299         /* allocate a new value and store the pointer in the arrya */
00300                 
00301         ctr->values[ctr->num_values] = TALLOC_P( ctr, REGISTRY_VALUE);
00302         if (!ctr->values[ctr->num_values]) {
00303                 ctr->num_values = 0;
00304                 return 0;
00305         }
00306 
00307         /* init the value */
00308         
00309         fstrcpy( ctr->values[ctr->num_values]->valuename, name );
00310         ctr->values[ctr->num_values]->type = type;
00311         if (size) {
00312                 ctr->values[ctr->num_values]->data_p = (uint8 *)TALLOC_MEMDUP(
00313                         ctr, data_p, size );
00314                 if (!ctr->values[ctr->num_values]->data_p) {
00315                         ctr->num_values = 0;
00316                         return 0;
00317                 }
00318         } else {
00319                 ctr->values[ctr->num_values]->data_p = NULL;
00320         }
00321         ctr->values[ctr->num_values]->size = size;
00322         ctr->num_values++;
00323 
00324         return ctr->num_values;
00325 }

int regval_ctr_copyvalue ( REGVAL_CTR ctr,
REGISTRY_VALUE val 
)

reg_objects.c331 行で定義されています。

参照先 REGISTRY_VALUE::data_pREGVAL_CTR::num_valuesREGISTRY_VALUE::sizeREGISTRY_VALUE::typeREGISTRY_VALUE::valuenameREGVAL_CTR::values.

参照元 key_printers_fetch_values().

00332 {
00333         if ( val ) {
00334                 /* allocate a slot in the array of pointers */
00335                 
00336                 if (  ctr->num_values == 0 ) {
00337                         ctr->values = TALLOC_P( ctr, REGISTRY_VALUE *);
00338                 } else {
00339                         ctr->values = TALLOC_REALLOC_ARRAY( ctr, ctr->values, REGISTRY_VALUE *, ctr->num_values+1 );
00340                 }
00341 
00342                 if (!ctr->values) {
00343                         ctr->num_values = 0;
00344                         return 0;
00345                 }
00346 
00347                 /* allocate a new value and store the pointer in the arrya */
00348                 
00349                 ctr->values[ctr->num_values] = TALLOC_P( ctr, REGISTRY_VALUE);
00350                 if (!ctr->values[ctr->num_values]) {
00351                         ctr->num_values = 0;
00352                         return 0;
00353                 }
00354 
00355                 /* init the value */
00356         
00357                 fstrcpy( ctr->values[ctr->num_values]->valuename, val->valuename );
00358                 ctr->values[ctr->num_values]->type = val->type;
00359                 if (val->size) {
00360                         ctr->values[ctr->num_values]->data_p = (uint8 *)TALLOC_MEMDUP(
00361                                 ctr, val->data_p, val->size );
00362                         if (!ctr->values[ctr->num_values]->data_p) {
00363                                 ctr->num_values = 0;
00364                                 return 0;
00365                         }
00366                 } else {
00367                         ctr->values[ctr->num_values]->data_p = NULL;
00368                 }
00369                 ctr->values[ctr->num_values]->size = val->size;
00370                 ctr->num_values++;
00371         }
00372 
00373         return ctr->num_values;
00374 }

int regval_ctr_delvalue ( REGVAL_CTR ctr,
const char *  name 
)

reg_objects.c381 行で定義されています。

参照先 REGVAL_CTR::num_valuesstrequal()REGISTRY_VALUE::valuenameREGVAL_CTR::values.

参照元 _reg_delete_value()delete_printer_data()map_bool_into_ctr()map_dword_into_ctr()map_single_multi_sz_into_ctr()map_sz_into_ctr()regval_ctr_addvalue()store_printer_guid().

00382 {
00383         int     i;
00384         
00385         for ( i=0; i<ctr->num_values; i++ ) {
00386                 if ( strequal( ctr->values[i]->valuename, name ) )
00387                         break;
00388         }
00389         
00390         /* just return if we don't find it */
00391         
00392         if ( i == ctr->num_values )
00393                 return ctr->num_values;
00394         
00395         /* If 'i' was not the last element, just shift everything down one */
00396         ctr->num_values--;
00397         if ( i < ctr->num_values )
00398                 memmove( &ctr->values[i], &ctr->values[i+1], sizeof(REGISTRY_VALUE*)*(ctr->num_values-i) );
00399         
00400         return ctr->num_values;
00401 }

REGISTRY_VALUE* regval_ctr_getvalue ( REGVAL_CTR ctr,
const char *  name 
)

reg_objects.c408 行で定義されています。

参照先 REGVAL_CTR::num_valuesstrequal()REGISTRY_VALUE::valuenameREGVAL_CTR::values.

参照元 _ntsvcs_get_device_reg_property()delete_printer_data()eventlog_add_source()fill_svc_config()get_printer_data()is_printer_published()svcctl_get_secdesc()svcctl_lookup_description()svcctl_lookup_dispname()sync_eventlog_params().

00409 {
00410         int     i;
00411         
00412         /* search for the value */
00413         
00414         for ( i=0; i<ctr->num_values; i++ ) {
00415                 if ( strequal( ctr->values[i]->valuename, name ) )
00416                         return ctr->values[i];
00417         }
00418         
00419         return NULL;
00420 }

uint32 regval_dword ( REGISTRY_VALUE val  ) 

reg_objects.c426 行で定義されています。

参照先 regval_data_p().

00427 {
00428         uint32 data;
00429         
00430         data = IVAL( regval_data_p(val), 0 );
00431         
00432         return data;
00433 }

char* regval_sz ( REGISTRY_VALUE val  ) 

reg_objects.c439 行で定義されています。

参照先 regval_data_p()regval_size()rpcstr_pull().

参照元 fill_svc_config().

00440 {
00441         static pstring data;
00442 
00443         rpcstr_pull( data, regval_data_p(val), sizeof(data), regval_size(val), 0 );
00444         
00445         return data;
00446 }


Sambaに対してSat Aug 29 21:24:05 2009に生成されました。  doxygen 1.4.7