def _set_disk_attrttributes(self, attributes, mask): set_struct = structures.SET_DISK_ATTRIBUTES(Version=0x28, Persist=constants.TRUE, RelinquishOwnership=0, Attributes=attributes, AttributesMask=mask, Caller=GUID_ZERO) io = DeviceIoControl(self._path, True) io.ioctl_disk_set_disk_attributes(set_struct)
def __init__(self, disk_number): super(Disk, self).__init__() self._number = disk_number self._path = r"\\.\PHYSICALDRIVE{}".format(self._number) if not self._is_path_valid(self._path): raise RuntimeError("Invalid disk number: {0}".format(self._number)) self._io = DeviceIoControl(self._path, True)
def _filter(volume): try: actual = DeviceIoControl(volume.DeviceID.rstrip( r'\\')).storage_get_device_and_partition_number() except WindowsException as e: if e.winerror == 1: # Floppy/CD/.. return False return actual == expected
def windows(): from infi.devicemanager import DeviceManager from infi.devicemanager.ioctl import DeviceIoControl drive_numbers = [ DeviceIoControl( disk_drive.psuedo_device_object).storage_get_device_number() for disk_drive in DeviceManager().disk_drives ] return [ r"\\.\PHYSICALDRIVE{0}".format(drive_number) for drive_number in drive_numbers if drive_number != -1 ]
def get_ioctl_interface(self): from infi.devicemanager.ioctl import DeviceIoControl return DeviceIoControl(self.get_pdo())
def __init__(self, disk, partition, mount_manager=None): super(Volume, self).__init__() self._disk = disk self._partition = partition self._mount_manager = mount_manager or MountManager() self._io = DeviceIoControl(self._path, False)
def resize(self, size_in_bytes): return DeviceIoControl(self._path, True, True).ioctl_extend_volume(size_in_bytes)
def offline(self): return DeviceIoControl(self._path, True, False).ioctl_volume_offline()
def _get_device_and_partition_number(self): from infi.devicemanager.ioctl import DeviceIoControl return DeviceIoControl( self._path).storage_get_device_and_partition_number()
def __init__(self, disk_number): super(Disk, self).__init__() self._number = disk_number self._path = r"\\.\PHYSICALDRIVE{}".format(self._number) self._io = DeviceIoControl(self._path, True)
def _filter(volume): actual = DeviceIoControl(volume.DeviceID.rstrip(r'\\')).storage_get_device_and_partition_number() return actual == expected