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

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.