/// <summary> /// /// </summary> /// <param name="diskHandle"></param> /// <param name="online"></param> /// <param name="persist">If TRUE, these settings are persisted across reboots</param> /// <returns>success</returns> /// <exception cref="Win32Exception"></exception> public static bool SetOnline(SafeFileHandle diskHandle, bool online, bool persist) { SET_DISK_ATTRIBUTES attributes = new SET_DISK_ATTRIBUTES(online ? 0 : DISK_ATTRIBUTE_OFFLINE, persist); // https://docs.microsoft.com/en-us/windows/win32/api/winioctl/ni-winioctl-ioctl_disk_set_disk_attributes DeviceIoControlHelper.InvokeIoControl(diskHandle, IOControlCode.DiskSetDiskAttributes, attributes); //new Win32Exception(win32ErrorCode).Message return(true); }
public STORAGE_DEVICE_DESCRIPTOR_PARSED_EX StorageGetDeviceProperty() { STORAGE_PROPERTY_QUERY query = new STORAGE_PROPERTY_QUERY { QueryType = STORAGE_QUERY_TYPE.PropertyStandardQuery, PropertyId = STORAGE_PROPERTY_ID.StorageDeviceProperty }; byte[] res = DeviceIoControlHelper.InvokeIoControlUnknownSize(Handle, IOControlCode.StorageQueryProperty, query); STORAGE_DEVICE_DESCRIPTOR descriptor = /*Utils.*/ ByteArrayToStruct <STORAGE_DEVICE_DESCRIPTOR>(res, 0); STORAGE_DEVICE_DESCRIPTOR_PARSED_EX returnValue = new STORAGE_DEVICE_DESCRIPTOR_PARSED_EX { Version = descriptor.Version, Size = descriptor.Size, DeviceType = descriptor.DeviceType, DeviceTypeModifier = descriptor.DeviceTypeModifier, RemovableMedia = descriptor.RemovableMedia, CommandQueueing = descriptor.CommandQueueing, VendorIdOffset = descriptor.VendorIdOffset, ProductIdOffset = descriptor.ProductIdOffset, ProductRevisionOffset = descriptor.ProductRevisionOffset, SerialNumberOffset = descriptor.SerialNumberOffset, BusType = descriptor.BusType, RawPropertiesLength = descriptor.RawPropertiesLength, RawDeviceProperties = descriptor.RawDeviceProperties }; if (returnValue.SerialNumberOffset != 0) { returnValue.SerialNumber = ReadNullTerminatedAsciiString(res, (int)returnValue.SerialNumberOffset); } if (returnValue.VendorIdOffset != 0) { returnValue.VendorId = ReadNullTerminatedAsciiString(res, (int)returnValue.VendorIdOffset); } if (returnValue.ProductIdOffset != 0) { returnValue.ProductId = ReadNullTerminatedAsciiString(res, (int)returnValue.ProductIdOffset); } if (returnValue.ProductRevisionOffset != 0) { returnValue.ProductRevision = ReadNullTerminatedAsciiString(res, (int)returnValue.ProductRevisionOffset); } return(returnValue); }