* DiscImageChef.Devices/Command.cs:

Add skeleton for send SCSI command method.

	* DiscImageChef.Devices/Linux/Command.cs:
	* DiscImageChef.Devices/Windows/Command.cs:
	  Added per-platform send SCSI command method.

	* DiscImageChef.sln:
	* DiscImageChef.Interop/DetectOS.cs:
	* DiscImageChef.Interop/PlatformID.cs:
	* DiscImageChef.Interop/Properties/AssemblyInfo.cs:
	* DiscImageChef.Interop/DiscImageChef.Interop.csproj:
	  Added code to detect OS.

	* DiscImageChef.Devices/DiscImageChef.Devices.csproj:
	  Added per-platform send SCSI command method.
	Add skeleton for send SCSI command method.

	* DiscImageChef.Devices/Linux/Extern.cs:
	* DiscImageChef.Devices/Windows/Extern.cs:
	  Enhanced externs.

	* DiscImageChef.Devices/Linux/Structs.cs:
	  Typo.
This commit is contained in:
2015-10-12 06:25:49 +01:00
parent 7fa4c3fbeb
commit 115bf5030f
15 changed files with 612 additions and 11 deletions

View File

@@ -1,3 +1,8 @@
2015-10-12 Natalia Portillo <claunia@claunia.com>
* DiscImageChef.sln:
Added code to detect OS.
2015-10-05 Natalia Portillo <claunia@claunia.com> 2015-10-05 Natalia Portillo <claunia@claunia.com>
* DiscImageChef.sln: * DiscImageChef.sln:

View File

@@ -1,3 +1,23 @@
2015-10-12 Natalia Portillo <claunia@claunia.com>
* Command.cs:
Add skeleton for send SCSI command method.
* Linux/Command.cs:
* Windows/Command.cs:
Added per-platform send SCSI command method.
* DiscImageChef.Devices.csproj:
Added per-platform send SCSI command method.
Add skeleton for send SCSI command method.
* Linux/Extern.cs:
* Windows/Extern.cs:
Enhanced externs.
* Linux/Structs.cs:
Typo.
2015-10-07 Natalia Portillo <claunia@claunia.com> 2015-10-07 Natalia Portillo <claunia@claunia.com>
* Linux/Enums.cs: * Linux/Enums.cs:

View File

@@ -0,0 +1,12 @@
using System;
namespace DiscImageChef.Devices
{
public class Command
{
public Command()
{
}
}
}

View File

@@ -42,6 +42,9 @@
<Compile Include="Windows\Extern.cs" /> <Compile Include="Windows\Extern.cs" />
<Compile Include="Windows\Structs.cs" /> <Compile Include="Windows\Structs.cs" />
<Compile Include="Windows\Enums.cs" /> <Compile Include="Windows\Enums.cs" />
<Compile Include="Windows\Command.cs" />
<Compile Include="Linux\Command.cs" />
<Compile Include="Command.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup> <ItemGroup>
@@ -57,4 +60,10 @@
</Properties> </Properties>
</MonoDevelop> </MonoDevelop>
</ProjectExtensions> </ProjectExtensions>
<ItemGroup>
<ProjectReference Include="..\DiscImageChef.Interop\DiscImageChef.Interop.csproj">
<Project>{9183F2E0-A879-4F23-9EE3-C6908F1332B2}</Project>
<Name>DiscImageChef.Interop</Name>
</ProjectReference>
</ItemGroup>
</Project> </Project>

View File

