public static int Main(string[] args)
{
if (args.Length != 2)
{
Console.WriteLine("usage: makeiso [drive] [file]");
return 1;
}
var drive = new DriveInfo(args[0]);
if (drive.DriveType != DriveType.CDRom)
{
Console.Error.WriteLine("Invalid drive letter.");
return 2;
}
try
{
using (var inputFileHandle = CreateFile(@"\\.\" + drive.ToString().TrimEnd('\\'), GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0))
{
if (inputFileHandle.IsInvalid)
{
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
}
using (var inputStream = new FileStream(inputFileHandle, FileAccess.Read))
{
using (var outputStream = new FileStream(args[1], FileMode.CreateNew))
{
inputStream.CopyTo(outputStream);
}
}
}
return 0;
}
catch (Exception e)
{
Console.Error.WriteLine(e.Message);
return 1;
}
}