コード例 #1
0
 public AtaPassThroughDirect(AtaFlags AtaFlags = default, byte PathId = default, byte TargetId = default, byte Lun = default, byte ReservedAsUchar = default, uint TimeOutValue = default, uint ReservedAsUlong = default, uint DataTransferLength = default, IntPtr DataBuffer = default, ushort Feature = default, ushort SectorCouont = default, ushort SectorNumber = default, uint Cylinder = default, byte DeviceHead = default, byte Command = default, ushort Reserved = default)
 => (Length, this.AtaFlags, this.PathId, this.TargetId, this.Lun, this.ReservedAsUchar, this.TimeOutValue, this.ReservedAsUlong, this.DataTransferLength, _DataBuffer, (CurrentTaskFile, PreviousTaskFile))
コード例 #2
0
 = ((ushort)Marshal.SizeOf <AtaPassThroughDirect>(), AtaFlags, PathId, TargetId, Lun, ReservedAsUchar, TimeOutValue, ReservedAsUlong, DataTransferLength, DataBuffer.ToInt32(), CreateTaskFiles(AtaFlags, Feature, SectorCouont, SectorNumber, Cylinder, DeviceHead, Command, Reserved));
コード例 #3
0
 public AtaPassThroughExWithSmartData(AtaFlags AtaFlags = default, byte PathId = default, byte TargetId = default, byte Lun = default, byte ReservedAsUchar = default, uint TimeOutValue = default, uint ReservedAsUlong = default, TaskFile TaskFile = default, SmartData SmartData = default)
 => (Length, this.AtaFlags, this.PathId, this.TargetId, this.Lun, this.ReservedAsUchar, this.TimeOutValue, this.ReservedAsUlong, DataTransferLength, DataBufferOffset, this.TaskFile, this.SmartData)
コード例 #4
0
 public AtaPassThroughEx32WithIdentifyDevice(AtaFlags AtaFlags = default, byte PathId = default, byte TargetId = default, byte Lun = default, byte ReservedAsUchar = default, uint TimeOutValue = default, uint ReservedAsUlong = default, TaskFile TaskFile = default, IdentifyDevice IdentifyDevice = default)
 => (Length, this.AtaFlags, this.PathId, this.TargetId, this.Lun, this.ReservedAsUchar, this.TimeOutValue, this.ReservedAsUlong, this.DataTransferLength, this.DataBufferOffset, this.TaskFile, this.IdentifyDevice)
