[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 8 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
DiskPart Advanced Script Console Автор: GeStart Live a.k.a GemoStarter
Системные требования: Windows XP или новее
DiskPart ASC - Программа, предназначенная для упрощения использования скриптов для программы DiskPart, встроенного в Windows консольного менеджера разделов. Использование ASC устраняет необходимость всякий раз перед использованием скрипта сверяться со списком имеющихся дисков и изменять скрипт, подставляя в него номера нужных дисков и разделов.
После запуска ASC будет выведен список всех доступных для работы физических дисков. После выбора диска будет выведена более детальная информация о нём, а так же список имеющихся на нём разделов. После выбора раздела будет отображена более детальная информация о нём.
Выбрав диск и, если нужно, раздел, можно будет выбрать один из заранее подготовленных скриптов в выпадающем списке. После нажатия кнопки "Run Script" ASC автоматически подставит номера диска и раздела в нужные места скрипта, и передаст его присутствующему в системе diskpart.exe.
ОСТОРОЖНО: В архиве с программой присутствуют два скрипта. Они удаляют с диска имеющуюся таблицу разделов (командой CLEAN), создают новую таблицу GPT или MBR (зависит от скрипта) и структуру разделов для установки Windows. Скрипты приложены, в основном, для демонстрации функционала, но полностью работоспособны, и при случайном запуске не на том диске обрекут вас на долгое и мучительное восстановление информации.

О скриптах:

Автоматическая подстановка номеров диска и раздела в скрипт достигается за счёт использования в скрипте переменных:
#ANTI# - Заглушка, предотвращающая случайный запуск скрипта без ASC, рекомендуется размещать первой строкой
#DISK# - Номер диска
#PART# - Номер раздела
#VOLU# - Номер тома, соответствующего #PART#
#PSTL# - Стиль разделов диска #DISK#
#GSEC# - Размер сектора #DISK# из информации о геометрии диска
#PSEC# - Размер физического сектора #DISK# (не все диски его сообщают)
#LSEC# - Размер логического сектора #DISK# (не все диски его сообщают)
#MNTP# - Точка монтирования раздела #PART# (без конечного "\")
#MNTPF№# - Свободная буква диска, это номер свободной буквы, если букв не хватит для всех номеров, скрипт не запустится
В скриптах поддерживаются простые вычисления. Выражение должно быть заключено в фигурные скобки,например:
{ 2 * 2 }
На место этого выражения будет подставлен его результат, то есть 4.
Вкладывать выражения друг в друга нельзя! Ошибки внутри выражений не проверяются, будьте внимательны.
Поддерживаются операторы:
^ - Возведение в степень
* - Умножение
/ - Деление
+ - Сложение
- - Вычитание
Не все йогурты одинаково полезны, и не все скрипты одинаково хорошо подходят для разных сценариев работы. К примеру, скрипт, написанный для MBR-дисков, будет непригоден для работы с GPT, и наоборот. Кроме того, некоторым скриптам достаточно выбрать только диск, другим же необходимо знать и раздел. Отсеять безусловно неподходящие скрипты поможет соблюдение шаблона именования:
DPMGRSEAU.AnyText
Собственно шаблоном здесь является DPMGRSEAU, то есть текст, располагающийся до первой точки. Всё, что находится после неё, игнорируется программой.
D - Для работы скрипту необходим номер диска
P - Необходим номер раздела
M - Поддерживается стиль разделов MBR
G - Поддерживается стиль разделов GPT
R - Поддерживаются RAW-диски (без таблицы разделов)
S - Поддерживаются диски со стандартным форматом сектора (512 байт как физически, так и логически)
E - Поддерживаются диски с форматом сектора 512e (4096 байт физически, 512 байт логически)
A - Поддерживаются диски с форматом сектора 4K (4096 байт как физически, так и логически)
U - Поддерживаются диски с неизвестным форматом сектора (любые другие комбинации, в том числе если диск не сообщает размер #PSEC# и #LSEC#)
Если скрипт может работать с любым стилем разделов и RAW, то можно не указывать стиль в шаблоне.
Если размер сектора не играет роли, в шаблоне нужно указать 0 либо не указывать чисел вовсе.
Если скрипт может работать без диска, раздела, вне зависимости от стиля разделов и размера сектора, шаблон можно оставить пустым. Можно и удалить шаблон вовсе, но во избежание неожиданного поведения лучше указать пустой. То есть .AnyText

Интерфейс:

1 - Список дисков
2 - Детальная информация о диске, выбранном в 1
3 - Список разделов на диске, выбранном в 1
4 - Детальная информация о разделе, выбранном в 3
5 - Список скриптов
6 - Запуск скрипта, выбранного в 5
7 - Запуск DiskPart без скрипта (для ручной работы)

Благодарности:

sergeysvirid, Adler, nikzzzz, vovan1982, Ander_73 и все, кого забыл упомянуть - за тестирование программы и ценные советы
Вложение

Версия 2.0



Последний раз редактировалось: Gemostarter (2019-07-24 17:04), всего редактировалось 8 раз(а)

[Цитировать]

    vovan1982
  • 214
  • Стаж: 9 лет
  • Сообщений: 1131
  • Репутация:77

    [+] [-]
  • Откуда: Ростов-на-Дону
SunOK, стоп, я немного не правильно понял, в хексе можно определить метку основного и логического разделов. Но Gemostarter же не нуждается в консольных вариантах.

[Цитировать]

    SunOK
  • 9
  • Стаж: 10 лет
  • Сообщений: 352
  • Репутация:32

    [+] [-]
  • Откуда: Україна, Перлина Поділля
vovan1982, пардон, еще не проснулся. Но ведь прога является надстройкой над DISKPART, а значит спокойно способна считывать с выбранного диска
DISKPART> list partition
Тогда я не понимаю вопрос Автора.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 8 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
vovan1982, SunOK, Кажется, надо сперва пояснить за терминологию:
Основной - Самый обычный раздел в таблице MBR
Расширенный - Как основной, но является контейнером для логических
Логический - Находится внутри расширенного, в одной из таблиц EBR в нём
"В хексе" что-то считать ASC может и без сторонних помощников, потому что, хотя
68243прога является надстройкой над DISKPART
но получение информации о дисках и разделах происходит с помощью функций WinAPI, в т.ч. DeviceIoControl(), который требует сперва открыть диск как файл.
Кажется, я нашёл способ. Настолько очевидный и простой, что даже стыдно сейчас ah
А "косвенный" метод, про который я писал, оказывается, очень даже прямой и соответствующий спекам логических разделов, но он даст ложное срабатывание при некоторых условиях.
UPD: Мессага сама собой отправилась. Я ничего не нажимал, и руки никуда не ложил, и даже не думал в эту сторону...

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Gemostarter,
68250но получение информации о дисках и разделах происходит с помощью функций WinAPI, в т.ч. DeviceIoControl(), который требует сперва открыть диск как файл.
А в чем проблема?
Насколько помню, получить можно получить с помощью IOCTL_DISK_GET_DRIVE_LAYOUT_EX или IOCTL_DISK_GET_PARTITION_INFO_EX, там только отслеживать надо тип разметки - GPT или MBR.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 8 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
nikzzzz, IOCTL_DISK_GET_DRIVE_LAYOUT_EX и используется. Но ни он, ни IOCTL_DISK_GET_PARTITION_INFO_EX не говорят "это логический раздел" прямо.

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Gemostarter
68253не говорят "это логический раздел" прямо.
Напрямую - да, там массив структур, но в каждом элементе массива есть PartitionNumber и PartitionType (PARTITION_EXTENDED=0x05).
Вытащить эти два значения не представляет сложности либо просто по смещению, либо через структуру, если смещения считать лень. ab

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 8 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
nikzzzz, Да знаю я ag Половина инфы в проге из этой структуры берётся.
По PartitionType можно определить расширенный раздел, но не логический. У логических типы те же, что у основных.
PartitionNumber тут тоже не помощник - нумерация разделов в винде сквозная, и прерывается только на расширенных (у них номер всегда 0). Ну и на пустых полях внутри EBR.
А вот по индексу, под которым расположена структура PARTITION_INFO_EX внутри DRIVE_LAYOUT_EX, можно определить логический раздел. Для MBR выделены индексы с 0 по 3, а начиная с 4 идут EBR, в которых, наряду с двумя пустышками и ссылкой на следующий EBR записан и логический раздел. То есть, если индекс больше 3, а номер раздела не 0, значит, у нас тут логический диск.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 8 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
ССЫЛКА НЕДЕЙСТВИТЕЛЬНА
Пробная версия. Кому не трудно, сравните данные, выводимые ASC, с данными других программ: не путает ли она диски? Не валится ли в нестандартных ситуациях? Особенно стоит проверить разные варианты с пропуском номеров дисков, например:
1. Вставить флешку A
2. Вставить флешку Б
3. Вынуть флешку А
ОСТОРОЖНО: Это полнофункциональная версия, и я не удалял из архива скрипты diskpart. При запуске скрипта он переразобьёт разделы на диске, не нажимайте "RunScript" где попало!


Последний раз редактировалось: Gemostarter (2019-07-08 06:50), всего редактировалось 1 раз

[Цитировать]

    vovan1982
  • 214
  • Стаж: 9 лет
  • Сообщений: 1131
  • Репутация:77

    [+] [-]
  • Откуда: Ростов-на-Дону
Gemostarter, проверил последнюю поделку.

так отображает мой USB-HDD АОМIE РА

а так, его же, твоя поделка.

а так, его видела предыдущая версия.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 8 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
vovan1982, Выбери раздел с номером "0" и покажи выхлоп.

[Цитировать]

    vovan1982
  • 214
  • Стаж: 9 лет
  • Сообщений: 1131
  • Репутация:77

    [+] [-]
  • Откуда: Ростов-на-Дону
Gemostarter, не понял, что имелось в виду под "раздел 0".

Если это, то правильно отображает.

А если 0 у диска 1, то так. Здесь 1, 2 и 3 - это правильная разметка, а вот что такое 0 не понятно?

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 8 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
vovan1982, Номер "0" в массиве структур разделов имеют элементы, физически существующие, но не предназначенные для показа пользователю. В том числе расширенный раздел, записанный в MBR - его diskpart отображает как раз под номером "0" (другие с таким номером он не отображает).
В данном случае, похоже, на том месте когда-то был раздел, но его удалили. Причём программа, которой он удалялся, не очистила его запись полностью, возможно, просто изменила тип.
Похоже, стоит добавить проверку типа раздела для тех "0", что прошли уже имеющиеся проверки.

[Цитировать]

    vovan1982
  • 214
  • Стаж: 9 лет
  • Сообщений: 1131
  • Репутация:77

    [+] [-]
  • Откуда: Ростов-на-Дону
Gemostarter, понял. Есть еще один USB-HDD в боксе IODD 2531, могу на нем еще проверить.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 8 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
vovan1982, Такие варианты нужно проверять обязательно.

[Цитировать]

    vovan1982
  • 214
  • Стаж: 9 лет
  • Сообщений: 1131
  • Репутация:77

    [+] [-]
  • Откуда: Ростов-на-Дону
Gemostarter, вот, все правильно отображает.

Страница 3 из 7


Показать сообщения:    

Текущее время: 03-Дек 20:21

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы