private byte ReadOrWriteSectors(int sectorNumber, int numberOfSectors, byte[] data, bool write) { var readOrWriteSectorCommand = new byte[] { (byte)(write ? 0x2A: 0x28), 0, 0, 0, ((short)sectorNumber).GetHighByte(), ((short)sectorNumber).GetLowByte(), 0, 0, (byte)numberOfSectors, 0, 0, 0 }; var result = cbi.ExecuteCommandWithRetry(readOrWriteSectorCommand, data, 0, data.Length, write ? UsbDataDirection.OUT : UsbDataDirection.IN, out bool mediaChanged); if (!result.IsError && result.SenseData?[0] == 0) { return(0); } if (mediaChanged) { dpb = null; } return(DskioErrorCodeFromAsc(result.SenseData?[0] ?? 12)); }