Войти

Показать полную графическую версию : IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на VB6


sosed213
21-02-2012, 07:14
Тема изначально была созданна на http://bbs.vbstreets.ru (http://bbs.vbstreets.ru/viewtopic.php?f=93&t=43788#p6760984) , чтобы увеличить шанс решения проблемы дублирую тему на OSZone

Я пишу прогу что то типо diskpart.exe только с большими возможностями.
Для начала хочу разобраться с большинством функция типа IOCTL_*

Уже научился и разобрался с этими функциями.
IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
IOCTL_STORAGE_GET_DEVICE_NUMBER
IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER
IOCTL_DISK_GET_LENGTH_INFO
IOCTL_DISK_GET_DRIVE_GEOMETRY

Затык начался на этих функциях:
IOCTL_DISK_GET_DRIVE_LAYOUT_EX
IOCTL_DISK_GET_PARTITION_INFO_EX

Точнее проблема в структуре данных DRIVE_LAYOUT_INFORMATION_EX и PARTITION_INFORMATION_EX
Не получается, видимо, ее правильно описать.

Зато если я делаю так, то все успешно:

Dim temp(4096) As Byte
If DeviceIoControl(hDrive, IOCTL_DISK_GET_PARTITION_INFO_EX, ByVal 0&, 0, temp(0), 4096, dwOutBytes, ByVal 0&) Then
MsgBox "Good!"
Else
MsgBox "Failed!"
End If


так я и понял что проблема в структуре.


Private Enum PARTITION_STYLE
PARTITION_STYLE_MBR = 0
PARTITION_STYLE_GPT = 1
PARTITION_STYLE_RAW = 2

Private Type DRIVE_LAYOUT_INFORMATION_MBR
Signature As Long
End Type

Private Type DRIVE_LAYOUT_INFORMATION_GPT
DiskId As Long
StartingUsableOffset As Long
UsableLength As Long
MaxPartitionCount As Long
End Type

Private Type PARTITION_INFORMATION_EX
PartitionStyle As PARTITION_STYLE
StartingOffset As Long
PartitionLength As Long
PartitionNumber As Long
RewritePartition As Boolean
Mbr As PARTITION_INFORMATION_MBR
Gpt As PARTITION_INFORMATION_GPT
End Type

Private Type DRIVE_LAYOUT_INFORMATION_EX
PartitionStyle As PARTITION_STYLE
PartitionCount As Long
Mbr As PARTITION_INFORMATION_MBR
Gpt As PARTITION_INFORMATION_GPT
PartitionEntry(1) As PARTITION_INFORMATION_EX
End Type


Скажу сразу, что эта проблема в инете есть, но мало кто этим занимается.
Буду рад если кто поможет.

Если проблему решить не удастся то наверно придется вручную копать и разбирать MBR (читал тут (http://dimnsk.clan.su/publ/master_boot_record_mbr/25-1-0-50) )

sosed213
21-02-2012, 16:16
Тема значительно продвинулась на http://bbs.vbstreets.ru (http://bbs.vbstreets.ru/viewtopic.php?f=1&t=43788)

alex_03
21-02-2012, 16:30
diskpart.exe что это такое ? и почему на vb ?

sosed213
21-02-2012, 21:20
alex_03,
Программа Diskpart позволяет выполнять расширенный набор действий, поддерживаемых оснасткой «Управление дисками». http://support.microsoft.com (http://support.microsoft.com/kb/300415)

VB , потому что мне так хочется :) (я просто всегда на нем пишу)

alex_03
22-02-2012, 18:09
Я так понимаю до программирования чего-то там важного и умного ,Вы делаете что-то вроде "обертки" для win api функций на языке visual basic. И кучу времени потратите только на то чтобы сделать враппер . И это еще до решения реальной задачи .

Почему нельзя сразу приступить к программированию логики задачи на языке Си++ ? По моему знать "плюса" намного выгоднее чем всякие там бейсики. По крайней мере ты избавляешься от вот такой вот толкотни воды в ступе.

Тем более Вы будете писать системную программу. Я думаю что бейсик хорошо подходит для решения прикладных задач но не системных. Для системных задач только Си.

Не стоит забывать что есть еще такая вещь как маршалинг данных через границы двух языков программирования. Мне вот приходилось подгружать библиотеку написанную кем-то и на чем-то , так вот при вызове некоторых функций которые принимают параметры текстовых строк - приходилось танцевать с бубном и все равно вылетал run-time error.

sosed213
29-02-2012, 08:13
alex_03, спасибо.

Я осознаю что пора бы переходить на Си++, но все время писал только на VB6 (там обалденный способы работы со строками), надо наверно уже пробовать писать.

Может посоветуешь дистрибутив Си++ и какую нибудь полезную документацию и справочник по функциям, ну и примеры желательно. Хотя бы подскажи дистрибутив и учебник для начала.

alex_03
29-02-2012, 17:43
я бы скачал Visual Studio 2010 Express C++
вот ссылка
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express-iso

Скачаете iso там есть уже все и С++ и C# и VB - все бесплатно - пользуйтесь на здоровье, потом только надо будет зарегистрировать свою версию - это легко - вам программа все сама подскажет


Теперь надо скачать SDK
вот ссылка
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=18950

Скачаете iso там есть все необходимое для программирования под Windows

В итоге у Вас будет бесплатный набор для программирования под Windows

и конечно же читайте
http://msdn.microsoft.com/library/default.aspx

Вот тут Ваша тема ( наверное Вы уже в курсе )
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363978%28v=vs.85%29.aspx

так книга .......

обязательно начните с этого : Керниган и Ричи - язык СИ
вот ссылка на онлайн чтение или для скачивания

http://lib.ru/CTOTOR/kernigan.txt_with-big-pictures.html
http://thelib.ru/books/brayen_kernigan_dennis_richi/yazik_c-read.html
http://ik.3dscorpion.com.ua/files/stud_roboti/program/Kernigan_C.pdf


по С++ я бы начал сначала почитал немного Шилдта и самого автора языка С++ Бьёрна Страуструпа
язык С++ это объектно-оринетированный язык , но все что заложено в Си есть и в С++.
С++ как бы расширенная версия языка Си , расширенная объектностью , так что смело можно читать именно Кернигана и Ричи. И кстати СИ будет достаточно для системного программирования. Но! будет не удобно программировать после VB , тем более строки :)