@@ -0,0 +1,52 @@
using System;
using System.Runtime.InteropServices;
namespace DiscImageChef.Devices.Linux
{
static class Command
{
internal static int SendScsiCommand(int fd, byte[] cdb, ref byte[] buffer, out byte[] senseBuffer, uint timeout, ScsiIoctlDirection direction, out double duration, out bool sense)
{
senseBuffer = null;
duration = 0;
sense = false;
if (buffer == null)
return -1;
sg_io_hdr_t io_hdr = new sg_io_hdr_t();
senseBuffer = new byte[32];
io_hdr.interface_id = 'S';
io_hdr.cmd_len = (byte)cdb.Length;
io_hdr.mx_sb_len = (byte)senseBuffer.Length;
io_hdr.dxfer_direction = direction;
io_hdr.dxfer_len = (uint)buffer.Length;
io_hdr.dxferp = Marshal.AllocHGlobal(buffer.Length);
io_hdr.cmdp = Marshal.AllocHGlobal(cdb.Length);
io_hdr.sbp = Marshal.AllocHGlobal(senseBuffer.Length);
io_hdr.timeout = timeout * 1000;
Marshal.Copy(buffer, 0, io_hdr.dxferp, buffer.Length);
Marshal.Copy(cdb, 0, io_hdr.cmdp, cdb.Length);
Marshal.Copy(senseBuffer, 0, io_hdr.sbp, senseBuffer.Length);
int error = Extern.ioctlSg(fd, LinuxIoctl.SG_IO, ref io_hdr);
if (error < 0)
error = Marshal.GetLastWin32Error();
Marshal.Copy(io_hdr.dxferp, buffer, 0, buffer.Length);
Marshal.Copy(io_hdr.cmdp, cdb, 0, cdb.Length);
Marshal.Copy(io_hdr.sbp, senseBuffer, 0, senseBuffer.Length);
sense |= (io_hdr.info & SgInfo.OkMask) != SgInfo.Ok;
duration = (double)io_hdr.duration;
return error;
}
}
}

View File

@@ -14,16 +14,16 @@ namespace DiscImageChef.Devices.Linux
internal static extern int close(int fd); internal static extern int close(int fd);
[DllImport("libc", EntryPoint="ioctl", SetLastError = true)] [DllImport("libc", EntryPoint="ioctl", SetLastError = true)]
internal static extern int ioctlInt(int fd, ulong request, out int value); internal static extern int ioctlInt(int fd, LinuxIoctl request, out int value);
[DllImport("libc", EntryPoint="ioctl", SetLastError = true)] [DllImport("libc", EntryPoint="ioctl", SetLastError = true)]
internal static extern int ioctlSg(int fd, ulong request, ref sg_io_hdr_t value); internal static extern int ioctlSg(int fd, LinuxIoctl request, ref sg_io_hdr_t value);
[DllImport("libc", EntryPoint="ioctl", SetLastError = true)] [DllImport("libc", EntryPoint="ioctl", SetLastError = true)]
internal static extern int ioctlHdTaskfile(int fd, ulong request, ref hd_drive_task_hdr value); internal static extern int ioctlHdTaskfile(int fd, LinuxIoctl request, ref hd_drive_task_hdr value);
[DllImport("libc", EntryPoint="ioctl", SetLastError = true)] [DllImport("libc", EntryPoint="ioctl", SetLastError = true)]
internal static extern int ioctlHdTask(int fd, ulong request, ref byte[] value); internal static extern int ioctlHdTask(int fd, LinuxIoctl request, ref byte[] value);
} }
} }

View File

@@ -10,11 +10,11 @@ namespace DiscImageChef.Devices.Linux
/// Always 'S' for SG v3 /// Always 'S' for SG v3
/// </summary> /// </summary>
public int interface_id; /* [i] 'S' (required) */ public int interface_id; /* [i] 'S' (required) */
public int dxfer_direction; /* [i] */ public ScsiIoctlDirection dxfer_direction; /* [i] */
public byte cmd_len; /* [i] */ public byte cmd_len; /* [i] */
public byte mx_sb_len; /* [i] */ public byte mx_sb_len; /* [i] */
public ushort iovec_count; /* [i] */ public ushort iovec_count; /* [i] */
public ScsiIoctlDirection dxfer_len; /* [i] */ public uint dxfer_len; /* [i] */
public IntPtr dxferp; /* [i], [*io] */ public IntPtr dxferp; /* [i], [*io] */
public IntPtr cmdp; /* [i], [*i] */ public IntPtr cmdp; /* [i], [*i] */
public IntPtr sbp; /* [i], [*o] */ public IntPtr sbp; /* [i], [*o] */

View File

@@ -0,0 +1,56 @@
using System;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
namespace DiscImageChef.Devices.Windows
{
static class Command
{
internal static int SendScsiCommand(SafeFileHandle fd, byte[] cdb, ref byte[] buffer, out byte[] senseBuffer, uint timeout, ScsiIoctlDirection direction, out double duration, out bool sense)
{
senseBuffer = null;
duration = 0;
sense = false;
if (buffer == null)
return -1;
ScsiPassThroughDirectAndSenseBuffer sptd_sb = new ScsiPassThroughDirectAndSenseBuffer();
sptd_sb.sptd = new ScsiPassThroughDirect();
sptd_sb.SenseBuf = new byte[32];
sptd_sb.sptd.Cdb = new byte[16];
Array.Copy(cdb, sptd_sb.sptd.Cdb, cdb.Length);
sptd_sb.sptd.Length = (ushort)Marshal.SizeOf(sptd_sb.sptd);
sptd_sb.sptd.CdbLength = (byte)cdb.Length;
sptd_sb.sptd.SenseInfoLength = (byte)sptd_sb.SenseBuf.Length;
sptd_sb.sptd.DataIn = direction;
sptd_sb.sptd.DataTransferLength = (uint)buffer.Length;
sptd_sb.sptd.TimeOutValue = timeout;
sptd_sb.sptd.DataBuffer = Marshal.AllocHGlobal(buffer.Length);
sptd_sb.sptd.SenseInfoOffset = (uint)Marshal.SizeOf(sptd_sb.sptd);
uint k = 0;
int error = 0;
DateTime start = DateTime.Now;
bool hasError = Extern.DeviceIoControlScsi(fd, WindowsIoctl.IOCTL_SCSI_PASS_THROUGH_DIRECT, ref sptd_sb, (uint)Marshal.SizeOf(sptd_sb), ref sptd_sb,
(uint)Marshal.SizeOf(sptd_sb), ref k, IntPtr.Zero);
DateTime end = DateTime.Now;
if (hasError)
error = Marshal.GetLastWin32Error();
Marshal.Copy(sptd_sb.sptd.DataBuffer, buffer, 0, buffer.Length);
sense |= sptd_sb.sptd.ScsiStatus != 0;
senseBuffer = new byte[32];
Array.Copy(sptd_sb.SenseBuf, senseBuffer, 32);
duration = (end - start).TotalMilliseconds;
return error;
}
}
}

View File

@@ -17,9 +17,9 @@ namespace DiscImageChef.Devices.Windows
IntPtr templateFile); IntPtr templateFile);
[DllImport("Kernel32.dll", SetLastError = true, EntryPoint="ioctl", CharSet = CharSet.Auto)] [DllImport("Kernel32.dll", SetLastError = true, EntryPoint="ioctl", CharSet = CharSet.Auto)]
public static extern bool DeviceIoControlScsi( internal static extern bool DeviceIoControlScsi(
SafeFileHandle hDevice, SafeFileHandle hDevice,
uint IoControlCode, WindowsIoctl IoControlCode,
ref ScsiPassThroughDirectAndSenseBuffer InBuffer, ref ScsiPassThroughDirectAndSenseBuffer InBuffer,
uint nInBufferSize, uint nInBufferSize,
ref ScsiPassThroughDirectAndSenseBuffer OutBuffer, ref ScsiPassThroughDirectAndSenseBuffer OutBuffer,
@@ -29,9 +29,9 @@ namespace DiscImageChef.Devices.Windows
); );
[DllImport("Kernel32.dll", SetLastError = true, EntryPoint="ioctl", CharSet = CharSet.Auto)] [DllImport("Kernel32.dll", SetLastError = true, EntryPoint="ioctl", CharSet = CharSet.Auto)]
public static extern bool DeviceIoControlAta( internal static extern bool DeviceIoControlAta(
SafeFileHandle hDevice, SafeFileHandle hDevice,
uint IoControlCode, WindowsIoctl IoControlCode,
ref AtaPassThroughDirect InBuffer, ref AtaPassThroughDirect InBuffer,
uint nInBufferSize, uint nInBufferSize,
ref AtaPassThroughDirect OutBuffer, ref AtaPassThroughDirect OutBuffer,
@@ -41,7 +41,7 @@ namespace DiscImageChef.Devices.Windows
); );
[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool CloseHandle(SafeFileHandle hDevice); internal static extern bool CloseHandle(SafeFileHandle hDevice);
} }
} }

View File

@@ -0,0 +1,8 @@
2015-10-12 Natalia Portillo <claunia@claunia.com>
* DetectOS.cs:
* PlatformID.cs:
* Properties/AssemblyInfo.cs:
* DiscImageChef.Interop.csproj:
Added code to detect OS.

View File

@@ -0,0 +1,188 @@
//
// Interop.DetectOS.cs
//
// Author:
// Natalia Portillo <claunia@claunia.com>
//
// Copyright (c) 2015 © Claunia.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using System.Runtime.InteropServices;
namespace DiscImageChef.Interop
{
public static class DetectOS
{
/// <summary>
/// POSIX uname structure, size from OSX, big enough to handle extra fields
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
struct utsname
{
/// <summary>
/// System name
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sysname;
/// <summary>
/// Node name
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string nodename;
/// <summary>
/// Release level
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string release;
/// <summary>
/// Version level
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string version;
/// <summary>
/// Hardware level
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string machine;
}
[DllImport("libc", SetLastError = true)]
static extern int uname(out utsname name);
[DllImport("libc", SetLastError = true, EntryPoint = "sysctlbyname", CharSet = CharSet.Ansi)]
static extern int OSX_sysctlbyname(string name, IntPtr oldp, IntPtr oldlenp, IntPtr newp, uint newlen);
public static Interop.PlatformID GetRealPlatformID()
{
if ((int)Environment.OSVersion.Platform < 4 ||
(int)Environment.OSVersion.Platform == 5)
{
return (Interop.PlatformID)((int)Environment.OSVersion.Platform);
}
utsname unixname;
int error = uname(out unixname);
if (error != 0)
throw new Exception(String.Format("Unhandled exception calling uname: {0}", Marshal.GetLastWin32Error()));
switch (unixname.sysname)
{
// TODO: Differentiate Linux, Android, Tizen
case "Linux":
{
#if __ANDROID__
return PlatformID.Android;
#else
return PlatformID.Linux;
#endif
}
case "Darwin":
{
int osx_error;
IntPtr pLen = Marshal.AllocHGlobal(sizeof(int));
osx_error = OSX_sysctlbyname("hw.machine", IntPtr.Zero, pLen, IntPtr.Zero, 0);
if (osx_error != 0)
{
Marshal.FreeHGlobal(pLen);
throw new Exception(String.Format("Unhandled exception calling uname: {0}", Marshal.GetLastWin32Error()));
}
int length = Marshal.ReadInt32(pLen);
IntPtr pStr = Marshal.AllocHGlobal(length);
osx_error = OSX_sysctlbyname("hw.machine", pStr, pLen, IntPtr.Zero, 0);
if (osx_error != 0)
{
Marshal.FreeHGlobal(pStr);
Marshal.FreeHGlobal(pLen);
throw new Exception(String.Format("Unhandled exception calling uname: {0}", Marshal.GetLastWin32Error()));
}
string machine = Marshal.PtrToStringAnsi(pStr);
Marshal.FreeHGlobal(pStr);
Marshal.FreeHGlobal(pLen);
if (machine.StartsWith("iPad", StringComparison.Ordinal) ||
machine.StartsWith("iPod", StringComparison.Ordinal) ||
machine.StartsWith("iPhone", StringComparison.Ordinal))
return PlatformID.iOS;
return PlatformID.MacOSX;
}
case "GNU":
return PlatformID.Hurd;
case "FreeBSD":
case "GNU/kFreeBSD":
return PlatformID.FreeBSD;
case "DragonFly":
return PlatformID.DragonFly;
case "Haiku":
return PlatformID.Haiku;
case "HP-UX":
return PlatformID.HPUX;
case "AIX":
return PlatformID.AIX;
case "OS400":
return PlatformID.OS400;
case "IRIX":
case "IRIX64":
return PlatformID.IRIX;
case "Minix":
return PlatformID.Minix;
case "NetBSD":
return PlatformID.NetBSD;
case "NONSTOP_KERNEL":
return PlatformID.NonStop;
case "OpenBSD":
return PlatformID.OpenBSD;
case "QNX":
return PlatformID.QNX;
case "SINIX-Y":
return PlatformID.SINIX;
case "SunOS":
return PlatformID.Solaris;
case "OSF1":
return PlatformID.Tru64;
case "ULTRIX":
return PlatformID.Ultrix;
case "SCO_SV":
return PlatformID.OpenServer;
case "UnixWare":
return PlatformID.UnixWare;
case "Interix":
case "UWIN-W7":
return PlatformID.Win32NT;
default:
{
if (unixname.sysname.StartsWith("CYGWIN_NT", StringComparison.Ordinal) ||
unixname.sysname.StartsWith("MINGW32_NT", StringComparison.Ordinal) ||
unixname.sysname.StartsWith("MSYS_NT", StringComparison.Ordinal) ||
unixname.sysname.StartsWith("UWIN", StringComparison.Ordinal))
return PlatformID.Win32NT;
return PlatformID.Unknown;
}
}
}
}
}

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9183F2E0-A879-4F23-9EE3-C6908F1332B2}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>DiscImageChef.Interop</RootNamespace>
<AssemblyName>DiscImageChef.Interop</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="DetectOS.cs" />
<Compile Include="PlatformID.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,177 @@
//
// Interop.PlatformID.cs
//
// Author:
// Natalia Portillo <claunia@claunia.com>
//
// Copyright (c) 2015 © Claunia.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
namespace DiscImageChef.Interop
{
public enum PlatformID
{
/// <summary>
/// Win32s
/// </summary>
Win32S = 0,
/// <summary>
/// Win32 (Windows 9x)
/// </summary>
Win32Windows = 1,
/// <summary>
/// Windows NT
/// </summary>
Win32NT = 2,
/// <summary>
/// Windows Mobile
/// </summary>
WinCE = 3,
/// <summary>
/// UNIX (do not use, too generic)
/// </summary>
Unix = 4,
/// <summary>
/// Xbox 360
/// </summary>
Xbox = 5,
/// <summary>
/// OS X
/// </summary>
MacOSX = 6,
/// <summary>
/// iOS is not OS X
/// </summary>
iOS = 7,
/// <summary>
/// Linux
/// </summary>
Linux = 8,
/// <summary>
/// Sun Solaris
/// </summary>
Solaris = 9,
/// <summary>
/// NetBSD
/// </summary>
NetBSD = 10,
/// <summary>
/// OpenBSD
/// </summary>
OpenBSD = 11,
/// <summary>
/// FreeBSD
/// </summary>
FreeBSD = 12,
/// <summary>
/// DragonFly BSD
/// </summary>
DragonFly = 13,
/// <summary>
/// Nintendo Wii
/// </summary>
Wii = 14,
/// <summary>
/// Nintendo Wii U
/// </summary>
WiiU = 15,
/// <summary>
/// Sony PlayStation 3
/// </summary>
PlayStation3 = 16,
/// <summary>
/// Sony Playstation 4
/// </summary>
PlayStation4 = 17,
/// <summary>
/// Google Android
/// </summary>
Android = 18,
/// <summary>
/// Samsung Tizen
/// </summary>
Tizen = 19,
/// <summary>
/// Windows Phone
/// </summary>
WindowsPhone = 20,
/// <summary>
/// GNU/Hurd
/// </summary>
Hurd = 21,
/// <summary>
/// Haiku
/// </summary>
Haiku = 22,
/// <summary>
/// HP-UX
/// </summary>
HPUX = 23,
/// <summary>
/// AIX
/// </summary>
AIX = 24,
/// <summary>
/// OS/400
/// </summary>
OS400 = 25,
/// <summary>
/// IRIX
/// </summary>
IRIX = 26,
/// <summary>
/// Minix
/// </summary>
Minix = 27,
/// <summary>
/// NonStop
/// </summary>
NonStop = 28,
/// <summary>
/// QNX
/// </summary>
QNX = 29,
/// <summary>
/// SINIX
/// </summary>
SINIX = 30,
/// <summary>
/// Tru64 UNIX
/// </summary>
Tru64 = 31,
/// <summary>
/// Ultrix
/// </summary>
Ultrix = 32,
/// <summary>
/// SCO OpenServer / SCO UNIX
/// </summary>
OpenServer = 33,
/// <summary>
/// SCO UnixWare
/// </summary>
UnixWare = 34,
/// <summary>
/// IBM z/OS
/// </summary>
zOS = 35,
Unknown = -1
}
}

View File

@@ -0,0 +1,27 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("DiscImageChef.Interop")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Claunia.com")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("© Claunia.com")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

View File

@@ -23,6 +23,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Decoders", "D
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Devices", "DiscImageChef.Devices\DiscImageChef.Devices.csproj", "{57BB2341-AB62-48FD-91B8-46F5A2F9ED51}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Devices", "DiscImageChef.Devices\DiscImageChef.Devices.csproj", "{57BB2341-AB62-48FD-91B8-46F5A2F9ED51}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Interop", "DiscImageChef.Interop\DiscImageChef.Interop.csproj", "{9183F2E0-A879-4F23-9EE3-C6908F1332B2}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
@@ -51,6 +53,10 @@ Global
{7A4B05BE-73C9-4F34-87FE-E80CCF1F732D}.Release|x86.Build.0 = Release|x86 {7A4B05BE-73C9-4F34-87FE-E80CCF1F732D}.Release|x86.Build.0 = Release|x86
{8996EF59-09B9-4920-A3DE-2F8EA2EBBCFF}.Debug|x86.ActiveCfg = Debug|Any CPU {8996EF59-09B9-4920-A3DE-2F8EA2EBBCFF}.Debug|x86.ActiveCfg = Debug|Any CPU
{8996EF59-09B9-4920-A3DE-2F8EA2EBBCFF}.Release|x86.ActiveCfg = Release|Any CPU {8996EF59-09B9-4920-A3DE-2F8EA2EBBCFF}.Release|x86.ActiveCfg = Release|Any CPU
{9183F2E0-A879-4F23-9EE3-C6908F1332B2}.Debug|x86.ActiveCfg = Debug|Any CPU
{9183F2E0-A879-4F23-9EE3-C6908F1332B2}.Debug|x86.Build.0 = Debug|Any CPU
{9183F2E0-A879-4F23-9EE3-C6908F1332B2}.Release|x86.ActiveCfg = Release|Any CPU
{9183F2E0-A879-4F23-9EE3-C6908F1332B2}.Release|x86.Build.0 = Release|Any CPU
{CC48B324-A532-4A45-87A6-6F91F7141E8D}.Debug|x86.ActiveCfg = Debug|Any CPU {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Debug|x86.ActiveCfg = Debug|Any CPU
{CC48B324-A532-4A45-87A6-6F91F7141E8D}.Debug|x86.Build.0 = Debug|Any CPU {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Debug|x86.Build.0 = Debug|Any CPU
{CC48B324-A532-4A45-87A6-6F91F7141E8D}.Release|x86.ActiveCfg = Release|Any CPU {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Release|x86.ActiveCfg = Release|Any CPU