Ejemplo n.º 1
0
        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));
        }