Ejemplo n.º 1
0
 public void ZeroData(long startSector, long sectorCount)
 {
     _sw = Stopwatch.StartNew();
     CheckDeviceState();
     CheckSizeArgs(startSector, ref sectorCount);
     _device.OpenHandle();
     try {
         var lastsector = startSector + sectorCount;
         UpdateStatus(string.Format("Zeroing data on MMC Sectors: 0x{0:X} to 0x{1:X}", startSector, lastsector));
         SetBufSize(startSector, lastsector);
         Main.SendDebug(string.Format("Bufsize: 0x{0:X} Sector Size: 0x{1:X} Total Size: 0x{2:X}", _bufsize, _sectorSize, sectorCount * _sectorSize));
         var data = new byte[_bufsize];
         for (var sector = startSector; sector < lastsector;)
         {
             if (_abort)
             {
                 return;
             }
             SetBufSize(sector, lastsector);
             UpdateMMCProgress(sector, lastsector, _sectorSize, _bufsize);
             if (sector + (_bufsize / _sectorSize) > lastsector)
             {
                 Array.Resize(ref data, (int)((lastsector - sector) * _sectorSize));
             }
             _device.WriteToDevice(ref data, sector * _sectorSize);
             sector += _bufsize / _sectorSize;
         }
     }
     finally {
         _sw.Stop();
         UpdateStatus(string.Format((_abort ? "Aborted after: {0:F0} Minutes {1:F0} Seconds" : "Completed after: {0:F0} Minutes {1:F0} Seconds"), _sw.Elapsed.TotalMinutes, _sw.Elapsed.Seconds));
         if (_device != null)
         {
             _device.Release();
         }
     }
 }