Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/54: Рейтинг темы: голосов - 54, средняя оценка - 4.50
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449

Как читать/записывать ячейки SD карты (Flash карты)

03.04.2013, 17:29. Показов 11128. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток, возникла необходимость прочесть/записать ячейки SD карты.

Подобно тому как это делает программа WinHex

Смотри

Как возможно это сделать ?

Заранее спасибо!
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2013, 17:29
Ответы с готовыми решениями:

Как записывать со встроенной звуковой карты?
Здравствуйте. Есть ноут ASUS K52JB и есть проблема: в аудиоустройствах отображаются только динамики Conexant CX20671 SmartAudio HD (для...

Есть номер банкоматовской карты. Как по одному номеру карты можно снять деньги?
Есть номер банкоматовской карты. Как по одному номеру карты можно снять деньги? Пин кода нет. Только номер карты Добавлено через 7...

Восстановление SDHC-flash карты.
Давно, когда покупал фотик, прикупил к нему флешку на 16гиг. Кароче проработала она с месяц гдето, и перестала опознаваться, похоронив в...

60
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
05.04.2013, 20:28  [ТС]
Народ подскажите!!!
Как читать/записывать сектора в диске? (SD/MMC)

Добавлено через 13 часов 57 минут
НАРОД!!!
ПОМОЩЬ НУЖНА !!!!
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
05.04.2013, 23:11
Так же как и любого другого диска.
С помощью WinAPI функции CreateFile открывать устройство и потом читать/писать с помощью FileStream.
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
10.04.2013, 11:43  [ТС]
пример можно увидеть ?
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
10.04.2013, 11:49
Вот как пользоваться функцией: http://msdn.microsoft.com/en-u... 80%29.aspx
Вот работа с диском: http://stackoverflow.com/quest... vegeometry
Ну и "createfile physicaldisk" в гугле.
2
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
11.04.2013, 10:39  [ТС]
Прочитать текстовой файл получилось...
Но вот как прочитать ячейки памяти ??
Не фал который расположен на диске, а именно сектор в 512 Байт

Спасибо!
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
11.04.2013, 13:47
Цитата Сообщение от sasha0192 Посмотреть сообщение
Прочитать текстовой файл получилось...
Но вот как прочитать ячейки памяти ??
Не фал который расположен на диске, а именно сектор в 512 Байт

Спасибо!
Открыть диск (например, "\\.\PhysicalDrive0") и читать 512 байт.
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
11.04.2013, 14:03  [ТС]
Цитата Сообщение от A1exSun Посмотреть сообщение
Открыть диск (например, "\\.\PhysicalDrive0") и читать 512 байт.
Может я что-то не понимаю, но чтобы работал этот пример (ниже), нужно указать полный путь к файлу.

Но как указать сектор (блок) для чтения (пример, 0x200)?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
class FileReader
{
    const uint GENERIC_READ = 0x80000000;
    const uint OPEN_EXISTING = 3;
    System.IntPtr handle;
 
    [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
    static extern unsafe System.IntPtr CreateFile
    (
        string FileName,          // file name
        uint DesiredAccess,       // access mode
        uint ShareMode,           // share mode
        uint SecurityAttributes,  // Security Attributes
        uint CreationDisposition, // how to create
        uint FlagsAndAttributes,  // file attributes
        int hTemplateFile         // handle to template file
    );
 
    [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
    static extern unsafe bool ReadFile
    (
        System.IntPtr hFile,      // handle to file
        void* pBuffer,            // data buffer
        int NumberOfBytesToRead,  // number of bytes to read
        int* pNumberOfBytesRead,  // number of bytes read
        int Overlapped            // overlapped buffer
    );
 
    [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
    static extern unsafe bool CloseHandle
    (
        System.IntPtr hObject // handle to object
    );
 
    public bool Open(string FileName)
    {
        // open the existing file for reading       
        handle = CreateFile
        (
            FileName,
            GENERIC_READ,
            0,
            0,
            OPEN_EXISTING,
            0,
            0
        );
 
        if (handle != System.IntPtr.Zero)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
 
    public unsafe int Read(byte[] buffer, int index, int count)
    {
        int n = 0;
        fixed (byte* p = buffer)
        {
            if (!ReadFile(handle, p + index, count, &n, 0))
            {
                return 0;
            }
        }
        return n;
    }
 
    public bool Close()
    {
        return CloseHandle(handle);
    }
}
 
class Test
{
    static int Main(string[] args)
    {
        if (args.Length != 1)
        {
            System.Console.WriteLine("Usage : ReadFile <FileName>");
            return 1;
        }
 
        if (!System.IO.File.Exists(args[0]))
        {
            System.Console.WriteLine("File " + args[0] + " not found.");
            return 1;
        }
 
        byte[] buffer = new byte[128];
        FileReader fr = new FileReader();
 
        if (fr.Open(args[0]))
        {
            // Assume that an ASCII file is being read.
            System.Text.ASCIIEncoding Encoding = new System.Text.ASCIIEncoding();
 
            int bytesRead;
            do
            {
                bytesRead = fr.Read(buffer, 0, buffer.Length);
                string content = Encoding.GetString(buffer, 0, bytesRead);
                System.Console.Write("{0}", content);
            }
            while (bytesRead > 0);
 
            fr.Close();
            return 0;
        }
        else
        {
            System.Console.WriteLine("Failed to open requested file");
            return 1;
        }
    }
}
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
11.04.2013, 15:50
Правильно ты понимаешь, этот пример показывает работу функций CreateFile и ReadFile с файлами.
Но их же можно использовать для открытия физических устройств, для этого с помощью CreateFile открывается диск.
Позицию чтения устанавливать с помощью SetFilePointer: http://msdn.microsoft.com/en-u... 85%29.aspx
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
11.04.2013, 20:42  [ТС]
Так ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        static void Main(string[] args)
        {
            IntPtr hFile = CreateFile(
                "\\\\.\\PhysicalDrive1",
                GENERIC_READ,
                FILE_SHARE_READ | FILE_SHARE_WRITE,
                IntPtr.Zero,
                OPEN_EXISTING,
                0U,
                IntPtr.Zero
                );
 
            long value = 512;
            var retVal = 0;
            var buff = new byte[512];
 
 
            SetFilePointerEx(hFile, value, ref value, 0);
            ReadFile(hFile, buff, buff.Length, ref retVal, IntPtr.Zero);
 
            Console.OpenStandardOutput().Write(buff, 0, buff.Length);
 
 
            Console.ReadKey();
        }
Только не чего нет (((
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
12.04.2013, 15:54
Проверь hFile, если равен Zero, значит диск не открылся.
SetFilePointerEx принимает позицию из двух чисел - старшая и младшая часть. То есть, ты пытаешься читать с позиции 2097664 (0x200200).
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
12.04.2013, 17:03  [ТС]
Чет фигня все равно
Пожалуйста, сможете свой пример привести (если есть желание)?
hFile, вообще не чего не выводит(
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
12.04.2013, 18:02
Вот, чтение 1024 байта по адресу 0x200:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Text;
using System.Runtime.InteropServices;
 
namespace ReadDisk
{
    class Program
    {
        const uint GENERIC_READ = 0x80000000;
        const uint OPEN_EXISTING = 3;
 
        [DllImport("kernel32", SetLastError = true)]
        static extern unsafe System.IntPtr CreateFile
        (
            string FileName,          // file name
            uint DesiredAccess,       // access mode
            uint ShareMode,           // share mode
            uint SecurityAttributes,  // Security Attributes
            uint CreationDisposition, // how to create
            uint FlagsAndAttributes,  // file attributes
            int hTemplateFile         // handle to template file
        );
 
        [DllImport("kernel32", SetLastError = true)]
        static extern unsafe bool ReadFile
        (
            System.IntPtr hFile,      // handle to file
            void* pBuffer,            // data buffer
            int NumberOfBytesToRead,  // number of bytes to read
            int* pNumberOfBytesRead,  // number of bytes read
            int Overlapped            // overlapped buffer
        );
 
        
 
        public enum EMoveMethod : uint
        {
            Begin = 0,
            Current = 1,
            End = 2
        }
 
        [DllImport("Kernel32.dll", SetLastError = true)]
        static extern uint SetFilePointer(IntPtr hFile, int lDistanceToMove, int lpDistanceToMoveHigh, EMoveMethod dwMoveMethod);
 
        [DllImport("kernel32", SetLastError = true)]
        static extern unsafe bool CloseHandle
        (
            System.IntPtr hObject // handle to object
        );
 
        static IntPtr handle;
 
        static void Main(string[] args)
        {
            handle = CreateFile("\\\\.\\PhysicalDrive2", GENERIC_READ, 1 | 2, 0, OPEN_EXISTING, 0x80, 0);
            Console.Write(handle.ToInt64());
            SetFilePointer(handle, 0x200, 0, EMoveMethod.Begin);
 
            byte[] data = new byte[1024];
            int n = Read(data, 0, 1024);
 
            Console.WriteLine(Encoding.Default.GetString(data));
            Console.WriteLine("Bytes read: " + n + ", last error: " + Marshal.GetLastWin32Error());
 
            Console.ReadKey();
            CloseHandle(handle);
        }
 
        static unsafe int Read(byte[] buffer, int index, int count)
        {
            int n = 0;
            fixed (byte* p = buffer)
                if (!ReadFile(handle, p + index, count, &n, 0)) return 0;
            return n;
        }
    }
}
Написано как-нибудь чтобы работало, код собрал из кусков существующих проектов.
\\.\PhysicalDrive2 - моя 16 гб флешка.
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
12.04.2013, 18:04  [ТС]
Если открывает то пишет -1 ?
Спасибо!
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
12.04.2013, 18:06
Цитата Сообщение от sasha0192 Посмотреть сообщение
Если открывает то пишет -1 ?
Спасибо!
Нет, -1 это ошибка открытия.
Возможно, мешает антивирус. Еще попробуй от администратора запустить.
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
12.04.2013, 18:21  [ТС]
Цитата Сообщение от A1exSun Посмотреть сообщение
Возможно, мешает антивирус. Еще попробуй от администратора запустить.
Одна петрушка (
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
12.04.2013, 18:27
LastError какой номер?
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
12.04.2013, 18:28  [ТС]
Цитата Сообщение от A1exSun Посмотреть сообщение
LastError какой номер?
Номер 6
0
C#
57 / 57 / 5
Регистрация: 09.03.2013
Сообщений: 216
12.04.2013, 18:30
Это после ReadFile - ERROR_INVALID_HANDLE, понятно почему - он = -1.
Допиши после вызова CreateFile:
C#
1
Console.WriteLine("Last error: " + Marshal.GetLastWin32Error());
Что выведет?
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
12.04.2013, 18:34  [ТС]
Цитата Сообщение от A1exSun Посмотреть сообщение
Что выведет?
Теперь 5
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2013, 18:34
Помогаю со студенческими работами здесь

Сколькими способами из колоды (52 карты) можно выбрать 4 карты одной масти?
сколькими способами из колоды(52 карты) можно выбрать 4 карты одной масти? Можно найти общее число исходов, а дальше не знаю как,...

Вывести название карты, заданной двумя числами (достоинство и масть карты)
Здравствуйте , не могу понять как объявить переменные.. требуется же вроде как номер и имя(масть) не понимаю что-то.. помогите пожалуйста,...

Определить вероятность выпадения 4 дам, если из колоды в 32 карты взяли 4 карты
ЗАДАЧА 2: ИЗ 32 карт взяли 4 карты. Какова вероятность, что эти 4 карты все дамы ?

Поиск дисконтной карты при считывании кода с магнитной карты
Добрый день. Конфигурация: Управление торговлей 10.3 Если в Чеке ККМ (или Реализации товаров и услуг) нажать на поле &quot;Дисконтная...

Ввести порядковый номер карты из колоды и вывести в консоль масть и достоинство карты
ввести порядковый номер карты из колоды и выводит в консоль масть и достоинство карты. Колода, начинается с двоек до туза, по очереди, для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru