Changeset 252 for trunk/python


Ignore:
Timestamp:
05/08/11 13:33:49 (13 years ago)
Author:
tim
Message:

updated pyregfi to work with regfi changes
renamed some functions for more clarity
fixed some issues related to talloc_reference

Location:
trunk/python/pyregfi
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/python/pyregfi/__init__.py

    r233 r252  
    174174    i = 0
    175175    s = chars_pointer[i]
    176     while s != None:
     176    while s:
    177177        ret_val.append(s.decode('utf-8', 'replace'))
    178178        i += 1
     
    180180
    181181    return ret_val
     182
    182183
    183184
     
    316317            raise Exception("Could not create _GenericList; key is NULL."
    317318                            + "Current log:\n" + getLogMessages())
    318        
    319         if not regfi.regfi_reference_record(key._hive.file, key._base):
     319
     320        base = regfi.regfi_reference_record(key._hive.file, key._base)
     321        if not base:
    320322            raise Exception("Could not create _GenericList; memory error."
    321323                            + "Current log:\n" + getLogMessages())
    322         self._key_base = key._base
     324        self._key_base = cast(base, type(key._base))
    323325        self._length = self._fetch_num(self._key_base)
    324326        self._hive = key._hive
     
    461463            ret_val = super(Key, self).__getattr__(name)
    462464
    463             if ret_val == None:
     465            if not ret_val:
    464466                ret_val = self.name_raw
    465467            else:
     
    624626        ret_val = super(Value, self).__getattr__(name)
    625627        if name == "name":
    626             if ret_val == None:
     628            if not ret_val:
    627629                ret_val = self.name_raw
    628630            else:
     
    984986        return ret_val
    985987
    986 
    987988    ## Traverse downward multiple levels
    988989    #
     
    996997
    997998        self._lock.acquire()
    998         result = regfi.regfi_iterator_walk_path(self._iter, cpath)
     999        result = regfi.regfi_iterator_descend(self._iter, cpath)
    9991000        self._lock.release()
    10001001        if not result:
    10011002            # XXX: Use non-generic exception
    10021003            raise Exception('Could not locate path.\n'+getLogMessages())
     1004
     1005    ## Obtains a list of the current key's ancestry
     1006    #
     1007    # @return A list of all parent keys starting with the root Key and ending
     1008    #         with the current Key
     1009    def ancestry(self):
     1010        self._lock.acquire()
     1011        result = regfi.regfi_iterator_ancestry(self._iter)
     1012        self._lock.release()
     1013
     1014        ret_val = []
     1015        i = 0
     1016        k = result[i]
     1017        while k:
     1018            k = cast(regfi.regfi_reference_record(self._hive.file, k), POINTER(REGFI_NK))
     1019            ret_val.append(Key(self._hive, k))
     1020            i += 1
     1021            k = result[i]
     1022
     1023        regfi.regfi_free_record(self._hive.file, result)
     1024        return ret_val
     1025
     1026    ## Obtains the current path of the iterator
     1027    #
     1028    # @return A list of key names starting with the root up to and
     1029    #         including the current key
     1030    #
     1031    def current_path(self):
     1032        ancestry = self.ancestry()
     1033        return [str(a.name) for a in ancestry]
    10031034
    10041035
  • trunk/python/pyregfi/structures.py

    r233 r252  
    2020
    2121REGFI_DATA_TYPE = c_uint32
    22 
     22REGFI_NTTIME = c_uint64
    2323
    2424# Prototype everything first so we don't have to worry about reference order
    25 class REGFI_NTTIME(Structure):
    26     pass
    27 
    2825class REGFI_VK(Structure):
    2926    pass
     
    9794read_cb_type = CB_FACTORY(c_int64, POINTER(REGFI_RAW_FILE), POINTER(c_char), c_size_t, use_errno=True)
    9895
    99 
    100 REGFI_NTTIME._fields_ = [('low', c_uint32),
    101                          ('high', c_uint32)]
    10296
    10397REGFI_VK._fields_ = [('offset', c_uint32),
     
    253247
    254248regfi.regfi_reference_record.argtypes = [POINTER(REGFI_FILE), c_void_p]
    255 regfi.regfi_reference_record.restype = c_bool
     249regfi.regfi_reference_record.restype = c_void_p
    256250
    257251regfi.regfi_fetch_num_subkeys.argtypes = [POINTER(REGFI_NK)]
     
    307301regfi.regfi_iterator_to_root.restype = c_bool
    308302
    309 regfi.regfi_iterator_walk_path.argtypes = [POINTER(REGFI_ITERATOR), POINTER(c_char_p)]
    310 regfi.regfi_iterator_walk_path.restype = c_bool
     303regfi.regfi_iterator_descend.argtypes = [POINTER(REGFI_ITERATOR), POINTER(c_char_p)]
     304regfi.regfi_iterator_descend.restype = c_bool
    311305
    312306regfi.regfi_iterator_cur_key.argtypes = [POINTER(REGFI_ITERATOR)]
     
    337331regfi.regfi_iterator_find_value.restype = c_bool
    338332
     333regfi.regfi_iterator_ancestry.argtypes = [POINTER(REGFI_ITERATOR)]
     334regfi.regfi_iterator_ancestry.restype = POINTER(POINTER(REGFI_NK))
    339335
    340336regfi.regfi_init.argtypes = []
Note: See TracChangeset for help on using the changeset viewer.