Exemplo n.º 1
0
        public static SCSI_INQUIRY_DATA FromIntPtr(IntPtr ptr)
        {
            SCSI_INQUIRY_DATA inquiryData = new SCSI_INQUIRY_DATA();

            inquiryData.PathId                = Marshal.ReadByte(ptr, 0);
            inquiryData.TargetId              = Marshal.ReadByte(ptr, 1);
            inquiryData.Lun                   = Marshal.ReadByte(ptr, 2);
            inquiryData.DeviceClaimed         = Convert.ToBoolean(Marshal.ReadByte(ptr, 3));
            inquiryData.InquiryDataLength     = (uint)Marshal.ReadInt32(ptr, 4);
            inquiryData.NextInquiryDataOffset = (uint)Marshal.ReadInt32(ptr, 8);
            inquiryData.InquiryData           = new byte[inquiryData.InquiryDataLength];
            int    inquiryDataOffset = 12;
            IntPtr inquiryDataPtr    = new IntPtr(ptr.ToInt64() + inquiryDataOffset);

            Marshal.Copy(inquiryDataPtr, inquiryData.InquiryData, 0, inquiryData.InquiryData.Length);
            return(inquiryData);
        }
Exemplo n.º 2
0
        public static List <SCSI_INQUIRY_DATA> GetInquiryDataForAllDevices(IntPtr busInfoPtr)
        {
            SCSI_ADAPTER_BUS_INFO    busInfo = FromIntPtr(busInfoPtr);
            List <SCSI_INQUIRY_DATA> devices = new List <SCSI_INQUIRY_DATA>();

            foreach (SCSI_BUS_DATA busData in busInfo.BusData)
            {
                byte numberOfLuns      = busData.NumberOfLogicalUnits;
                uint inquiryDataOffset = busData.InquiryDataOffset;
                for (int lunIndex = 0; lunIndex < numberOfLuns; lunIndex++)
                {
                    IntPtr            inquiryDataPtr = new IntPtr(busInfoPtr.ToInt64() + inquiryDataOffset);
                    SCSI_INQUIRY_DATA inquiryData    = SCSI_INQUIRY_DATA.FromIntPtr(inquiryDataPtr);
                    devices.Add(inquiryData);
                    inquiryDataOffset = inquiryData.NextInquiryDataOffset;
                }
            }
            return(devices);
        }