/// <summary>Returns true if the specified handle is controlled by a SFFDISK (aka SDHCI) driver</summary> /// <param name="fd">Device handle</param> /// <returns><c>true</c> if SDHCI, false otherwise</returns> internal static bool IsSdhci(SafeFileHandle fd) { var queryData1 = new SffdiskQueryDeviceProtocolData(); queryData1.size = (ushort)Marshal.SizeOf(queryData1); Extern.DeviceIoControl(fd, WindowsIoctl.IoctlSffdiskQueryDeviceProtocol, IntPtr.Zero, 0, ref queryData1, queryData1.size, out _, IntPtr.Zero); return(queryData1.protocolGuid.Equals(Consts.GuidSffProtocolSd) || queryData1.protocolGuid.Equals(Consts.GuidSffProtocolMmc)); }
internal static extern bool DeviceIoControl(SafeFileHandle hDevice, WindowsIoctl ioControlCode, IntPtr inBuffer, uint nInBufferSize, ref SffdiskQueryDeviceProtocolData outBuffer, uint nOutBufferSize, out uint pBytesReturned, IntPtr overlapped);