Changeset 84 for trunk/include


Ignore:
Timestamp:
01/19/07 09:52:25 (17 years ago)
Author:
tim
Message:

rearranged structure contents to reduce fragmentation on 64 bit systems.

make regfi interface return const structures to help enforce separation

removed a little cruft from some parsing functions

Location:
trunk/include
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/regfi.h

    r81 r84  
    11/*
    22 * Branched from Samba project, Subversion repository version #6903:
    3  *   http://websvn.samba.org/cgi-bin/viewcvs.cgi/trunk/source/include/regfio.h
     3 *   http://viewcvs.samba.org/cgi-bin/viewcvs.cgi/trunk/source/include/regfio.h?rev=6903&view=auto
    44 *
    55 * Unix SMB/CIFS implementation.
     
    109109  uint32 free_off;       /* offset to free space within the hbin record */
    110110  uint32 free_size;      /* amount of data left in the block */
    111   int    ref_count;      /* how many active records are pointing to this
     111  uint32 ref_count;      /* how many active records are pointing to this
    112112                          * block (not used currently)
    113113                          */
    114        
    115   uint8  header[HBIN_HDR_SIZE]; /* "hbin" */
     114 
    116115  uint32 first_hbin_off; /* offset from first hbin block */
    117116  uint32 block_size;     /* block size of this block is
    118117                          * usually a multiple of 4096Kb
    119118                          */
     119  uint8  header[HBIN_HDR_SIZE]; /* "hbin" */
    120120  prs_struct ps;         /* data */
    121121  bool dirty;            /* has this hbin block been modified? */
     
    129129
    130130typedef struct {
    131   REGF_HBIN *hbin;       /* pointer to HBIN record (in memory) containing
     131  REGF_HBIN* hbin;       /* pointer to HBIN record (in memory) containing
    132132                          * this nk record
    133133                          */
     134  REGF_HASH_REC* hashes;
    134135  uint32 hbin_off;       /* offset from beginning of this hbin block */
    135136  uint32 rec_size;       /* ((start_offset - end_offset) & 0xfffffff8) */
     
    137138  uint8 header[REC_HDR_SIZE];
    138139  uint16 num_keys;
    139   REGF_HASH_REC *hashes;
    140140} REGF_LF_REC;
    141141
     
    143143
    144144typedef struct {
    145   REGF_HBIN *hbin;      /* pointer to HBIN record (in memory) containing
     145  REGF_HBIN* hbin;      /* pointer to HBIN record (in memory) containing
    146146                         * this nk record
    147147                         */
     148  char*  valuename;
     149  uint8* data;
    148150  uint32 hbin_off;      /* offset from beginning of this hbin block */
    149151  uint32 rec_size;      /* ((start_offset - end_offset) & 0xfffffff8) */
    150152  uint32 rec_off;       /* offset stored in the value list */
    151153 
    152   uint8  header[REC_HDR_SIZE];
    153   char*  valuename;
    154154  uint32 data_size;
    155155  uint32 data_off;
    156   uint8* data;
    157156  uint32 type;
     157  uint8  header[REC_HDR_SIZE];
    158158  uint16 flag;
    159159} REGF_VK_REC;
     
    164164
    165165typedef struct _regf_sk_rec {
    166   struct _regf_sk_rec *next, *prev;
    167   REGF_HBIN *hbin;      /* pointer to HBIN record (in memory) containing
     166  struct _regf_sk_rec* next;
     167  struct _regf_sk_rec* prev;
     168  REGF_HBIN* hbin;      /* pointer to HBIN record (in memory) containing
    168169                         * this nk record
    169170                         */
     171  SEC_DESC* sec_desc;
    170172  uint32 hbin_off;      /* offset from beginning of this hbin block */
    171173  uint32 rec_size;      /* ((start_offset - end_offset) & 0xfffffff8) */
     
    175177                         */
    176178 
    177   uint8  header[REC_HDR_SIZE];
    178179  uint32 prev_sk_off;
    179180  uint32 next_sk_off;
    180181  uint32 ref_count;
    181182  uint32 size;
    182   SEC_DESC *sec_desc;
     183  uint8  header[REC_HDR_SIZE];
    183184} REGF_SK_REC;
    184185
     
    186187/* Key Name */
    187188typedef struct {
     189  uint32 hbin_off;      /* offset from beginning of this hbin block */
     190  uint32 rec_size;      /* ((start_offset - end_offset) & 0xfffffff8) */
    188191  REGF_HBIN *hbin;      /* pointer to HBIN record (in memory) containing
    189                          * this nk record
    190                          */
    191   uint32 hbin_off;      /* offset from beginning of this hbin block */
    192   /*uint32 subkey_index;*/      /* index to next subkey record to return */
    193   uint32 rec_size;      /* ((start_offset - end_offset) & 0xfffffff8) */
     192                         * this nk record */
     193
     194  /* link in the other records here */
     195  REGF_VK_REC* values;
     196  REGF_SK_REC* sec_desc;
     197  REGF_LF_REC subkeys;
    194198 
    195199  /* header information */
     200  /* XXX: should we be looking for types other than the root key type? */
     201  uint16 key_type;     
    196202  uint8  header[REC_HDR_SIZE];
    197   uint16 key_type;
    198203  NTTIME mtime;
     204  char* classname;
     205  char* keyname;
    199206  uint32 parent_off;    /* back pointer in registry hive */
    200207  uint32 classname_off;
    201   char *classname;
    202   char *keyname;
    203208 
    204209  /* max lengths */
     
    218223  uint32 sk_off;        /* offset to SK record */
    219224 
    220   /* link in the other records here */
    221   REGF_LF_REC subkeys;
    222   REGF_VK_REC* values;
    223   REGF_SK_REC* sec_desc;
    224        
    225225} REGF_NK_REC;
    226226
     
    231231  int fd;         /* file descriptor */
    232232  int open_flags; /* flags passed to the open() call */
    233   void *mem_ctx;  /* memory context for run-time file access information */
    234   REGF_HBIN *block_list; /* list of open hbin blocks */
     233  void* mem_ctx;  /* memory context for run-time file access information */
     234  REGF_HBIN* block_list; /* list of open hbin blocks */
    235235 
    236236  /* file format information */
     237  REGF_SK_REC* sec_desc_list;   /* list of security descriptors referenced
     238                                 * by NK records
     239                                 */
    237240 
    238241  uint8  header[REGF_HDR_SIZE]; /* "regf" */
     242  NTTIME mtime;
    239243  uint32 data_offset;           /* offset to record in the first (or any?)
    240244                                 * hbin block
     
    242246  uint32 last_block;            /* offset to last hbin block in file */
    243247  uint32 checksum;              /* XOR of bytes 0x0000 - 0x01FB */
    244   NTTIME mtime;
    245  
    246   REGF_SK_REC *sec_desc_list;   /* list of security descriptors referenced
    247                                  * by NK records
    248                                  */
    249248 
    250249  /* unknowns */
     
    279278/* Function Declarations */
    280279
    281 const char*   regfi_type_val2str(unsigned int val);
    282 int           regfi_type_str2val(const char* str);
    283 
    284 char*         regfi_get_sacl(SEC_DESC* sec_desc);
    285 char*         regfi_get_dacl(SEC_DESC* sec_desc);
    286 char*         regfi_get_owner(SEC_DESC* sec_desc);
    287 char*         regfi_get_group(SEC_DESC* sec_desc);
    288 
    289 REGF_FILE*    regfi_open(const char* filename);
    290 int           regfi_close(REGF_FILE* r);
    291 
    292 REGF_NK_REC*  regfi_rootkey(REGF_FILE* file);
    293 /* REGF_NK_REC*  regfi_fetch_subkey( REGF_FILE* file, REGF_NK_REC* nk ); */
    294 
    295 void            regfi_key_free(REGF_NK_REC* nk);
    296 
    297 REGFI_ITERATOR* regfi_iterator_new(REGF_FILE* fh);
    298 void            regfi_iterator_free(REGFI_ITERATOR* i);
    299 bool            regfi_iterator_down(REGFI_ITERATOR* i);
    300 bool            regfi_iterator_up(REGFI_ITERATOR* i);
    301 bool            regfi_iterator_to_root(REGFI_ITERATOR* i);
    302 
    303 bool            regfi_iterator_find_subkey(REGFI_ITERATOR* i, const char* subkey_name);
    304 bool            regfi_iterator_walk_path(REGFI_ITERATOR* i, const char** path);
    305 /* XXX: these which return NK and VK records should return them as consts */
    306 REGF_NK_REC*    regfi_iterator_cur_key(REGFI_ITERATOR* i);
    307 REGF_NK_REC*    regfi_iterator_first_subkey(REGFI_ITERATOR* i);
    308 REGF_NK_REC*    regfi_iterator_cur_subkey(REGFI_ITERATOR* i);
    309 REGF_NK_REC*    regfi_iterator_next_subkey(REGFI_ITERATOR* i);
    310 
    311 bool            regfi_iterator_find_value(REGFI_ITERATOR* i, const char* value_name);
    312 REGF_VK_REC*    regfi_iterator_first_value(REGFI_ITERATOR* i);
    313 REGF_VK_REC*    regfi_iterator_cur_value(REGFI_ITERATOR* i);
    314 REGF_VK_REC*    regfi_iterator_next_value(REGFI_ITERATOR* i);
     280const char*           regfi_type_val2str(unsigned int val);
     281int                   regfi_type_str2val(const char* str);
     282
     283char*                 regfi_get_sacl(SEC_DESC* sec_desc);
     284char*                 regfi_get_dacl(SEC_DESC* sec_desc);
     285char*                 regfi_get_owner(SEC_DESC* sec_desc);
     286char*                 regfi_get_group(SEC_DESC* sec_desc);
     287
     288REGF_FILE*            regfi_open(const char* filename);
     289int                   regfi_close(REGF_FILE* r);
     290
     291REGFI_ITERATOR*       regfi_iterator_new(REGF_FILE* fh);
     292void                  regfi_iterator_free(REGFI_ITERATOR* i);
     293bool                  regfi_iterator_down(REGFI_ITERATOR* i);
     294bool                  regfi_iterator_up(REGFI_ITERATOR* i);
     295bool                  regfi_iterator_to_root(REGFI_ITERATOR* i);
     296
     297bool                  regfi_iterator_find_subkey(REGFI_ITERATOR* i,
     298                                                 const char* subkey_name);
     299bool                  regfi_iterator_walk_path(REGFI_ITERATOR* i,
     300                                               const char** path);
     301const REGF_NK_REC*    regfi_iterator_cur_key(REGFI_ITERATOR* i);
     302const REGF_NK_REC*    regfi_iterator_first_subkey(REGFI_ITERATOR* i);
     303const REGF_NK_REC*    regfi_iterator_cur_subkey(REGFI_ITERATOR* i);
     304const REGF_NK_REC*    regfi_iterator_next_subkey(REGFI_ITERATOR* i);
     305
     306bool                  regfi_iterator_find_value(REGFI_ITERATOR* i,
     307                                                const char* value_name);
     308const REGF_VK_REC*    regfi_iterator_first_value(REGFI_ITERATOR* i);
     309const REGF_VK_REC*    regfi_iterator_cur_value(REGFI_ITERATOR* i);
     310const REGF_VK_REC*    regfi_iterator_next_value(REGFI_ITERATOR* i);
     311
     312
     313/* Private Functions */
     314REGF_NK_REC*          regfi_rootkey(REGF_FILE* file);
     315void                  regfi_key_free(REGF_NK_REC* nk);
     316
    315317
    316318#endif  /* _REGFI_H */
  • trunk/include/smb_deps.h

    r68 r84  
    151151#define TIME_FIXUP_CONSTANT (369.0*365.25*24*60*60-(3.0*24*60*60+6.0*60*60))
    152152
    153 void unix_to_nt_time(NTTIME *nt, time_t t);
    154 time_t nt_time_to_unix(NTTIME *nt);
     153void unix_to_nt_time(NTTIME* nt, time_t t);
     154time_t nt_time_to_unix(const NTTIME* nt);
    155155
    156156/* End of stuff from lib/time.c */
     
    169169char *prs_mem_get(prs_struct *ps, uint32 extra_size);
    170170bool prs_uint32(const char *name, prs_struct *ps, int depth, uint32 *data32);
    171 bool prs_uint32s(bool charmode, const char *name, prs_struct *ps,
     171bool prs_uint32s(const char *name, prs_struct *ps,
    172172                 int depth, uint32 *data32s, int len);
    173173bool prs_uint16(const char *name, prs_struct *ps, int depth, uint16 *data16);
     
    177177                     uint16 *data16, uint32 ptr_uint16, uint32 start_offset);
    178178bool prs_uint8(const char *name, prs_struct *ps, int depth, uint8 *data8);
    179 bool prs_uint8s(bool charmode, const char *name, prs_struct *ps, int depth,
     179bool prs_uint8s(const char *name, prs_struct *ps, int depth,
    180180                uint8* data8s, int len);
    181181bool prs_set_offset(prs_struct *ps, uint32 offset);
Note: See TracChangeset for help on using the changeset viewer.