def read_attributes(self): """Retrieve file basic information. It updates the basic_info attribute including timestamp information :raise: NTException """ result = FileInfo.Basic() status = NT.QueryInformationFile( self.handle, pointer(self.io_status), pointer(result), sizeof(result), FileInfo.Basic.class_id, ) if status < 0: # defensive code # we should already have raised an error here when trying # to open the file raise NTException( status=status, message="cannot read attributes", origin="NTFile.read_attributes", ) self.basic_info = result return result
def __init__(self, filename, parent=None): """Initialize a NTFile object. :param filename: path to the file or basename if parent is not None :type filename: str | unicode :param parent: the parent NTFile object :type parent: NTFile | None """ if parent is None: self.path = os.path.abspath(filename) self.nt_filename = UnicodeString("\\??\\%s" % self.path) self.parent_handle = None else: assert "\\" not in filename and "/" not in filename self.path = os.path.join(parent.path, filename) self.nt_filename = UnicodeString(str(filename)) self.parent_handle = parent.handle self.handle = None self.io_status = IOStatusBlock() self.basic_info = FileInfo.Basic() self.attr = ObjectAttributes(self.nt_filename, parent=self.parent_handle) self.desired_access = Access.READ_DATA | Access.READ_ATTRS # By default don't block access to other processes self.shared_access = Share.ALL # By default we set BACKUP_INTENT to be able to bypass ACLs in case # the user has sufficient rights. It has no effect otherwise self.open_options = OpenOptions.BACKUP_INTENT
def __init__(self, filename: str, parent: Optional[NTFile] = None): """Initialize a NTFile object. :param filename: path to the file or basename if parent is not None :param parent: the parent NTFile object """ self.handle: Optional[HANDLE] = None if parent is None: self.path = os.path.abspath(filename) self.nt_filename = UnicodeString(f"\\??\\{self.path}") self.parent_handle = None else: assert "\\" not in filename and "/" not in filename self.path = os.path.join(parent.path, filename) self.nt_filename = UnicodeString(str(filename)) self.parent_handle = parent.handle self.io_status = IOStatusBlock() self.basic_info = FileInfo.Basic() self.attr = ObjectAttributes(self.nt_filename, parent=self.parent_handle) self.desired_access = Access.READ_DATA | Access.READ_ATTRS # By default don't block access to other processes self.shared_access = Share.ALL # By default we set BACKUP_INTENT to be able to bypass ACLs in case # the user has sufficient rights. It has no effect otherwise self.open_options = OpenOptions.BACKUP_INTENT # Used by is_dir_empty to store the latest seen file in a given directory self.is_dir_empty_last_seen_file: Optional[str] = None