SCSI_INQUIRY_DATA.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System;
  2. using System.Runtime.InteropServices;
  3. namespace SCSI.Win32
  4. {
  5. [StructLayout(LayoutKind.Sequential)]
  6. public class SCSI_INQUIRY_DATA
  7. {
  8. public byte PathId;
  9. public byte TargetId;
  10. public byte Lun;
  11. public bool DeviceClaimed; // Indicates that the device has been claimed by a class driver.
  12. public uint InquiryDataLength;
  13. public uint NextInquiryDataOffset;
  14. public byte[] InquiryData;
  15. public SCSI_INQUIRY_DATA()
  16. {
  17. }
  18. public static SCSI_INQUIRY_DATA FromIntPtr(IntPtr ptr)
  19. {
  20. SCSI_INQUIRY_DATA inquiryData = new SCSI_INQUIRY_DATA();
  21. inquiryData.PathId = Marshal.ReadByte(ptr, 0);
  22. inquiryData.TargetId = Marshal.ReadByte(ptr, 1);
  23. inquiryData.Lun = Marshal.ReadByte(ptr, 2);
  24. inquiryData.DeviceClaimed = Convert.ToBoolean(Marshal.ReadByte(ptr, 3));
  25. inquiryData.InquiryDataLength = (uint)Marshal.ReadInt32(ptr, 4);
  26. inquiryData.NextInquiryDataOffset = (uint)Marshal.ReadInt32(ptr, 8);
  27. inquiryData.InquiryData = new byte[inquiryData.InquiryDataLength];
  28. int inquiryDataOffset = 12;
  29. IntPtr inquiryDataPtr = new IntPtr(ptr.ToInt64() + inquiryDataOffset);
  30. Marshal.Copy(inquiryDataPtr, inquiryData.InquiryData, 0, inquiryData.InquiryData.Length);
  31. return inquiryData;
  32. }
  33. }
  34. }