Example #1
0
 def get_info(self, path, buffer, file_info):
     if file_info.context:
         if path in self.files.keys():
             buffer[0].dwFileAttributes = FILE_ATTRIBUTE_NORMAL
             win_size = SizeConvert(len(self.files[path])).convert()
             buffer[0].nFileSizeHigh = win_size[0]
             buffer[0].nFileSizeLow = win_size[1]
             buffer[0].nNumberOfLinks = 1
             win_index = SizeConvert(2).convert()
             buffer[0].nFileIndexHigh = win_index[0]
             buffer[0].nFileIndexLow = win_index[1]
         elif path == '\\':
             buffer[0].dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY
             buffer[0].nFileSizeHigh = 0
             buffer[0].nFileSizeLow = 0
             buffer[0].nNumberOfLinks = 1
             win_index = SizeConvert(1).convert()
             buffer[0].nFileIndexHigh = win_index[0]
             buffer[0].nFileIndexLow = win_index[1] 
         dt_converter = DateTimeConvertor(datetime.today())
         dc = dt_converter.convert()
         buffer[0].ftCreationTime = dc
         buffer[0].ftLastAccessTime = dc
         buffer[0].ftLastWriteTime = dc
         buffer[0].dwVolumeSerialNumber = self.serial_number
         return 0    
     else:
         return -ERROR_INVALID_HANDLE
Example #2
0
 def get_info(self, path, buffer, file_info):
     if file_info.context:
         if path in self.files.keys():
             buffer[0].dwFileAttributes = FILE_ATTRIBUTE_NORMAL
             win_size = SizeConvert(len(self.files[path])).convert()
             buffer[0].nFileSizeHigh = win_size[0]
             buffer[0].nFileSizeLow = win_size[1]
             buffer[0].nNumberOfLinks = 1
             win_index = SizeConvert(2).convert()
             buffer[0].nFileIndexHigh = win_index[0]
             buffer[0].nFileIndexLow = win_index[1]
         elif path == '\\':
             buffer[0].dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY
             buffer[0].nFileSizeHigh = 0
             buffer[0].nFileSizeLow = 0
             buffer[0].nNumberOfLinks = 1
             win_index = SizeConvert(1).convert()
             buffer[0].nFileIndexHigh = win_index[0]
             buffer[0].nFileIndexLow = win_index[1]
         dt_converter = DateTimeConvertor(datetime.today())
         dc = dt_converter.convert()
         buffer[0].ftCreationTime = dc
         buffer[0].ftLastAccessTime = dc
         buffer[0].ftLastWriteTime = dc
         buffer[0].dwVolumeSerialNumber = self.serial_number
         return 0
     else:
         return -ERROR_INVALID_HANDLE
Example #3
0
    def find_files_with_pattern(self, path, pattern, func, file_info):
        '''
        Find files with a specific pattern        
            path {string}: file/directory path
            pattern {string}: parttern to find
            func {function}: function to call with PWIN32_FIND_DATAW
            file_info {Object}: file/directory information
        '''
        file_info_raw = file_info.raw()
        new_path = _normalize_path_win_to_DB_lower(path)

        # Files
        res = self.db.view('file/byFolder', key=new_path)
        for doc in res:
            doc = doc.value
            if self.name_in_expression(pattern, doc['name'], False):
                if 'size' in doc:
                    win_size = SizeConvert(doc['size']).convert()
                else:
                    win_size = SizeConvert(1).convert()  

                lastModification = doc['lastModification'].split(' GMT')[0]
                dt_converter = DateTimeConvertor(datetime.strptime(lastModification, '%a %b %d %Y %H:%M:%S')) 
                dc = dt_converter.convert()
                if 'creationDate' in doc:
                    creationDate = doc['creationDate'].split(' GMT')[0]
                    dt_converter_creation = DateTimeConvertor(datetime.strptime(creationDate, '%a %b %d %Y %H:%M:%S'))
                    dc_creation = dt_converter.convert()
                else:
                    dc_creation = dc
                if doc['name'].find('~') == -1:
                    info = WIN32_FIND_DATAW(
                        FILE_ATTRIBUTE_NORMAL, dc_creation, dc, dc, 
                        win_size[0], win_size[1], 0, 0, doc['name'], ''
                    )
                else:
                    info = WIN32_FIND_DATAW(
                        FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_TEMPORARY, dc_creation, dc, dc,
                        win_size[0], win_size[1], 0, 0, doc['name'], ''
                    )        
                func(PWIN32_FIND_DATAW(info), file_info_raw)

        # Folders
        res = self.db.view('folder/byFolder', key=new_path)
        for doc in res:
            doc = doc.value
            if self.name_in_expression(pattern, doc['name'], False):
                dc = DateTimeConvertor(datetime.today()).convert()
                win_size = SizeConvert(1).convert()
                info = WIN32_FIND_DATAW(
                    FILE_ATTRIBUTE_DIRECTORY, dc, dc, dc, win_size[0],
                    win_size[1], 0, 0, doc['name'], ''
                )
                func(PWIN32_FIND_DATAW(info), file_info_raw)
        return 0
Example #4
0
 def get_info(self, path, buffer, file_info):
     '''
     Get file or directory information
         path {string}: directory path
         buffer {buffer}: buffer to store file/directory information
         file_info {Object}: directory information            
     '''
     path = _normalize_path_win_to_DB_lower(path)
     res = self.db.view('file/byFullPath', key=path)
     if len(res) > 0:  
         # File 
         for doc in res:
             if path.find('~') == -1:
                 # Standard file
                 buffer[0].dwFileAttributes = FILE_ATTRIBUTE_NORMAL
             else:
                 # Temporary file
                 buffer[0].dwFileAttributes = FILE_ATTRIBUTE_HIDDEN                
             if 'size' in doc.value:
                 win_size = SizeConvert(doc.value['size']).convert()
             else:
                 win_size = SizeConvert(1).convert()
             buffer[0].nFileSizeHigh = win_size[0]
             buffer[0].nFileSizeLow = win_size[1]
             buffer[0].nNumberOfLinks = 1
             win_index = SizeConvert(2).convert()
             buffer[0].nFileIndexHigh = win_index[0]
             buffer[0].nFileIndexLow = win_index[1]
             lastModification = doc.value['lastModification'].split(' GMT')[0]
             dt_converter = DateTimeConvertor(datetime.strptime(lastModification, '%a %b %d %Y %H:%M:%S')) 
             dc = dt_converter.convert()
             if 'creationDate' in doc.value:
                 creationDate = doc.value['creationDate'].split(' GMT')[0]
                 dt_converter_creation = DateTimeConvertor(datetime.strptime(creationDate, '%a %b %d %Y %H:%M:%S'))
                 buffer[0].ftCreationTime = dt_converter_creation.convert()
             else:
                 buffer[0].ftCreationTime = dc
             buffer[0].ftLastAccessTime = dc
             buffer[0].ftLastWriteTime = dc
     else:
         res = self.db.view('folder/byFullPath', key=path)
         if len(res) > 0 or path is '\\':
             # Folder
             buffer[0].dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY
             buffer[0].nFileSizeHigh = 0
             buffer[0].nFileSizeLow = 0
             buffer[0].nNumberOfLinks = 1
             win_index = SizeConvert(1).convert()
             buffer[0].nFileIndexHigh = win_index[0]
             buffer[0].nFileIndexLow = win_index[1]
             dt_converter = DateTimeConvertor(datetime.today())
             dc = dt_converter.convert()
             buffer[0].ftCreationTime = dc
             buffer[0].ftLastAccessTime = dc
             buffer[0].ftLastWriteTime = dc
         else:
             # Document doesn't exist
             return -ERROR_FILE_NOT_FOUND 
     buffer[0].dwVolumeSerialNumber = self.serial_number
     return 0 
Example #5
0
 def find_files_with_pattern(self, path, pattern, func, file_info):
     file_info_raw = file_info.raw()
     if file_info.context:
         if path == '\\':
             dc = DateTimeConvertor(datetime.today()).convert()
             for i in self.files.keys():
                 if self.name_in_expression(pattern, i, False):
                     win_size = SizeConvert(len(self.files[i])).convert()
                     info = WIN32_FIND_DATAW(FILE_ATTRIBUTE_NORMAL, dc, dc,
                                             dc, win_size[0], win_size[1],
                                             0, 0, i[1:], '')
                     func(PWIN32_FIND_DATAW(info), file_info_raw)
         return 0
     else:
         return -ERROR_INVALID_HANDLE