コード例 #5
0
 public static (byte[] CurrentTaskFile, byte[] PreviousTaskFile) CreateTaskFiles(AtaFlags AtaFlags, ushort Feature, ushort SectorCouont, ushort SectorNumber, uint Cylinder, byte DeviceHead, byte Command, ushort Reserved)
 {
     if ((AtaFlags & AtaFlags.AF_48BIT_COMMAND) == AtaFlags.AF_48BIT_COMMAND)
     {
         unchecked
         {
             return(CurrentTaskFile : new byte[8] {
                 (byte)(Feature & 0x00FF),
                 (byte)(SectorCouont & 0x00FF),
                 (byte)(SectorNumber & 0x00FF),
                 (byte)(Cylinder & 0x0000_00FF),
                 (byte)((Cylinder & 0x0000_FF00) >> 8),
                 DeviceHead,
                 Command,
                 (byte)(Reserved & 0x00FF),
             }, PreviousTaskFile : new byte[8] {
コード例 #6
0
        /// <summary>
        /// IOCTL_ATA_PASS_THROUGH IOCTL ( https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntddscsi/ni-ntddscsi-ioctl_ata_pass_through )
        /// </summary>
        /// <param name="IoControl"></param>
        /// <param name="Header"></param>
        /// <param name="Data"></param>
        /// <param name="AtaFlags"></param>
        /// <param name="PathId"></param>
        /// <param name="TargetId"></param>
        /// <param name="Lun"></param>
        /// <param name="ReservedAsUchar"></param>
        /// <param name="TimeOutValue"></param>
        /// <param name="ReservedAsUlong"></param>
        /// <param name="Feature"></param>
        /// <param name="SectorCouont"></param>
        /// <param name="SectorNumber"></param>
        /// <param name="Cylinder"></param>
        /// <param name="DeviceHead"></param>
        /// <param name="Command"></param>
        /// <param name="Reserved"></param>
        /// <param name="DataSize"></param>
        /// <returns></returns>
        public static bool AtaPassThrough(this IoControl IoControl, out IAtaPassThroughEx Header, out byte[] Data, AtaFlags AtaFlags, byte PathId = default, byte TargetId = default, byte Lun = default, byte ReservedAsUchar = default, uint TimeOutValue = default, uint ReservedAsUlong = default, ushort Feature = default, ushort SectorCouont = default, ushort SectorNumber = default, uint Cylinder = default, byte DeviceHead = default, byte Command = default, ushort Reserved = default, uint DataSize = default)
        {
            var _Size = Marshal.SizeOf <AtaPassThroughEx>();
            var DataTransferLength = DataSize;
            var DataBufferOffset   = DataSize == 0 ? 0 : _Size;

            Header =
                IntPtr.Size == 8 ? (IAtaPassThroughEx) new AtaPassThroughEx(
                    AtaFlags: AtaFlags,
                    PathId: PathId,
                    TargetId: TargetId,
                    Lun: Lun,
                    ReservedAsUchar: ReservedAsUchar,
                    TimeOutValue: TimeOutValue,
                    ReservedAsUlong: ReservedAsUlong,
                    Feature: Feature,
                    SectorCouont: SectorCouont,
                    SectorNumber: SectorNumber,
                    Cylinder: Cylinder,
                    DeviceHead: DeviceHead,
                    Command: Command,
                    Reserved: Reserved,
                    DataTransferLength: DataTransferLength,
                    DataBufferOffset: DataBufferOffset
                    ): IntPtr.Size == 4 ? new AtaPassThroughEx32(
                    AtaFlags: AtaFlags,
                    PathId: PathId,
                    TargetId: TargetId,
                    Lun: Lun,
                    ReservedAsUchar: ReservedAsUchar,
                    TimeOutValue: TimeOutValue,
                    ReservedAsUlong: ReservedAsUlong,
                    Feature: Feature,
                    SectorCouont: SectorCouont,
                    SectorNumber: SectorNumber,
                    Cylinder: Cylinder,
                    DeviceHead: DeviceHead,
                    Command: Command,
                    Reserved: Reserved,
                    DataTransferLength: DataTransferLength,
                    DataBufferOffset: DataBufferOffset
                    ): throw new NotSupportedException();
            var Size = (uint)(_Size + DataSize);
            var Ptr  = Marshal.AllocCoTaskMem((int)Size);

            using (Disposable.Create(() => Marshal.FreeCoTaskMem(Ptr)))
            {
                Marshal.StructureToPtr(Header, Ptr, false);
                var result = IoControl.DeviceIoControl(IOControlCode.AtaPassThrough, Ptr, Size, out var _);
                Header = result ? (AtaPassThroughEx)Marshal.PtrToStructure(Ptr, typeof(AtaPassThroughEx)) : default;
                if (DataSize > 0)
                {
                    Data = new byte[DataSize];
                    Marshal.Copy(IntPtr.Add(Ptr, _Size), Data, 0, Data.Length);
                }
                else
                {
                    Data = default;
                }
                return(result);
            }
        }
コード例 #7
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="IoControl"></param>
 /// <param name="AtaFlags"></param>
 /// <param name="PathId"></param>
 /// <param name="TargetId"></param>
 /// <param name="Lun"></param>
 /// <param name="ReservedAsUchar"></param>
 /// <param name="TimeOutValue"></param>
 /// <param name="ReservedAsUlong"></param>
 /// <param name="DataTransferLength"></param>
 /// <param name="DataBuffer"></param>
 /// <param name="Feature"></param>
 /// <param name="SectorCouont"></param>
 /// <param name="SectorNumber"></param>
 /// <param name="Cylinder"></param>
 /// <param name="DeviceHead"></param>
 /// <param name="Command"></param>
 /// <param name="Reserved"></param>
 /// <returns></returns>
 public static AtaPassThroughDirect AtaPassThroughDirect(this IoControl IoControl, AtaFlags AtaFlags = default, byte PathId = default, byte TargetId = default, byte Lun = default, byte ReservedAsUchar = default, uint TimeOutValue = default, uint ReservedAsUlong = default, uint DataTransferLength = default, IntPtr DataBuffer = default, ushort Feature = default, ushort SectorCouont = default, ushort SectorNumber = default, uint Cylinder = default, byte DeviceHead = default, byte Command = default, ushort Reserved = default)
 {
     if (!AtaPassThroughDirect(IoControl, out var Header, AtaFlags, PathId, TargetId, Lun, ReservedAsUchar, TimeOutValue, ReservedAsUlong, DataTransferLength, DataBuffer, Feature, SectorCouont, SectorNumber, Cylinder, DeviceHead, Command, Reserved))
     {
         Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
     }
     return(Header);
 }
コード例 #8
0
 /// <summary>
 /// IOCTL_ATA_PASS_THROUGH_DIRECT IOCTL ( https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntddscsi/ni-ntddscsi-ioctl_ata_pass_through_direct )
 /// </summary>
 /// <param name="IoControl"></param>
 /// <param name="Header"></param>
 /// <param name="AtaFlags"></param>
 /// <param name="PathId"></param>
 /// <param name="TargetId"></param>
 /// <param name="Lun"></param>
 /// <param name="ReservedAsUchar"></param>
 /// <param name="TimeOutValue"></param>
 /// <param name="ReservedAsUlong"></param>
 /// <param name="DataTransferLength"></param>
 /// <param name="DataBuffer"></param>
 /// <param name="Feature"></param>
 /// <param name="SectorCouont"></param>
 /// <param name="SectorNumber"></param>
 /// <param name="Cylinder"></param>
 /// <param name="DeviceHead"></param>
 /// <param name="Command"></param>
 /// <param name="Reserved"></param>
 /// <returns></returns>
 public static bool AtaPassThroughDirect(this IoControl IoControl, out AtaPassThroughDirect Header, AtaFlags AtaFlags = default, byte PathId = default, byte TargetId = default, byte Lun = default, byte ReservedAsUchar = default, uint TimeOutValue = default, uint ReservedAsUlong = default, uint DataTransferLength = default, IntPtr DataBuffer = default, ushort Feature = default, ushort SectorCouont = default, ushort SectorNumber = default, uint Cylinder = default, byte DeviceHead = default, byte Command = default, ushort Reserved = default)
 {
     Header = new AtaPassThroughDirect(
         AtaFlags: AtaFlags,
         PathId: PathId,
         TargetId: TargetId,
         Lun: Lun,
         ReservedAsUchar: ReservedAsUchar,
         TimeOutValue: TimeOutValue,
         ReservedAsUlong: ReservedAsUlong,
         Feature: Feature,
         SectorCouont: SectorCouont,
         SectorNumber: SectorNumber,
         Cylinder: Cylinder,
         DeviceHead: DeviceHead,
         Command: Command,
         Reserved: Reserved,
         DataTransferLength: DataTransferLength,
         DataBuffer: DataBuffer
         );
     return(IoControl.DeviceIoControl(IOControlCode.AtaPassThroughDirect, ref Header, out var _));
 }
コード例 #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="IoControl"></param>
 /// <param name="AtaFlags"></param>
 /// <param name="PathId"></param>
 /// <param name="TargetId"></param>
 /// <param name="Lun"></param>
 /// <param name="ReservedAsUchar"></param>
 /// <param name="TimeOutValue"></param>
 /// <param name="ReservedAsUlong"></param>
 /// <param name="Feature"></param>
 /// <param name="SectorCouont"></param>
 /// <param name="SectorNumber"></param>
 /// <param name="Cylinder"></param>
 /// <param name="DeviceHead"></param>
 /// <param name="Command"></param>
 /// <param name="Reserved"></param>
 /// <param name="DataSize"></param>
 /// <returns></returns>
 public static (IAtaPassThroughEx Header, byte[] Data) AtaPassThrough(this IoControl IoControl, AtaFlags AtaFlags, byte PathId = default, byte TargetId = default, byte Lun = default, byte ReservedAsUchar = default, uint TimeOutValue = default, uint ReservedAsUlong = default, ushort Feature = default, ushort SectorCouont = default, ushort SectorNumber = default, uint Cylinder = default, byte DeviceHead = default, byte Command = default, ushort Reserved = default, uint DataSize = default)
 {
     if (!AtaPassThrough(IoControl,
                         Header: out var Header,
                         Data: out var Data,
                         AtaFlags: AtaFlags,
                         PathId: PathId,
                         TargetId: TargetId,
                         Lun: Lun,
                         ReservedAsUchar: ReservedAsUchar,
                         TimeOutValue: TimeOutValue,
                         ReservedAsUlong: ReservedAsUlong,
                         Feature: Feature,
                         SectorCouont: SectorCouont,
                         SectorNumber: SectorNumber,
                         Cylinder: Cylinder,
                         DeviceHead: DeviceHead,
                         Command: Command,
                         Reserved: Reserved,
                         DataSize: DataSize))
     {
         Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
     }
     return(Header, Data);
 }