Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
5 / 10 / 3
Регистрация: 05.10.2010
Сообщений: 97

Геометрия образа диска

08.09.2011, 03:27. Показов 2986. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Вопрос такой: как получить информацию о геометрии образа диска?
Вызов ф-ии:
C#
1
2
3
DeviceIoControl(Handle,
                IOCTL_DISK_GET_DRIVE_GEOMETRY,
                null,...)
валится, если пытаться применять её к образу диска...

Код ошибки 57.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.09.2011, 03:27
Ответы с готовыми решениями:

Работа с файлами образа диска IMG
Здраствуйте! Я гуглил и не где так и не нашол, тому и пишу сюда. Как переместить, копировать, заменить, удалить файл из образа...

Каие программы могут считывать файлы с образа HDD диска и читать с него файлы как с физического диска ?
Здраствуйте ! подскажите пожалуйста какие программы могут читать образы HDD диска как физического диска и восстанавливать файлы с них ...

создание образа диска
Форумчане и Модераторы помогите, у меня при создании образа диска появляется следующее сообщение:"Сбой операции службы теневого...

5
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
08.09.2011, 04:07
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
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
 
namespace ConsoleApplication24
{
    class Program
    {
        const uint IOCTL_DISK_GET_DRIVE_GEOMETRY = 0x70000;
 
        const uint GENERIC_READ     = 0x80000000;
 
        const uint FILE_SHARE_READ  = 0x00000001;
        const uint FILE_SHARE_WRITE = 0x00000002;
 
        const uint OPEN_EXISTING    = 0x00000003;
 
        static readonly IntPtr INVALID_FILE_HANDLE = (IntPtr)( -1 );
 
        [DllImport( "kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode )]
        static extern IntPtr CreateFile (
            string lpFileName,
            uint dwDesiredAccess,
            uint dwShareMode,
            IntPtr lpSecurityAttributes,
            uint dwCreationDisposition,
            uint dwFlagsAndAttributes,
            IntPtr hTemplateFile
            );
 
        [DllImport( "kernel32.dll", SetLastError = true )]
        static extern bool CloseHandle (
            IntPtr hObject
            );
 
        enum MEDIA_TYPE : uint
        {
            Unknown = 0x00,
            F5_1Pt2_512 = 0x01,
            F3_1Pt44_512 = 0x02,
            F3_2Pt88_512 = 0x03,
            F3_20Pt8_512 = 0x04,
            F3_720_512 = 0x05,
            F5_360_512 = 0x06,
            F5_320_512 = 0x07,
            F5_320_1024 = 0x08,
            F5_180_512 = 0x09,
            F5_160_512 = 0x0a,
            RemovableMedia = 0x0b,
            FixedMedia = 0x0c,
            F3_120M_512 = 0x0d,
            F3_640_512 = 0x0e,
            F5_640_512 = 0x0f,
            F5_720_512 = 0x10,
            F3_1Pt2_512 = 0x11,
            F3_1Pt23_1024 = 0x12,
            F5_1Pt23_1024 = 0x13,
            F3_128Mb_512 = 0x14,
            F3_230Mb_512 = 0x15,
            F8_256_128 = 0x16,
            F3_200Mb_512 = 0x17,
            F3_240M_512 = 0x18,
            F3_32M_512 = 0x19
        }
 
        [StructLayout( LayoutKind.Sequential )]
        class DISK_GEOMETRY
        {
            public long Cylinders;
            public MEDIA_TYPE MediaType;
            public uint TracksPerCylinder;
            public uint SectorsPerTrack;
            public uint BytesPerSector;
        }
 
        [DllImport( "kernel32.dll", SetLastError = true )]
        static extern bool DeviceIoControl (
            IntPtr hDevice,
            uint dwIoControlCode,
            IntPtr lpInBuffer,
            int nInBufferSize,
            DISK_GEOMETRY lpOutBuffer,
            int nOutBufferSize,
            ref int lpBytesReturned,
            IntPtr lpOverlapped
            );
 
        static void Main ( string[] args ) {
            var geometry = new DISK_GEOMETRY();
            int retVal = Marshal.SizeOf( typeof( DISK_GEOMETRY ) );
 
            IntPtr hFile = CreateFile(
                "\\\\.\\PhysicalDrive0",
                GENERIC_READ,
                FILE_SHARE_READ | FILE_SHARE_WRITE,
                IntPtr.Zero,
                OPEN_EXISTING,
                0U,
                IntPtr.Zero
                );
 
            if ( hFile == INVALID_FILE_HANDLE )
                return;
 
            if ( !DeviceIoControl(
                    hFile, IOCTL_DISK_GET_DRIVE_GEOMETRY, IntPtr.Zero,
                    0, geometry, retVal, ref retVal, IntPtr.Zero 
                    )
                )
                Console.WriteLine( "Error: " + Marshal.GetLastWin32Error() );
 
            Debugger.Break();
 
            CloseHandle( hFile );
            Console.ReadLine();
        }
    }
}
0
5 / 10 / 3
Регистрация: 05.10.2010
Сообщений: 97
08.09.2011, 04:33  [ТС]
SSTREGG, не... Как у жёсткого диска определить геометрию я уже вкурил... Я имею ввиду дупустим такую ситуацию: есть iso-образ диска (или mdf, или ещё какая-нбудь гадость). Я его пробую открывать createFile`ом и получать геометрию DeviceIoControl`ом. Всё падает при этом.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
08.09.2011, 04:47
dmz, DeviceIoControl работает с устройствами и позволяет получать/устанавливать техническую информацию о файле (директории, потоке). Функция понятия не имеет что за файл ей подсовывают и она не знает что такое ISO, MDF или EXE.
Могу предложить 2 варианта:
1) Искать готовые либы по работе с ISO, MDF, ...
2) Разбирать формат самому изучая спецификацию
0
5 / 10 / 3
Регистрация: 05.10.2010
Сообщений: 97
08.09.2011, 13:15  [ТС]
SSTREGG, ух... уныло... А простенько сэмулировать образ нельзя? ну чтоб обратиться к нему как к дисководу?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
09.09.2011, 00:52
dmz, для записи образов в системе есть IMAPI, можно попробовать с ним поработать и получить инфу.

Большинство современных эмуляторов работают с ISO через собственные драйвера.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2011, 00:52
Помогаю со студенческими работами здесь

Создание образа диска/директории
Пытаюсь написать приложение для командной строки, которое бы создавало образ по указанному пути с использованием функций, доступных в...

Запись загрузочного диска с образа
Скачал образ загрузочного диска win7, далее с помощью DAEMON Tools Lite cмонтирую его и потом просто запишу средствами Windows все файлы на...

Создание образа загрузочного диска
Здравствуйте! Хочу создать загрузочный диск... Как это делать знаю... Но вот нужна прога для создания самого образа из скачанных папок и...

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

Восстановление образа диска с Clonezilla
Доброго времени суток! Снял образ ЖД (тупо посекторное копирование) с помощью зиллы, при попытке развернуть её на VMWare, образ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru