Fixed AccessViolationExeption crash on AMD Radeon RAMDisk (#1423)

This commit is contained in:
Konstantin Budnikov
2024-08-23 15:24:15 +02:00
committed by GitHub
parent 47628460f2
commit 0263346d89
@@ -80,19 +80,19 @@ internal static class WindowsStorage
{
Kernel32.STORAGE_DEVICE_DESCRIPTOR descriptor = Marshal.PtrToStructure<Kernel32.STORAGE_DEVICE_DESCRIPTOR>(descriptorPtr);
Index = index;
Vendor = GetString(descriptorPtr, descriptor.VendorIdOffset);
Product = GetString(descriptorPtr, descriptor.ProductIdOffset);
Revision = GetString(descriptorPtr, descriptor.ProductRevisionOffset);
Serial = GetString(descriptorPtr, descriptor.SerialNumberOffset);
Vendor = GetString(descriptorPtr, descriptor.VendorIdOffset, descriptor.Size);
Product = GetString(descriptorPtr, descriptor.ProductIdOffset, descriptor.Size);
Revision = GetString(descriptorPtr, descriptor.ProductRevisionOffset, descriptor.Size);
Serial = GetString(descriptorPtr, descriptor.SerialNumberOffset, descriptor.Size);
BusType = descriptor.BusType;
Removable = descriptor.RemovableMedia;
RawData = new byte[descriptor.Size];
Marshal.Copy(descriptorPtr, RawData, 0, RawData.Length);
}
private static string GetString(IntPtr descriptorPtr, uint offset)
private static string GetString(IntPtr descriptorPtr, uint offset, uint size)
{
return offset > 0 ? Marshal.PtrToStringAnsi(IntPtr.Add(descriptorPtr, (int)offset))?.Trim() : string.Empty;
return offset > 0 && offset < size ? Marshal.PtrToStringAnsi(IntPtr.Add(descriptorPtr, (int)offset))?.Trim() : string.Empty;
}
}
}