Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на VB6 (http://forum.oszone.net/showthread.php?t=228376)

sosed213 21-02-2012 07:14 1863266

IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на VB6
 
Тема изначально была созданна на http://bbs.vbstreets.ru , чтобы увеличить шанс решения проблемы дублирую тему на 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 (читал тут )

sosed213 21-02-2012 16:16 1863611

Тема значительно продвинулась на http://bbs.vbstreets.ru

alex_03 21-02-2012 16:30 1863621

diskpart.exe что это такое ? и почему на vb ?

sosed213 21-02-2012 21:20 1863872

alex_03,
Программа Diskpart позволяет выполнять расширенный набор действий, поддерживаемых оснасткой «Управление дисками». http://support.microsoft.com

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

alex_03 22-02-2012 18:09 1864513

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

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

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

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

sosed213 29-02-2012 08:13 1868955

alex_03, спасибо.

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

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

alex_03 29-02-2012 17:43 1869339

я бы скачал Visual Studio 2010 Express C++
вот ссылка
http://www.microsoft.com/visualstudi...ns/express-iso

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


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

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

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

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

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

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

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

http://lib.ru/CTOTOR/kernigan.txt_wi...-pictures.html
http://thelib.ru/books/brayen_kernig...ik_c-read.html
http://ik.3dscorpion.com.ua/files/st...Kernigan_C.pdf


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

ferget 29-02-2012 18:42 1869395

Цитата:

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

Цитата:

Цитата alex_03
С++ как бы расширенная версия языка Си , расширенная объектностью , так что смело можно читать именно Кернигана и Ричи »

Цитата:

Цитата alex_03
Но! будет не удобно программировать после VB , тем более строки »

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

alex_03 29-02-2012 22:35 1869601

Цитата:

Цитата ferget
начинать с Кернигана и Ричи очень плохой совет »

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

ferget 29-02-2012 22:43 1869607

вот аргумент
Цитата:

Цитата ferget
в с++ давно есть нормальный string и еще много чего »


alex_03 29-02-2012 23:18 1869638

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

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

ferget 01-03-2012 00:00 1869673

Цитата:

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

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

Цитата:

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

STL часть стандарта с++, а вот это
Цитата:

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

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

alex_03 01-03-2012 00:08 1869680

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

ferget 01-03-2012 00:32 1869689

Цитата:

Цитата alex_03
Программируем не ради программирования , а для написания какого-то софта »

+

sosed213 01-03-2012 06:36 1869772

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

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

alex_03 01-03-2012 09:57 1869830

Цитата:

Цитата sosed213
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 1870356

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


Время: 14:42.

Время: 14:42.
© OSzone.net 2001-