Пример #1
0
        /// <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);
        }