ferget
29-02-2012, 18:42
обязательно начните с этого : Керниган и Ричи - язык СИ »
С++ как бы расширенная версия языка Си , расширенная объектностью , так что смело можно читать именно Кернигана и Ричи »
Но! будет не удобно программировать после VB , тем более строки »

вообще-то в с++ давно есть нормальный string и еще много чего, и начинать с Кернигана и Ричи очень плохой совет

alex_03
29-02-2012, 22:35
начинать с Кернигана и Ричи очень плохой совет »

аргументируйте

ferget
29-02-2012, 22:43
вот аргумент
в с++ давно есть нормальный string и еще много чего »

alex_03
29-02-2012, 23:18
Свой string написать можно в полчаса , это обертка для типа array char c перегруженными операциями =, + , -, >=, >, ==, <, <=,etc..
а так называем string , о котором Вы отозвались как о нормальном есть часть STL - Standard Templete Library. Для понимая которой необходимо знать что такое " языковая объектность". При решении данной задачи, о которой было указано в теме , достаточно "процедурной парадигмы" , чтобы не тратить время на освоения мира объектов со всеми вытекающими.

Я останусь на своем мнении и предложу автору топика все же читать Кернигана и Ричи - ибо это авторы языка Си и лучшей книги по Си нет и быть не может.

ferget
01-03-2012, 00:00
Я останусь на своем мнении и предложу автору топика все же читать Кернигана и Ричи - ибо это авторы языка Си и лучшей книги по Си нет и быть не может. »

вообще-то речь идет о с++, но это к слову

а так называем string , о котором Вы отозвались как о нормальном есть часть STL - Standard Templete Library. »

STL часть стандарта с++, а вот это
Для понимая которой необходимо знать что такое " языковая объектность". »

не понятно, поясните

alex_03
01-03-2012, 00:08
мы говорим не по теме - оффтоп ,
не хочу развивать тему о языке С++. Для решения поставленной задачи человеку знающему vb необходимо подучить язык си , для этого я указал что читать и что ставить. Чтобы не учиться слишком долго и решить задачу в максимально короткий срок. Программируем не ради программирования , а для написания какого-то софта. И так как при программировании с Windows API с++ не нужен - он будет избыточным , достаточно Си. При желании потом можно расширить свои знания в любое направление. "Языковая объектность" - я так называю ООП.

ferget
01-03-2012, 00:32
Программируем не ради программирования , а для написания какого-то софта »

+

sosed213
01-03-2012, 06:36
alex_03, будет ли программа откомпилированная в Visual Studio 2010 Express C++ работать в среде PE, без интеграции в PE среду компонентов .NET ?

Просто предполагается что программа должна будет работать без установки, запуском одного exe-файла.

alex_03
01-03-2012, 09:57
alex_03, будет ли программа откомпилированная в Visual Studio 2010 Express C++ работать в среде PE, без интеграции в PE среду компонентов .NET ?
Просто предполагается что программа должна будет работать без установки, запуском одного exe-файла. »


при программировании создавайте обычный проект.

Есть возможность скомпилировать в native код и manage код. Нативный(native) - он же "обычный", это когда компилируется в машинные коды Ваш С++ код. Работать должно везде - по сути. Управляемый(Manage) - это когда код С++ компилируется в промежуточный "байт-код" (CIL , IL , MCIL - по разному называется ) - работает только там этот код где стоит виртуальная машина .net причем той версии (1, 2 ,3 ,4 ) - какой версии код. Вам нужно только писать чистый "си - код" и вызывать чистый "си- код" Windows про net забудьте

ferget
01-03-2012, 20:59
выбираете проект win32, в мастере ставите галку пустой проект, в обозревателе решений правой кнопкой мыши на проекте -> добавить, добавляете файл с++




© OSzone.net 2001-2012