Не записывается Master Boot Record раздел в файл

233
20 декабря 2017, 19:26

Пытаюсь создать копию MBR записывая её в файл mbr.img:

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern SafeFileHandle CreateFile(string lpFileName,[MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess,
[MarshalAs(UnmanagedType.U4)] FileShare dwShareMode,
IntPtr lpSecurityAttributes,
[MarshalAs(UnmanagedType.U4)] FileMode dwCreationDisposition,
[MarshalAs(UnmanagedType.U4)] FileAttributes dwFlagsAndAttributes,
IntPtr hTemplateFile);
SafeFileHandle handle = CreateFile(lpFileName: @"\\.\C:",dwDesiredAccess: FileAccess.Read,dwShareMode: FileShare.ReadWrite,
lpSecurityAttributes: IntPtr.Zero,dwCreationDisposition: FileMode.OpenOrCreate,
dwFlagsAndAttributes: FileAttributes.Normal,hTemplateFile: IntPtr.Zero);
using (FileStream disk = new FileStream(handle, FileAccess.Read))
{
   byte[] mbrData = new byte[512];
   Console.WriteLine("Starting MBR Backup...");
   try
   {
     disk.Read(mbrData, 0, mbrData.Length);
     FileStream mbrSave = new FileStream("mbr.img", FileMode.Create);
     mbrSave.Write(mbrData, 0, mbrData.Length);
     Console.WriteLine("MBR Backuped to mymbr.img success!");
   }
   catch (Exception e)
   {
       Console.WriteLine(e.Message);
   }
}

Ошибок нету, но создаётся пустой файл mbr.img

В чём может быть ошибка?

P.S: На Windows 7 работает нормально. Пишу на windows 10

Пример взял от сюда: Создания файла Master Boot Record

Answer 1

Проблема решена добавлением using в запись файла:

using (var handle = CreateFile(@"\\.\C:", FileAccess.Read, FileShare.ReadWrite, IntPtr.Zero, FileMode.OpenOrCreate, FileAttributes.Normal, IntPtr.Zero))
{
  using (var disk = new FileStream(handle, FileAccess.Read))
  {
     Console.WriteLine(value: "Starting MBR Backup...");
     try
     {
       disk.Read(new byte[512], 0, (new byte[512]).Length);
       using (var mbrSave = new FileStream(path: "mbr.img", mode: FileMode.Create))
       {
         mbrSave.Write(array: new byte[512], offset: 0, count: (new byte[512]).Length);
         Console.WriteLine("MBR Backuped to mymbr.img success!");
        }
       }
       catch (Exception e)
       {
           Console.WriteLine(e.Message);
       }
    }
}
READ ALSO
Встраивание другого приложения в свое

Встраивание другого приложения в свое

Допустим, есть приложение, написанное на каком-то языкеДанное приложение не имеет API, но имеет некоторый интерфейс

283
Не создается база данных в entity framework?

Не создается база данных в entity framework?

Что может быть причиной данной ошибки?

223
Создание второго лога используя Nlog

Создание второго лога используя Nlog

Задача: создать два логаПервый для записи Info, второй для записи Errors

484
Метод касательных (Ньютона) на c#, приближенное нахождение производной

Метод касательных (Ньютона) на c#, приближенное нахождение производной

У меня программа для решения уравнения методом касательнойНа форме разместила интервал и точность, а на кнопку Вычислить нужно прописать...

252